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.
2. Klicken Sie auf die Schaltfläche Rolle erstellen.
2. Klicken Sie auf Lambda und auf Schaltfläche Als Nächtes: Berechtigungen.
3. Klicken Sie auf die Schaltfläche Richtlinie erstellen. Dadurch wird eine neue Registerkarte mit der Option zur Erstellung von Richtlinien geöffnet.
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": "*" } ] }
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.6. Wechseln Sie zurück zur Registerkarte Rolle erstellen. Aktualisieren Sie die Richtlinienliste, suchen Sie nach QSInitialSetupTempPolicy und markieren Sie das Auswahlkästchen.
7. Suchen Sie nach LambdaBasic, wählen Sie AWSLambdaBasicExecutionRole und klicken Sie auf die Schaltfläche Weiter: Tags.
8. Klicken Sie auf Weiter: Überprüfung.
9. Benennen Sie die Rolle als QSLambdaBasicExecutionRole und klicken Sie auf die Schaltfläche Rolle erstellen.
-
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.
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 erstellen3. 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) }
4. Scrollen Sie nach unten zum Abschnitt Umgebungsvariablen und klicken Sie auf Umgebungsvariablen verwalten.
5. Fügen Sie die folgenden Umgebungsvariablen hinzu.
AwsAccountId
RoleArn - QSER-Rollen-ARN in Ihrem Notizblock gespeichert.
Klicken Sie auf die Schaltfläche Speichern.6. Scrollen Sie nach unten zu Grundeinstellungen und klicken Sie auf die Schaltfläche Bearbeiten.
7. Erhöhen Sie den Timeout-Wert auf 2 Minuten und klicken Sie auf die Schaltfläche Speichern
-
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.
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 erstellen3. 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) }
4. Scrollen Sie nach unten zum Abschnitt Umgebungsvariablen und klicken Sie auf Umgebungsvariablen verwalten.
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.6. Scrollen Sie nach unten zu Grundeinstellungen und klicken Sie auf die Schaltfläche Bearbeiten.
7. Erhöhen Sie den Timeout-Wert auf 2 Minuten und klicken Sie auf die Schaltfläche Speichern
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.