Strumenti di analisi integrati

con Amazon QuickSight

Modulo 4: Funzioni Lambda

In questo modulo configureremo la nostra infrastruttura completa per potenziare il portale Web.

Introduzione

In questo modulo configureremo la nostra infrastruttura completa per potenziare il portale Web. Stiamo utilizzando AWS Lambda, tuttavia, puoi utilizzare la tua infrastruttura di calcolo esistente in cui è già in esecuzione il tuo portale o la tua applicazione Web.

Avrai modo di approfondire i seguenti aspetti

  • Creazione del ruolo di esecuzione Lambda
  • Creazione di Embed URL Lambda per l'integrazione del pannello di controllo - Per assumere il ruolo autorizzato a eseguire API QuickSight e a generare URL di integrazione del pannello di controllo/della sessione.
  • Creazione di Embed URL Lambda per l'integrazione della sessione - Per assumere il ruolo autorizzato a eseguire API QuickSight e a generare URL di integrazione del pannello di controllo/della sessione.

 Tempo richiesto per il completamento

20 minuti

 Servizi utilizzati

Implementazione

  • Creazione del ruolo di esecuzione Lambda

    I passaggi per creare un ruolo che verrà utilizzato per l'esecuzione Lambda sono riportati di seguito

    1. Avvia IAM e seleziona Ruoli dal pannello a sinistra.

    79-1

    2. Fai clic sul pulsante Crea ruolo.

    80-2

    2. Fai clic sul pulsante Lambda e Successivo: autorizzazioni.

    81-2

    3. Fai clic sul pulsante Crea policy. Si aprirà una nuova scheda con l'opzione per la creazione di policy.

    82-3

    4. Fai clic sulla scheda JSON, incolla la seguente policy e fai clic sul pulsante Verifica policy.

    {
        "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. Denomina la policy QSInitialSetupTempPolicy e fai clic sul pulsante Crea policy.
    Utilizzeremo questo ruolo per eseguire una funzione Initial Setup Lambda e rimuoveremo questa policy temporanea.

    84-5

    6. Torna alla scheda Crea ruolo. Aggiorna l'elenco delle policy, cerca QSInitialSetupTempPolicy e spunta la casella di selezione.

    85-6

    7. Cerca LambdaBasic, seleziona AWSLambdaBasicExecutionRole e fai clic sul pulsante Successivo: tag.

    86-7

    8. Fai clic su Successivo: esamina.

    87-8

    9. Denomina il ruolo QSLambdaBasicExecutionRole e fai clic sul pulsante Crea ruolo.

    88-9
  • Creazione di Embed Url Lambda (per l'integrazione del pannello di controllo)

    Ignora questo passaggio se stai provando l'integrazione nella sessione.
    Ora creeremo una funzione Lambda che genera l'URL di integrazione dinamica.

    1. Avvia Lambda e fai clic sul pulsante Crea funzione.

    92-1
    2. Effettua le seguenti selezioni.
    Seleziona Crea da zero
    Nome funzione: QSGetEmbedUrl
    Runtime: Python 3.8
    Ruolo di esecuzione: Utilizza un ruolo esistente Seleziona QSLambdaBasicExecutionRole dall'elenco a discesa. Fai clic su Crea funzione
    93-2
    94

    3. Copia il seguente codice Python nella funzione Lambda e fai clic su Salva.
     

    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. Scorri verso il basso fino alla sezione Variabili di ambiente e fai clic su Gestisci variabili di ambiente.

    96-4

    5. Aggiungi le seguenti variabili di ambiente.
    AwsAccountId
    RoleArn - ARN ruolo QSER salvato nel blocco note.
    Fai clic sul pulsante Salva.

    97-5

    6. Scorri verso il basso fino a Impostazioni di base e fai clic sul pulsante Modifica.

    98-6

    7. Aumenta il valore Timeout a 2 minuti e fai clic sul pulsante Salva

    99-7
  • Creazione di Embed Url Lambda (per l'integrazione della sessione)

    Passa alla sezione successiva se stai provando l'integrazione del pannello di controllo.
    Ora creeremo una funzione Lambda che genera l'URL di integrazione dinamica.

    1. Avvia Lambda e fai clic sul pulsante Crea funzione.

    103-1

    2. Effettua le seguenti selezioni.
    Seleziona Crea da zero
    Nome funzione: QSGetEmbedUrl
    Runtime: Python 3.8
    Ruolo di esecuzione: Utilizza un ruolo esistente Seleziona QSLambdaBasicExecutionRole dall'elenco a discesa. Fai clic su crea funzione

    104
    105

    3. Copia il seguente codice Python nella funzione Lambda e fai clic su Salva.

    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. Scorri verso il basso fino alla sezione Variabili di ambiente e fai clic su Gestisci variabili di ambiente.

    107

    5. Aggiungi le seguenti variabili di ambiente.
    AwsAccountId
    RoleArn - ARN ruolo QSER salvato nel blocco note.
    QuickSightIdentityRegion - Regione in cui sono configurate le identità QuickSight.
    Fai clic sul pulsante Salva.

    108

    6. Scorri verso il basso fino a Impostazioni di base e fai clic sul pulsante Modifica.

    109

    7. Aumenta il valore Timeout a 2 minuti e fai clic sul pulsante Salva

    110

Conclusione

Hai completato correttamente il Modulo 4. Successivamente creeremo un gateway API e una pagina Web statica nel modulo 5.

Questo modulo è stato utile?

Gateway API e pagine Web statiche