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.

    79-1

    2. Cliquez sur Créer un rôle.

    80-2

    2. Cliquez sur Lambda, puis sur le bouton Next: Permissions (Suivant : Autorisations).

    81-2

    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.

    82-3

    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": "*"
            }
        ]
    }
    83-4

    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.

    84-5

    6. Revenez à l'onglet Créer un rôle. Actualisez la liste des stratégies, recherchez QSInitialSetupTempPolicy, puis cochez la zone de sélection.

    85-6

    7. Recherchez LambdaBasic, sélectionnez AWSLambdaBasicExecutionRole, puis cliquez sur le bouton Next: Tags (Suivant : Balises).

    86-7

    8. Sélectionnez Next: Review (Suivant : Vérifier).

    87-8

    9. Nommez le rôle QSLambdaBasicExecutionRole, puis cliquez sur le bouton Créer un rôle.

    88-9
  • 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.

    92-1
    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.
    93-2
    94

    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)
               }
    95-3

    4. Accédez à la section Variables d'environnement, puis cliquez sur Gérer les variables d'environnement.

    96-4

    5. Ajoutez les variables d'environnement suivantes.
    AwsAccountId
    RoleArn - QSER Role Arn enregistré dans votre Bloc-notes.
    Cliquez sur le bouton Enregistrer.

    97-5

    6. Accédez à Paramètres de base, puis cliquez sur le bouton Modifier.

    98-6

    7. Augmentez la valeur Expiration à 2 minutes, puis cliquez sur Enregistrer

    99-7
  • 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.

    103-1

    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.

    104
    105

    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)
                   }
    106

    4. Accédez à la section Variables d'environnement, puis cliquez sur Gérer les variables d'environnement.

    107

    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.

    108

    6. Accédez à Paramètres de base, puis cliquez sur le bouton Modifier.

    109

    7. Augmentez la valeur Expiration à 2 minutes, puis cliquez sur Enregistrer

    110

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.

Ce module vous a-t-il été utile ?

API Gateway et pages web statiques