Eingebettete Analysen

mit Amazon QuickSight

Modul 4: Lambda-Funktionen

In diesem Modul werden wir unsere Datenverarbeitungsinfrastruktur für das Webportal einrichten.

Einführung

In diesem Modul werden wir unsere Datenverarbeitungsinfrastruktur für das Webportal einrichten. Wir verwenden AWS Lambda, Sie können jedoch Ihre bestehende Datenverarbeitungsinfrastruktur nutzen, wo Ihr Webportal oder Ihre Anwendung bereits läuft.

Lerninhalte

  • Lambda-Ausführungsrolle anlegen
  • URL-Lambda für Dashboard-Einbettung erstellen: Um eine Rolle zu übernehmen, die über die Berechtigung verfügt, QuickSight APIs auszuführen und Dashboard-/Sitzungseinbettungs-URL zu generieren.
  • URL-Lambda für Sitzungseinbettung erstellen: Um eine Rolle zu übernehmen, die über die Berechtigung verfügt, QuickSight APIs auszuführen und Dashboard-/Sitzungseinbettungs-URL zu generieren.

 Veranschlagte Zeit

20 Minuten

 Verwendete Services

Implementierung

  • Lambda-Ausführungsrolle anlegen

    Die Schritte zur Erstellung einer Rolle, die für die Lambda-Ausführung verwendet werden soll, sind nachstehend aufgeführt

    1. Starten Sie IAM und wählen Sie auf der linken Seite Rollen.

    79-1

    2. Klicken Sie auf die Schaltfläche Rolle erstellen.

    80-2

    2. Klicken Sie auf Lambda und auf Schaltfläche Als Nächtes: Berechtigungen.

    81-2

    3. Klicken Sie auf die Schaltfläche Richtlinie erstellen. Dadurch wird eine neue Registerkarte mit der Option zur Erstellung von Richtlinien geöffnet.

    82-3

    4. Klicken Sie auf die Registerkarte JSON, fügen Sie die folgende Richtlinie ein und klicken Sie auf die Schaltfläche Richtlinie überprüfen.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "quicksight:DescribeUser",
                    "quicksight:UpdateUser",
                    "quicksight:CreateGroup",
                    "quicksight:CreateUser",
                    "quicksight:DeleteUser",
                    "quicksight:DeleteGroup",
                    "quicksight:DeleteGroupMembership",
                    "quicksight:UpdateDashboardPermissions",
                    "quicksight:CreateGroupMembership",
                    "quicksight:RegisterUser"
                ],
                "Resource": "*"
            }
        ]
    }
    83-4

    5. Benennen Sie die Richtlinie als QSInitialSetupTempPolicy und klicken Sie auf die Schaltfläche Richtlinie erstellen.
    Wir werden diese Rolle nutzen, um eine anfängliche Setup-Lambda-Funktion auszuführen und dann diese temp. Richtlinie entfernen.

    84-5

    6. Wechseln Sie zurück zur Registerkarte Rolle erstellen. Aktualisieren Sie die Richtlinienliste, suchen Sie nach QSInitialSetupTempPolicy und markieren Sie das Auswahlkästchen.

    85-6

    7. Suchen Sie nach LambdaBasic, wählen Sie AWSLambdaBasicExecutionRole und klicken Sie auf die Schaltfläche Weiter: Tags.

    86-7

    8. Klicken Sie auf Weiter: Überprüfung.

    87-8

    9. Benennen Sie die Rolle als QSLambdaBasicExecutionRole und klicken Sie auf die Schaltfläche Rolle erstellen.

    88-9
  • Url-Lambda-Einbettung erstellen (für Dashboard-Einbettung)

    Überspringen Sie diesen Schritt, wenn Sie die Sitzungseinbettung ausprobieren.
    Wir werden nun eine Lambda-Funktion erstellen, die die dynamische Embed-URL erzeugt.

    1. Starten Sie Lambda und klicken Sie auf die Schaltfläche Funktion erstellen.

    92-1
    2. Treffen Sie die folgenden Auswahlen.
    Wählen Sie Von Grund auf neu verfassen
    Funktionsname: QSGetEmbedUrl
    Laufzeit: Python 3.8
    Ausführende Rolle: Verwenden Sie eine vorhandene Rolle Wählen Sie QSLambdaBasicExecutionRole aus der Dropdown-Liste. Klicken Sie auf Funktion erstellen
    93-2
    94

    3. Kopieren Sie folgenden Python-Code in die Lambda-Funktion und klicken Sie auf Speichern.
     

    def lambda_handler(event, context):
        #Implementation
    
        import urllib, json, sys, os, base64, boto3, botocore
        
        #Read in environment variables
        awsAccountId = os.environ["AwsAccountId"]
        roleArn = os.environ["RoleArn"]
    
        #Read in the values passed to Lambda function
        openIdToken = event['queryStringParameters']['openIdToken']
        dashboardId = event['queryStringParameters']['dashboardId']
        dashboardRegion = event['queryStringParameters']['dashboardRegion']
        resetDisabled = True
        undoRedoDisabled = True
    
        userName = json.loads(base64.b64decode(openIdToken.split('.')[1]+ "========"))['cognito:username']
        #Assume role that has permissions on QuickSight
        sts = boto3.client('sts')
        assumedRole = sts.assume_role_with_web_identity(
            RoleArn = roleArn,
            RoleSessionName = userName,
            WebIdentityToken = openIdToken
        )
    
        assumedRoleSession = boto3.Session(
                aws_access_key_id = assumedRole['Credentials']['AccessKeyId'],
                aws_secret_access_key = assumedRole['Credentials']['SecretAccessKey'],
                aws_session_token = assumedRole['Credentials']['SessionToken'],
            )
    
        quickSight = assumedRoleSession.client('quicksight',region_name= dashboardRegion)
    
        #Generate Embed url
        response = quickSight.get_dashboard_embed_url(
                        AwsAccountId = awsAccountId,
                        DashboardId = dashboardId,
                        IdentityType = 'IAM',
                        SessionLifetimeInMinutes = 600,
                        UndoRedoDisabled = undoRedoDisabled,
                        ResetDisabled = resetDisabled
                    )
    
        return {
                'statusCode': 200,
                'headers': {"Access-Control-Allow-Origin": "*"},
                'body': json.dumps(response)
               }
    95-3

    4. Scrollen Sie nach unten zum Abschnitt Umgebungsvariablen und klicken Sie auf Umgebungsvariablen verwalten.

    96-4

    5. Fügen Sie die folgenden Umgebungsvariablen hinzu.
    AwsAccountId
    RoleArn - QSER-Rollen-ARN in Ihrem Notizblock gespeichert.
    Klicken Sie auf die Schaltfläche Speichern.

    97-5

    6. Scrollen Sie nach unten zu Grundeinstellungen und klicken Sie auf die Schaltfläche Bearbeiten.

    98-6

    7. Erhöhen Sie den Timeout-Wert auf 2 Minuten und klicken Sie auf die Schaltfläche Speichern

    99-7
  • Embed URL-Lambda erstellen (für Sitzungseinbettung)

    Springen Sie zum nächsten Abschnitt, wenn Sie die Dashboard-Einbettung ausprobieren.
    Wir werden nun eine Lambda-Funktion erstellen, die die dynamische Embed-URL erzeugt.

    1. Starten Sie Lambda und klicken Sie auf die Schaltfläche Funktion erstellen.

    103-1

    2. Treffen Sie die folgenden Auswahlen.
    Wählen Sie Von Grund auf neu verfassen
    Funktionsname: QSGetEmbedUrl
    Laufzeit: Python 3.8
    Ausführende Rolle: Verwenden Sie eine vorhandene Rolle Wählen Sie QSLambdaBasicExecutionRole aus der Dropdown-Liste. Klicken Sie auf Funktion erstellen

    104
    105

    3. Kopieren Sie folgenden Python-Code in die Lambda-Funktion und klicken Sie auf Speichern.

    import json,sys,os,boto3,base64
    
    def lambda_handler(event, context):
            #Read in environment variables
            awsAccountId = os.environ["AwsAccountId"]
            roleArn = os.environ["RoleArn"]
            identityRegion = os.environ["QuickSightIdentityRegion"]
            roleName = roleArn.split('/')[1]
    
            #Read in the values passed to Lambda function
            openIdToken = event['queryStringParameters']['openIdToken']
            dashboardRegion = event['queryStringParameters']['dashboardRegion'] 
            
            userName = json.loads(base64.b64decode(openIdToken.split('.')[1]+ "========"))['cognito:username']
            
            #Assume role that has permissions on QuickSight
            sts = boto3.client('sts')
            assumedRole = sts.assume_role_with_web_identity(
                RoleArn = roleArn,
                RoleSessionName = userName,
                WebIdentityToken = openIdToken
            )
    
            assumedRoleSession = boto3.Session(
                    aws_access_key_id = assumedRole['Credentials']['AccessKeyId'],
                    aws_secret_access_key = assumedRole['Credentials']['SecretAccessKey'],
                    aws_session_token = assumedRole['Credentials']['SessionToken'],
                )
    
            quickSight = assumedRoleSession.client('quicksight', region_name = dashboardRegion)
            
            #Generate Session Embed url
            response = quickSight.get_session_embed_url(
                            AwsAccountId = awsAccountId,
                            UserArn = "arn:aws:quicksight:"+identityRegion+":"+awsAccountId+":user/default/"+roleName+"/"+userName
                        )
    
            return {
                    'statusCode': 200,
                    'headers': {"Access-Control-Allow-Origin": "*"},
                    'body': json.dumps(response)
                   }
    106

    4. Scrollen Sie nach unten zum Abschnitt Umgebungsvariablen und klicken Sie auf Umgebungsvariablen verwalten.

    107

    5. Fügen Sie die folgenden Umgebungsvariablen hinzu.
    AwsAccountId
    RoleArn - QSER-Rollen-ARN in Ihrem Notizblock gespeichert.
    QuickSightIdentityRegion - Region, in der Ihre QuickSight-Identitäten eingerichtet werden.
    Klicken Sie auf die Schaltfläche Speichern.

    108

    6. Scrollen Sie nach unten zu Grundeinstellungen und klicken Sie auf die Schaltfläche Bearbeiten.

    109

    7. Erhöhen Sie den Timeout-Wert auf 2 Minuten und klicken Sie auf die Schaltfläche Speichern

    110

Fazit

Sie haben Modul 4 erfolgreich abgeschlossen! Als Nächstes können Sie in Modul fünf ein API-Gateway und eine statische Webseite erstellen.

War das Modul hilfreich?

API-Gateway und statische Webseiten