Análisis integrado

con Amazon QuickSight

Módulo cuatro: funciones Lambda

En este módulo, configuraremos nuestra infraestructura informática para impulsar el portal web.

Introducción

En este módulo, configuraremos nuestra infraestructura informática para impulsar el portal web. Nosotros utilizando AWS Lambda, pero puede utilizar su infraestructura informática existente donde ya se esté ejecutando su aplicación o portal web.

Lo que aprenderá

  • Crear un rol de ejecución Lambda
  • Crear una función Lambda de URL integrada para integrar el panel: a fin de asumir el rol con permiso para ejecutar las API de QuickSight y generar la URL integrada del panel/sesión.
  • Crear una función lambda de URL integrada para integrar la sesión: a fin de asumir el rol con permiso para ejecutar las API de QuickSight y generar la URL integrada del panel/sesión.

 Tiempo de realización

20 minutos

 Servicios utilizados

Implementación

  • Crear un rol de ejecución Lambda

    A continuación se mencionan los pasos para crear un rol que se usará con la ejecución de Lambda.

    1. Lance IAM y seleccione Roles del panel izquierdo.

    79-1

    2. Haga clic en el botón Create role (Crear rol).

    80-2

    2. Haga clic en Lambda y en el botón Next: Permissions (Siguiente: permisos).

    81-2

    3. Haga clic en el botónCreate policy (Crear política). Abrirá una nueva pestaña con la opción de crear política.

    82-3

    4. Haga clic en la pestaña JSON, pegue la siguiente política y haga clic en el botón Review policy (Revisar política).

    {
        "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. Asigne a esta política el nombre QSInitialSetupTempPolicy y haga clic en el botón Create policy (Crear política).
    Usaremos este rol para ejecutar una función Lambda de configuración inicial y luego eliminaremos esta política temporal.

    84-5

    6. Vuelva a la pestaña create role (crear rol). Actualice la lista de políticas, busque QSInitialSetupTempPolicy y marque la casilla seleccionada.

    85-6

    7. Busque LambdaBasic, seleccione AWSLambdaBasicExecutionRole y haga clic en el botón Next: Tags (Siguiente: etiquetas).

    86-7

    8. Haga clic en Next: Review(Siguiente: revisión).

    87-8

    9. Asigne el nombre QSLambdaBasicExecutionRole al rol y haga clic en el botón Create role (Crear rol).

    88-9
  • Crear función Lambda de URL integrada (para integrar un panel)

    Omita este paso si intenta integrar una sesión.
    Ahora crearemos una función Lambda que genere la URL dinámica integrada.

    1. Lance Lambda y haga clic en el botón Create function (Crear función).

    92-1
    2. Realice las siguientes selecciones.
    Elija Author from scratch (Crear desde cero).
    Nombre de la función: QSGetEmbedUrl
    Tiempo de ejecución: Python 3.8
    Rol de ejecución: utilice un rol existente. Seleccione QSLambdaBasicExecutionRole del menú desplegable. Haga clic en Create function (Crear función).
    93-2
    94

    3. Copie el siguiente código Python en la función Lambda y haga clic en Save (Guardar).
     

    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. Desplácese hacia abajo hasta la sección Environment variables (Variables del entorno) y haga clic en Manage environment variables (Administrar variables del entorno).

    96-4

    5. Agregue las siguientes variables del entorno.
    AwsAccountId
    RoleArn: ARN del rol QSER guardado en el bloc de notas.
    Haga clic en el botón Save (Guardar).

    97-5

    6. Desplácese hacia abajo hasta Basic Settings (Configuración básica) y haga clic en el botón Edit (Editar).

    98-6

    7. Aumente el valor Timeout (Tiempo de espera) a 2 minutos y haga clic en el botón Save (Guardar)

    99-7
  • Crear función Lambda de URL integrada (para integrar una sesión)

    Omita esta sección si intenta integrar un panel.
    Ahora crearemos una función Lambda que genere la URL dinámica integrada.

    1. Lance Lambda y haga clic en el botón Create function (Crear función).

    103-1

    2. Realice las siguientes selecciones.
    Elija Author from scratch (Crear desde cero).
    Nombre de la función: QSGetEmbedUrl
    Tiempo de ejecución: Python 3.8
    Rol de ejecución: utilice un rol existente. Seleccione QSLambdaBasicExecutionRole del menú desplegable. Haga clic en Create function (Crear función).

    104
    105

    3. Copie el siguiente código Python en la función Lambda y haga clic en Save (Guardar).

    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. Desplácese hacia abajo hasta la sección Environment variables (Variables del entorno) y haga clic en Manage environment variables (Administrar variables del entorno).

    107

    5. Agregue las siguientes variables del entorno.
    AwsAccountId
    RoleArn: ARN del rol QSER guardado en el bloc de notas.
    QuickSightIdentityRegion: región donde se configuran las identidades QuickSight.
    Haga clic en el botón Save (Guardar).

    108

    6. Desplácese hacia abajo hasta Basic Settings (Configuración básica) y haga clic en el botón Edit (Editar).

    109

    7. Aumente el valor Timeout (Tiempo de espera) a 2 minutos y haga clic en el botón Save (Guardar)

    110

Conclusión

¡Completó correctamente el módulo cuatro! En el módulo cinco crearemos una API gateway y una página web estática.

¿Este módulo le resultó útil?

API gateway y páginas web estáticas