Analyses intégrées
avec Amazon QuickSight
Module 4 : Fonctions Lambda
Dans ce module, nous allons configurer notre infrastructure de calcul pour alimenter le portail web.
Introduction
Dans ce module, nous allons configurer notre infrastructure de calcul pour alimenter le portail web. Nous utiliserons pour cela AWS Lambda. Notez que vous pouvez utiliser votre propre infrastructure de calcul si votre application ou votre portail web est déjà actif.
Ce que vous apprendrez
- Créer un rôle d'exécution Lambda
- Créer une URL Lambda intégrée pour l'intégration du tableau de bord (pour déterminer le rôle autorisé à exécuter les API QuickSight et générer une URL intégrée de tableau de bord ou de séance)
- Créer une URL Lambda intégrée pour l'intégration d'une séance (pour déterminer le rôle autorisé à exécuter les API QuickSight et générer une URL intégrée de tableau de bord ou de séance)
Durée
20 minutes
Services utilisés
Mise en œuvre
-
Créer un rôle d'exécution Lambda
La procédure de création du rôle qui servira à l'exécution Lambda est décrite ci-dessous :
1. Lancez IAM et sélectionnez Rôles dans le volet de gauche.
2. Cliquez sur Créer un rôle.
2. Cliquez sur Lambda, puis sur le bouton Next: Permissions (Suivant : Autorisations).
3. Cliquez sur le bouton Créer une stratégie. Le nouvel onglet qui s'affiche contient une option de création de stratégie.
4. Cliquez sur l'onglet JSON, collez la stratégie suivante, puis cliquez sur le bouton Examiner une stratégie.
{ "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. Nommez la stratégie QSInitialSetupTempPolicy, puis cliquez sur le bouton Créer une stratégie.
Nous utiliserons ce rôle pour exécuter une fonction lambda de configuration initiale, puis nous supprimerons cette stratégie temporaire.6. Revenez à l'onglet Créer un rôle. Actualisez la liste des stratégies, recherchez QSInitialSetupTempPolicy, puis cochez la zone de sélection.
7. Recherchez LambdaBasic, sélectionnez AWSLambdaBasicExecutionRole, puis cliquez sur le bouton Next: Tags (Suivant : Balises).
8. Sélectionnez Next: Review (Suivant : Vérifier).
9. Nommez le rôle QSLambdaBasicExecutionRole, puis cliquez sur le bouton Créer un rôle.
-
Créer une URL Lambda intégrée (pour l'intégration du tableau de bord)
Ignorez cette étape si vous voulez vous exercer pour l'intégration d'une séance.
Nous allons maintenant créer une fonction Lambda qui génère l'URL intégrée dynamique.
1. Lancez Lambda, puis cliquez sur le bouton Créer une fonction.
2. Effectuez les sélections suivantes :
Choisissez Créer à partir de zéro.
Nom de fonction : QSGetEmbedUrl
Exécution : Python 3.8
Rôle d'exécution : Utilisez un rôle existant. Sélectionnez le rôle QSLambdaBasicExecutionRole dans la liste déroulante. Cliquez sur Créer une fonction.3. Copiez le code Python suivant dans la fonction Lambda , puis cliquez sur Enregistrer.
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. Accédez à la section Variables d'environnement, puis cliquez sur Gérer les variables d'environnement.
5. Ajoutez les variables d'environnement suivantes.
AwsAccountId
RoleArn - QSER Role Arn enregistré dans votre Bloc-notes.
Cliquez sur le bouton Enregistrer.6. Accédez à Paramètres de base, puis cliquez sur le bouton Modifier.
7. Augmentez la valeur Expiration à 2 minutes, puis cliquez sur Enregistrer
-
Créer une URL Lambda intégrée (pour l'intégration d'une séance)
Passez à la section suivante si vous voulez vous exercer pour l'intégration d'une séance.
Nous allons maintenant créer une fonction Lambda qui génère l'URL intégrée dynamique.1. Lancez Lambda, puis cliquez sur le bouton Créer une fonction.
2. Effectuez les sélections suivantes :
Choisissez Créer à partir de zéro.
Nom de fonction : QSGetEmbedUrl
Exécution : Python 3.8
Rôle d'exécution : Utilisez un rôle existant. Sélectionnez le rôle QSLambdaBasicExecutionRole dans la liste déroulante. Cliquez sur Créer une fonction.3. Copiez le code Python suivant dans la fonction Lambda , puis cliquez sur Enregistrer.
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. Accédez à la section Variables d'environnement, puis cliquez sur Gérer les variables d'environnement.
5. Ajoutez les variables d'environnement suivantes.
AwsAccountId
RoleArn - QSER Role Arn enregistré dans votre Bloc-notes.
QuickSightIdentityRegion - Région où sont configurées vos identités QuickSight.
Cliquez sur le bouton Enregistrer.6. Accédez à Paramètres de base, puis cliquez sur le bouton Modifier.
7. Augmentez la valeur Expiration à 2 minutes, puis cliquez sur Enregistrer
Conclusion
Vous avez terminé le module 4 avec succès ! Dans le module 5, nous allons créer une passerelle API et une page web statique.