Análises de dados incorporadas

com o Amazon QuickSight

Módulo quatro: Funções do Lambda

Neste módulo, vamos configurar a infraestrutura de computação para provisionar o portal da Web.

Introdução

Neste módulo, vamos configurar a infraestrutura de computação para provisionar o portal da Web. Nós usamos o AWS Lambda, mas você pode usar a infraestrutura de computação existente onde seu portal da Web ou sua aplicação já está sendo executada.

O que você aprenderá

  • Criar uma função de execução do Lambda
  • Criar URL de incorporação do Lambda para incorporar painel: desempenhar uma função que tenha permissão para executar APIs do QuickSight e gerar URL de incorporação de painel/sessão.
  • Criar URL de incorporação do Lambda para incorporar sessão: desempenhar uma função que tenha permissão para executar APIs do QuickSight e gerar URL de incorporação de painel/sessão.

 Tempo para a conclusão

20 minutos

 Serviços usados

Implementação

  • Criar uma função de execução do Lambda

    Veja a seguir as etapas para criar uma função que será usada na execução do Lambda

    1. Inicie o IAM e escolha Roles (Funções) no painel esquerdo.

    79-1

    2. Clique no botão Create role (Criar função).

    80-2

    2. Clique em Lambda e no botão Next: Permissions (Próximo: Permissões).

    81-2

    3. Clique no botão Create Policy (Criar política). Uma nova guia será aberta com a opção de criação de política.

    82-3

    4. Clique na guia JSON, cole a seguinte política e clique no botão 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. Digite QSInitialSetupTempPolicy como o nome da política e clique no botão Create policy (Criar política).
    Usaremos essa função para executar uma função do Lambda de configuração inicial e depois removeremos essa política temporária.

    84-5

    6. Volte para a guia Create role (Criar função). Atualize a lista de políticas, procure QSInitialSetupTempPolicy e marque a caixa de seleção.

    85-6

    7. Procure LambdaBasic, selecione AWSLambdaBasicExecutionRole e clique no botão Next: Tags (Próximo: Tags).

    86-7

    8. Clique em Next: Review (Próximo: Revisar).

    87-8

    9. Digite QSLambdaBasicExecutionRole como o nome da função e clique no botão Create role (Criar função).

    88-9
  • Criar URL de incorporação do Lambda (para incorporar painel)

    Pule esta etapa se você estiver incorporando uma sessão.
    Agora vamos criar uma função do Lambda que gera o URL de incorporação dinâmico.

    1. Inicie o Lambda e clique no botão Create function (Criar função).

    92-1
    2. Faça as seleções a seguir.
    Escolha Author from scratch (Criar do zero)
    Function Name (Nome da função): QSGetEmbedUrl
    Runtime (Tempo de execução): Python 3.8
    Execution role (Função de execução): Use an existing role (Usar uma função existente). Selecione QSLambdaBasicExecutionRole no menu suspenso. Clique em Create function (Criar função)
    93-2
    94

    3. Copie o seguinte código python na função do Lambda e clique em Save (Salvar).
     

    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. Role para baixo até a seção Environment variables (Variáveis de ambiente) e clique em Manage environment variables (Gerenciar variáveis de ambiente).

    96-4

    5. Adicione as variáveis de ambiente a seguir.
    AwsAccountId
    RoleArn: ARN da função QSER salva em seu bloco de notas.
    Clique no botão Save (Salvar).

    97-5

    6. Role para baixo até Basic Settings (Configurações básicas) e clique no botão Edit (Editar).

    98-6

    7. Aumente o valor de Timeout (Tempo limite) para 2 min e clique no botão Save (Salvar)

    99-7
  • Criar URL de incorporação do Lambda (para incorporar sessão)

    Avance para a próxima seção se você estiver incorporando um painel.
    Agora vamos criar uma função do Lambda que gera o URL de incorporação dinâmico.

    1. Inicie o Lambda e clique no botão Create function (Criar função).

    103-1

    2. Faça as seleções a seguir.
    Escolha Author from scratch (Criar do zero)
    Function Name (Nome da função): QSGetEmbedUrl
    Runtime (Tempo de execução): Python 3.8
    Execution role (Função de execução): Use an existing role (Usar uma função existente). Selecione QSLambdaBasicExecutionRole no menu suspenso. Clique em Create function (Criar função)

    104
    105

    3. Copie o seguinte código python na função do Lambda e clique em Save (Salvar).

    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. Role para baixo até a seção Environment variables (Variáveis de ambiente) e clique em Manage environment variables (Gerenciar variáveis de ambiente).

    107

    5. Adicione as variáveis de ambiente a seguir.
    AwsAccountId
    RoleArn: ARN da função QSER salva em seu bloco de notas.
    QuickSightIdentityRegion: região onde as identidades do QuickSight estão configuradas.
    Clique no botão Save (Salvar).

    108

    6. Role para baixo até Basic Settings (Configurações básicas) e clique no botão Edit (Editar).

    109

    7. Aumente o valor de Timeout (Tempo limite) para 2 min e clique no botão Save (Salvar)

    110

Conclusão

Você concluiu o módulo quatro com êxito! A seguir, vamos criar um gateway de API e uma página da Web estática no módulo cinco.

Este módulo foi útil?

Gateway de API e páginas da Web estáticas