Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Descarregue dados de um cluster do Amazon Redshift entre contas para o Amazon S3 - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Descarregue dados de um cluster do Amazon Redshift entre contas para o Amazon S3

Criado por Andrew Kamel (AWS)

Resumo

Ao testar aplicativos, é útil ter dados de produção em seu ambiente de teste. O uso de dados de produção pode fornecer uma avaliação mais precisa do aplicativo que você está desenvolvendo.

Esse padrão extrai dados de um cluster do Amazon Redshift em um ambiente de produção para um bucket do Amazon Simple Storage Service (Amazon S3) em um ambiente de desenvolvimento no Amazon Web Services ().AWS

O padrão percorre a configuração das contas DEV e PROD, incluindo o seguinte:

  • Recursos necessários

  • AWS Identity and Access Management Funções (IAM)

  • Ajustes de rede em sub-redes, grupos de segurança e na nuvem privada virtual (VPC) para dar suporte à conexão do Amazon Redshift

  • Um exemplo de AWS Lambda função com um tempo de execução em Python para testar a arquitetura

Para conceder acesso ao cluster do Amazon Redshift, o padrão é usado AWS Secrets Manager para armazenar as credenciais relevantes. O benefício é ter todas as informações necessárias para se conectar diretamente ao cluster do Amazon Redshift sem precisar saber onde o cluster do Amazon Redshift reside. Além disso, você pode monitorar o uso do segredo.

O segredo salvo no Secrets Manager inclui o host, o nome do banco de dados, a porta e as credenciais relevantes do cluster Amazon Redshift.

Para obter informações sobre considerações de segurança ao usar esse padrão, consulte a seção Melhores práticas.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Dependendo da quantidade de dados que você deseja consultar, a função Lambda pode atingir o tempo limite.

    Se sua execução demorar mais do que o tempo limite máximo do Lambda (15 minutos), use uma abordagem assíncrona para seu código Lambda. O exemplo de código desse padrão usa a biblioteca psycopg2 para Python, que atualmente não oferece suporte ao processamento assíncrono.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para ver a disponibilidade da região, consulte Serviços da AWS por região. Para endpoints específicos, consulte a página de endpoints e cotas do serviço e escolha o link para o serviço.

Arquitetura

O diagrama a seguir mostra a arquitetura de destino, com contas DEV e PROD.

O Lambda VPC na conta DEV e o Amazon Redshift VPC na conta PROD.

O diagrama mostra o seguinte fluxo de trabalho:

  1. A função Lambda na conta DEV assume a função do IAM necessária para acessar as credenciais do Amazon Redshift no Secrets Manager na conta PROD.

    Em seguida, a função Lambda recupera o segredo do cluster Amazon Redshift.

  2. A função Lambda na conta DEV usa as informações para se conectar ao cluster Amazon Redshift na conta PROD por meio do peering. VPCs

    Em seguida, a função Lambda envia um comando de descarregamento para consultar o cluster do Amazon Redshift na conta PROD.

  3. O cluster Amazon Redshift na conta PROD assume a função relevante do IAM para acessar o bucket do S3 na conta DEV.

    O cluster Amazon Redshift descarrega os dados consultados no bucket do S3 na conta DEV.

Consultando dados do Amazon Redshift

O diagrama a seguir mostra as funções que são usadas para recuperar as credenciais do Amazon Redshift e conectar-se ao cluster do Amazon Redshift. O fluxo de trabalho é iniciado pela função Lambda.

O processo de três etapas para assumir funções em todas as contas.

O diagrama mostra o seguinte fluxo de trabalho:

  1. O CrossAccount-SM-Read-Role na conta DEV pressupõe o SM-Read-Role na conta PROD.

  2. A SM-Read-Role função usa a política anexada para recuperar o segredo do Secrets Manager.

  3. As credenciais são usadas para acessar o cluster do Amazon Redshift.

Carregando dados para o Amazon S3

O diagrama a seguir mostra o processo de leitura e gravação entre contas para extrair dados e enviá-los para o Amazon S3. O fluxo de trabalho é iniciado pela função Lambda. O padrão encadeia as funções do IAM no Amazon Redshift. O comando unload que vem do cluster do Amazon Redshift assume CrossAccount-S3-Write-Role o e, em seguida, assume o. S3-Write-Role Esse encadeamento de funções dá ao Amazon Redshift acesso ao Amazon S3.

As funções que obtêm credenciais, acessam o Amazon Redshift e carregam dados para o Amazon S3.

O fluxo de trabalho inclui as seguintes etapas:

  1. O CrossAccount-SM-Read-Role na conta DEV pressupõe o SM-Read-Role na conta PROD.

  2. Ele SM-Read-Role recupera as credenciais do Amazon Redshift do Secrets Manager.

  3. A função Lambda se conecta ao cluster Amazon Redshift e envia uma consulta.

  4. O cluster do Amazon Redshift pressupõe o. CrossAccount-S3-Write-Role

  5. Isso CrossAccount-S3-Write-Role pressupõe que S3-Write-Role na conta DEV.

  6. Os resultados da consulta são descarregados no bucket do S3 na conta DEV.

Ferramentas

Serviços da AWS

  • AWS Key Management Service (AWS KMS) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O Amazon Redshift é um serviço de data warehouse em escala de petabytes gerenciado na Nuvem AWS.

  • O AWS Secrets Manager ajuda a substituir credenciais codificadas, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo por programação.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

Repositório de código

O código desse padrão está disponível no repositório GitHub unload-redshift-to-s3-python.

Práticas recomendadas

Isenção de responsabilidade de segurança

Antes de implementar essa solução, considere as seguintes recomendações de segurança importantes:

  • Lembre-se de que conectar as contas de desenvolvimento e produção pode aumentar o escopo e reduzir a postura geral de segurança. Recomendamos implantar essa solução apenas temporariamente, extraindo a parte necessária dos dados e destruindo imediatamente os recursos implantados. Para destruir os recursos, você deve excluir a função Lambda, remover todas as funções e políticas do IAM criadas para essa solução e revogar qualquer acesso à rede concedido entre as contas.

  • Consulte suas equipes de segurança e conformidade antes de copiar quaisquer dados dos ambientes de produção para os de desenvolvimento. Informações de identificação pessoal (PII), informações de saúde protegidas (PHI) e outros dados confidenciais ou regulamentados geralmente não devem ser copiados dessa maneira. Copie somente informações não confidenciais disponíveis publicamente (por exemplo, dados de estoque público do front-end de uma loja). Considere tokenizar ou anonimizar dados, ou gerar dados de teste sintéticos, em vez de usar dados de produção sempre que possível. Um dos princípios de AWS segurança é manter as pessoas afastadas dos dados. Em outras palavras, os desenvolvedores não devem realizar operações na conta de produção.

  • Restrinja o acesso à função Lambda na conta de desenvolvimento porque ela pode ler dados do cluster Amazon Redshift no ambiente de produção.

  • Para evitar a interrupção do ambiente de produção, implemente as seguintes recomendações:

    • Use uma conta de desenvolvimento separada e dedicada para atividades de teste e desenvolvimento.

    • Implemente controles rígidos de acesso à rede e limite o tráfego entre contas somente ao necessário.

    • Monitore e audite o acesso ao ambiente de produção e às fontes de dados.

    • Implemente controles de acesso com privilégios mínimos para todos os recursos e serviços envolvidos.

    • Revise e alterne regularmente as credenciais, como AWS Secrets Manager segredos e chaves de acesso à função do IAM.

  • Consulte a documentação de segurança a seguir para os serviços usados neste artigo:

A segurança é a principal prioridade ao acessar dados e recursos de produção. Sempre siga as melhores práticas, implemente controles de acesso com privilégios mínimos e revise e atualize regularmente suas medidas de segurança.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um segredo para o cluster Amazon Redshift.

Para criar o segredo para o cluster do Amazon Redshift, faça o seguinte:

  1. Na conta PROD, faça login no e abra o AWS Management Console console do Secrets Manager em https://console.aws.amazon.com/secretsmanager/.

  2. Escolha Armazenar um novo segredo.

  3. Selecione Credenciais para o armazém de dados do Amazon Redshift.

  4. Em Nome de usuário e Senha, insira valores para sua instância e confirme ou escolha um valor para a chave de criptografia.

  5. Escolha o armazém de dados do Amazon Redshift que seu segredo acessará.

  6. Digite Redshift-Creds-Secret o nome secreto.

  7. Conclua as etapas restantes da criação com as opções padrão e escolha Armazenar.

  8. Visualize seu segredo e anote o valor do ARN secreto que foi gerado para identificar o segredo.

DevOps engenheiro

Crie uma função para acessar o Secrets Manager.

Para criar a função, faça o seguinte:

  1. Na conta PROD, abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. Selecione Políticas.

  3. Escolha Criar política.

  4. Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "<Redshift-Creds-Secret-ARN>" ] }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

    Redshift-Creds-Secret-ARNSubstitua pelo Amazon Resource Name (ARN) do segredo do Secrets Manager que contém as informações e as credenciais do cluster Amazon Redshift.

DevOps engenheiro

Consulte dados do Amazon Redshift

TarefaDescriçãoHabilidades necessárias

Crie um segredo para o cluster Amazon Redshift.

Para criar o segredo para o cluster do Amazon Redshift, faça o seguinte:

  1. Na conta PROD, faça login no e abra o AWS Management Console console do Secrets Manager em https://console.aws.amazon.com/secretsmanager/.

  2. Escolha Armazenar um novo segredo.

  3. Selecione Credenciais para o armazém de dados do Amazon Redshift.

  4. Em Nome de usuário e Senha, insira valores para sua instância e confirme ou escolha um valor para a chave de criptografia.

  5. Escolha o armazém de dados do Amazon Redshift que seu segredo acessará.

  6. Digite Redshift-Creds-Secret o nome secreto.

  7. Conclua as etapas restantes da criação com as opções padrão e escolha Armazenar.

  8. Visualize seu segredo e anote o valor do ARN secreto que foi gerado para identificar o segredo.

DevOps engenheiro

Crie uma função para acessar o Secrets Manager.

Para criar a função, faça o seguinte:

  1. Na conta PROD, abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. Selecione Políticas.

  3. Escolha Criar política.

  4. Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "<Redshift-Creds-Secret-ARN>" ] }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

    Redshift-Creds-Secret-ARNSubstitua pelo Amazon Resource Name (ARN) do segredo do Secrets Manager que contém as informações e as credenciais do cluster Amazon Redshift.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Crie uma função para acessar o bucket do S3.

Para criar a função para acessar o bucket do S3, faça o seguinte:

  1. Na conta DEV, abra o console do IAM.

  2.  Selecione Políticas.

  3. Escolha Criar política.

  4.  Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "kmsstmt", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": [ "<kms-key-arn>" ] }, { "Sid": "s3stmt", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*" ] } ] }

    mybucketSubstitua pelo nome do bucket do S3 que você deseja acessar. Além disso, se o bucket do S3 estiver criptografado, kms-key-arn substitua-o pelo ARN da chave AWS KMS() usada para criptografar AWS Key Management Service o bucket do S3. Caso contrário, você não precisará da AWS KMS seção na política.

  5. Escolha Revisar política, insira S3-Write-Policy como nome da política e escolha Criar política.

  6. No painel de navegação, selecione Perfis.

  7.  Selecione Create role.

  8. Para a função de entidade confiável, escolha Política de confiança personalizada.

  9. Escolha Avançar: Permissões e, em seguida, selecione a política S3-Write-Policy que você criou.

  10. Insira S3-Write-Role como nome da função e, em seguida, escolha Criar função.

DevOps engenheiro

Crie a função do Amazon Redshift.

Para criar a função do Amazon Redshift, faça o seguinte:

  1. Na conta PROD, abra o console do IAM.

  2. Selecione Políticas.

  3. Escolha Criar política.

  4. Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "S3-Write-Role-ARN" } ] }

    S3-Write-Role-ARNSubstitua pelo ARN da conta S3-Write-Role DEV.

  5. Escolha Revisar política, insira S3-Write-Role-Assume-Policy como nome da política e escolha Criar política.

  6. No painel de navegação, escolha Perfis e Criar perfil.

  7. Escolha o serviço da AWS como seu tipo de entidade confiável e, em seguida, escolha Redshift, Redshift - Personalizável.

  8. Escolha Avançar: Permissões e, em seguida, selecione a política S3-Write-Role-Assume-Policy que você criou.

  9. Insira CrossAccount-S3-Write-Role como nome da função e, em seguida, escolha Criar função.

  10. Associe a função do IAM ao seu cluster do Amazon Redshift.

DevOps engenheiro

Carregar dados no Amazon S3

TarefaDescriçãoHabilidades necessárias

Crie uma função para acessar o bucket do S3.

Para criar a função para acessar o bucket do S3, faça o seguinte:

  1. Na conta DEV, abra o console do IAM.

  2.  Selecione Políticas.

  3. Escolha Criar política.

  4.  Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "kmsstmt", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": [ "<kms-key-arn>" ] }, { "Sid": "s3stmt", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::mybucket", "arn:aws:s3:::mybucket/*" ] } ] }

    mybucketSubstitua pelo nome do bucket do S3 que você deseja acessar. Além disso, se o bucket do S3 estiver criptografado, kms-key-arn substitua-o pelo ARN da chave AWS KMS() usada para criptografar AWS Key Management Service o bucket do S3. Caso contrário, você não precisará da AWS KMS seção na política.

  5. Escolha Revisar política, insira S3-Write-Policy como nome da política e escolha Criar política.

  6. No painel de navegação, selecione Perfis.

  7.  Selecione Create role.

  8. Para a função de entidade confiável, escolha Política de confiança personalizada.

  9. Escolha Avançar: Permissões e, em seguida, selecione a política S3-Write-Policy que você criou.

  10. Insira S3-Write-Role como nome da função e, em seguida, escolha Criar função.

DevOps engenheiro

Crie a função do Amazon Redshift.

Para criar a função do Amazon Redshift, faça o seguinte:

  1. Na conta PROD, abra o console do IAM.

  2. Selecione Políticas.

  3. Escolha Criar política.

  4. Escolha a guia JSON e, em seguida, insira uma política do IAM, como a seguinte:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "S3-Write-Role-ARN" } ] }

    S3-Write-Role-ARNSubstitua pelo ARN da conta S3-Write-Role DEV.

  5. Escolha Revisar política, insira S3-Write-Role-Assume-Policy como nome da política e escolha Criar política.

  6. No painel de navegação, escolha Perfis e Criar perfil.

  7. Escolha o serviço da AWS como seu tipo de entidade confiável e, em seguida, escolha Redshift, Redshift - Personalizável.

  8. Escolha Avançar: Permissões e, em seguida, selecione a política S3-Write-Role-Assume-Policy que você criou.

  9. Insira CrossAccount-S3-Write-Role como nome da função e, em seguida, escolha Criar função.

  10. Associe a função do IAM ao seu cluster do Amazon Redshift.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Implante a função do Lambda.

Para implantar uma função Lambda na VPC emparelhada, faça o seguinte:

  1. Abra o console Lambda em. https://console.aws.amazon.com/lambda/

  2. Selecione Funções.

  3. Escolha a opção Criar função.

  4. Em Basic information (Informações básicas), para Function name (Nome da função), insira um nome para a função.

  5. Em Runtime, escolha Python 3.8.

  6. Expanda Alterar função de execução padrão e faça o seguinte:

    1. Escolha Usar um perfil existente.

    2. Em Função existente, selecione a função Lambda CrossAccount-RM-Read-Role que você criou anteriormente.

  7. Expanda Configurações avançadas e faça o seguinte:

    1. Marque a caixa de seleção Ativar VPC.

    2. Para VPC, selecione a VPC emparelhada na conta DEV.

    3. Em Sub-redes, selecione a sub-rede privada.

    4. Em Security groups (Grupos de segurança), selecione o grupo de segurança padrão.

  8. Escolha a opção Criar função.

  9. Adicione a biblioteca psycopg2 como uma camada à função Lambda.

    nota

    Você pode usar uma camada já implantada do repositório psycopg2-lambda-layer. Certifique-se de usar o URL com base no seu tempo de execução Região da AWS e no Python.

DevOps engenheiro

Implantar a função do Lambda

TarefaDescriçãoHabilidades necessárias

Implante a função do Lambda.

Para implantar uma função Lambda na VPC emparelhada, faça o seguinte:

  1. Abra o console Lambda em. https://console.aws.amazon.com/lambda/

  2. Selecione Funções.

  3. Escolha a opção Criar função.

  4. Em Basic information (Informações básicas), para Function name (Nome da função), insira um nome para a função.

  5. Em Runtime, escolha Python 3.8.

  6. Expanda Alterar função de execução padrão e faça o seguinte:

    1. Escolha Usar um perfil existente.

    2. Em Função existente, selecione a função Lambda CrossAccount-RM-Read-Role que você criou anteriormente.

  7. Expanda Configurações avançadas e faça o seguinte:

    1. Marque a caixa de seleção Ativar VPC.

    2. Para VPC, selecione a VPC emparelhada na conta DEV.

    3. Em Sub-redes, selecione a sub-rede privada.

    4. Em Security groups (Grupos de segurança), selecione o grupo de segurança padrão.

  8. Escolha a opção Criar função.

  9. Adicione a biblioteca psycopg2 como uma camada à função Lambda.

    nota

    Você pode usar uma camada já implantada do repositório psycopg2-lambda-layer. Certifique-se de usar o URL com base no seu tempo de execução Região da AWS e no Python.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Importe os recursos necessários.

Para importar os recursos necessários, execute os seguintes comandos:

import ast import boto3 import psycopg2 import base64 from botocore.exceptions import ClientError
Desenvolvedor de aplicativos

Execute a função de manipulador do Lambda.

A função Lambda usa AWS Security Token Service (AWS STS) para acesso entre contas e gerenciamento temporário de credenciais. A função usa a operação AssumeRole da API para assumir temporariamente as permissões da função sm_read_role do IAM.

Para executar a função Lambda, use o código de exemplo a seguir:

def lambda_handler(event, context): sts_client = boto3.client('sts') # Secrets Manager Configurations secret_name = "redshift_creds" sm_region = "eu-west-1" sm_read_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/SM-Read-Role" # S3 Bucket Configurations s3_bucket_path = "s3://mybucket/" s3_bucket_region = "eu-west-1" s3_write_role = "arn:aws:iam::DEV_ACCOUNT_NUMBER:role/S3-Write-Role" # Redshift Configurations sql_query = "select * from category" redshift_db = "dev" redshift_s3_write_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/CrossAccount-S3-Write-Role" chained_s3_write_role = "%s,%s" % (redshift_s3_write_role, s3_write_role) assumed_role_object = sts_client.assume_role( RoleArn=sm_read_role, RoleSessionName="CrossAccountRoleAssumption", ExternalId="YOUR_EXTERNAL_ID", ) credentials = assumed_role_object['Credentials'] secret_dict = ast.literal_eval(get_secret(credentials, secret_name, sm_region)) execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db) return { 'statusCode': 200 }
Desenvolvedor de aplicativos

Descubra o segredo.

Para obter o segredo do Amazon Redshift, use o seguinte código de exemplo:

def get_secret(credentials, secret_name, sm_region): # Create a Secrets Manager client session = boto3.session.Session() sm_client = session.client( service_name='secretsmanager', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], region_name=sm_region ) try: get_secret_value_response = sm_client.get_secret_value( SecretId=secret_name ) except ClientError as e: print(e) raise e else: if 'SecretString' in get_secret_value_response: return get_secret_value_response['SecretString'] else: return base64.b64decode(get_secret_value_response['SecretBinary'])
Desenvolvedor de aplicativos

Execute o comando de descarga.

Para descarregar os dados no bucket do S3, use o código de exemplo a seguir.

def execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db): conn_string = "dbname='%s' port='%s' user='%s' password='%s' host='%s'" \ % (redshift_db, secret_dict["port"], secret_dict["username"], secret_dict["password"], secret_dict["host"]) con = psycopg2.connect(conn_string) unload_command = "UNLOAD ('{}') TO '{}' IAM_ROLE '{}' DELIMITER '|' REGION '{}';" \ .format(sql_query, s3_bucket_path + str(datetime.datetime.now()) + ".csv", chained_s3_write_role, s3_bucket_region) # Opening a cursor and run query cur = con.cursor() cur.execute(unload_command) print(cur.fetchone()) cur.close() con.close()
Desenvolvedor de aplicativos

Teste a arquitetura

TarefaDescriçãoHabilidades necessárias

Importe os recursos necessários.

Para importar os recursos necessários, execute os seguintes comandos:

import ast import boto3 import psycopg2 import base64 from botocore.exceptions import ClientError
Desenvolvedor de aplicativos

Execute a função de manipulador do Lambda.

A função Lambda usa AWS Security Token Service (AWS STS) para acesso entre contas e gerenciamento temporário de credenciais. A função usa a operação AssumeRole da API para assumir temporariamente as permissões da função sm_read_role do IAM.

Para executar a função Lambda, use o código de exemplo a seguir:

def lambda_handler(event, context): sts_client = boto3.client('sts') # Secrets Manager Configurations secret_name = "redshift_creds" sm_region = "eu-west-1" sm_read_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/SM-Read-Role" # S3 Bucket Configurations s3_bucket_path = "s3://mybucket/" s3_bucket_region = "eu-west-1" s3_write_role = "arn:aws:iam::DEV_ACCOUNT_NUMBER:role/S3-Write-Role" # Redshift Configurations sql_query = "select * from category" redshift_db = "dev" redshift_s3_write_role = "arn:aws:iam::PROD_ACCOUNT_NUMBER:role/CrossAccount-S3-Write-Role" chained_s3_write_role = "%s,%s" % (redshift_s3_write_role, s3_write_role) assumed_role_object = sts_client.assume_role( RoleArn=sm_read_role, RoleSessionName="CrossAccountRoleAssumption", ExternalId="YOUR_EXTERNAL_ID", ) credentials = assumed_role_object['Credentials'] secret_dict = ast.literal_eval(get_secret(credentials, secret_name, sm_region)) execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db) return { 'statusCode': 200 }
Desenvolvedor de aplicativos

Descubra o segredo.

Para obter o segredo do Amazon Redshift, use o seguinte código de exemplo:

def get_secret(credentials, secret_name, sm_region): # Create a Secrets Manager client session = boto3.session.Session() sm_client = session.client( service_name='secretsmanager', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], region_name=sm_region ) try: get_secret_value_response = sm_client.get_secret_value( SecretId=secret_name ) except ClientError as e: print(e) raise e else: if 'SecretString' in get_secret_value_response: return get_secret_value_response['SecretString'] else: return base64.b64decode(get_secret_value_response['SecretBinary'])
Desenvolvedor de aplicativos

Execute o comando de descarga.

Para descarregar os dados no bucket do S3, use o código de exemplo a seguir.

def execute_query(secret_dict, sql_query, s3_bucket_path, chained_s3_write_role, s3_bucket_region, redshift_db): conn_string = "dbname='%s' port='%s' user='%s' password='%s' host='%s'" \ % (redshift_db, secret_dict["port"], secret_dict["username"], secret_dict["password"], secret_dict["host"]) con = psycopg2.connect(conn_string) unload_command = "UNLOAD ('{}') TO '{}' IAM_ROLE '{}' DELIMITER '|' REGION '{}';" \ .format(sql_query, s3_bucket_path + str(datetime.datetime.now()) + ".csv", chained_s3_write_role, s3_bucket_region) # Opening a cursor and run query cur = con.cursor() cur.execute(unload_command) print(cur.fetchone()) cur.close() con.close()
Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Exclua a função do Lambda.

Para evitar custos não planejados, remova os recursos e a conexão entre as contas DEV e PROD.

Para remover a função Lambda, faça o seguinte:

  1. Abra o AWS Lambda console em https://console.aws.amazon.com/lambda/.

  2. Localize e selecione a função Lambda que você criou.

  3. Escolha Ações e, em seguida, escolha Excluir.

  4. Confirme a exclusão.

DevOps engenheiro

Remova as funções e políticas do IAM.

Remova as funções e políticas do IAM das contas DEV e PROD.

Na conta DEV, faça o seguinte:

  1. Abra o console do IAM.

  2. Exclua as seguintes funções:

    • S3-Write-Role

    • CrossAccount-RM-Read-Role(Função Lambda)

  3. Exclua as políticas associadas:

    • S3-Write-Policy

    • A CrossAccount política para assumir funções na conta PROD

Na conta PROD, faça o seguinte:

  1. Abra o console do IAM.

  2. Exclua as seguintes funções:

    • SM-Read-Role

    • CrossAccount-S3-Write-Role

  3. Exclua as políticas associadas:

    • A CrossAccount política para acessar o Secrets Manager

    • S3-Write-Role-Assume-Policy

DevOps engenheiro

Exclua o segredo no Secrets Manager.

Para excluir o segredo, faça o seguinte:

  1. Na conta PROD, abra o console do Secrets Manager.

  2. Localize e selecione o segredo chamadoRedshift-Creds-Secret.

  3. Escolha Actions (Ações) e selecione Delete secret (Excluir segredo).

  4. Confirme a exclusão.

DevOps engenheiro

Remova as regras de emparelhamento de VPC e de grupos de segurança.

Para remover as regras de emparelhamento de VPC e de grupos de segurança, faça o seguinte:

  1. Na conta PROD, abra o EC2 console da Amazon em https://console.aws.amazon.com/ec2/.

  2. Navegue até Grupos de segurança.

  3. Encontre o grupo de segurança usado pelo cluster do Amazon Redshift.

  4. Edite as regras de entrada e remova a regra que permite conexões da Lambda VPC da conta DEV.

  5. Navegue até Conexões de emparelhamento de VPC e exclua a conexão de emparelhamento.

DevOps engenheiro

Remova os dados do bucket do S3.

Para remover os dados do Amazon S3, faça o seguinte:

  1. Na conta DEV, abra o console do Amazon S3 em. https://console.aws.amazon.com/s3/

  2. Localize o bucket que você usou para armazenamento de dados.

  3. Exclua os objetos dentro do bucket ou exclua o bucket inteiro se não for mais necessário.

DevOps engenheiro

Limpe AWS KMS as chaves.

Se você criou alguma AWS KMS chave personalizada para criptografia, faça o seguinte:

  1. Abra o AWS KMS console em https://console.aws.amazon.com/kms/.

  2. Localize todas as chaves criadas para esse padrão.

  3. Agende a exclusão das chaves. (Há um período de espera obrigatório para a exclusão da chave).

DevOps engenheiro

Revise e exclua CloudWatch os registros da Amazon.

Para excluir os CloudWatch registros, faça o seguinte:

  1. Abra o CloudWatch console em https://console.aws.amazon.com/cloudwatch/.

  2. Verifique se há grupos de log criados pela sua função Lambda ou pelo cluster do Amazon Redshift.

  3. Exclua esses grupos de registros se eles não forem mais necessários.

DevOps engenheiro

Limpeza

TarefaDescriçãoHabilidades necessárias

Exclua a função do Lambda.

Para evitar custos não planejados, remova os recursos e a conexão entre as contas DEV e PROD.

Para remover a função Lambda, faça o seguinte:

  1. Abra o AWS Lambda console em https://console.aws.amazon.com/lambda/.

  2. Localize e selecione a função Lambda que você criou.

  3. Escolha Ações e, em seguida, escolha Excluir.

  4. Confirme a exclusão.

DevOps engenheiro

Remova as funções e políticas do IAM.

Remova as funções e políticas do IAM das contas DEV e PROD.

Na conta DEV, faça o seguinte:

  1. Abra o console do IAM.

  2. Exclua as seguintes funções:

    • S3-Write-Role

    • CrossAccount-RM-Read-Role(Função Lambda)

  3. Exclua as políticas associadas:

    • S3-Write-Policy

    • A CrossAccount política para assumir funções na conta PROD

Na conta PROD, faça o seguinte:

  1. Abra o console do IAM.

  2. Exclua as seguintes funções:

    • SM-Read-Role

    • CrossAccount-S3-Write-Role

  3. Exclua as políticas associadas:

    • A CrossAccount política para acessar o Secrets Manager

    • S3-Write-Role-Assume-Policy

DevOps engenheiro

Exclua o segredo no Secrets Manager.

Para excluir o segredo, faça o seguinte:

  1. Na conta PROD, abra o console do Secrets Manager.

  2. Localize e selecione o segredo chamadoRedshift-Creds-Secret.

  3. Escolha Actions (Ações) e selecione Delete secret (Excluir segredo).

  4. Confirme a exclusão.

DevOps engenheiro

Remova as regras de emparelhamento de VPC e de grupos de segurança.

Para remover as regras de emparelhamento de VPC e de grupos de segurança, faça o seguinte:

  1. Na conta PROD, abra o EC2 console da Amazon em https://console.aws.amazon.com/ec2/.

  2. Navegue até Grupos de segurança.

  3. Encontre o grupo de segurança usado pelo cluster do Amazon Redshift.

  4. Edite as regras de entrada e remova a regra que permite conexões da Lambda VPC da conta DEV.

  5. Navegue até Conexões de emparelhamento de VPC e exclua a conexão de emparelhamento.

DevOps engenheiro

Remova os dados do bucket do S3.

Para remover os dados do Amazon S3, faça o seguinte:

  1. Na conta DEV, abra o console do Amazon S3 em. https://console.aws.amazon.com/s3/

  2. Localize o bucket que você usou para armazenamento de dados.

  3. Exclua os objetos dentro do bucket ou exclua o bucket inteiro se não for mais necessário.

DevOps engenheiro

Limpe AWS KMS as chaves.

Se você criou alguma AWS KMS chave personalizada para criptografia, faça o seguinte:

  1. Abra o AWS KMS console em https://console.aws.amazon.com/kms/.

  2. Localize todas as chaves criadas para esse padrão.

  3. Agende a exclusão das chaves. (Há um período de espera obrigatório para a exclusão da chave).

DevOps engenheiro

Revise e exclua CloudWatch os registros da Amazon.

Para excluir os CloudWatch registros, faça o seguinte:

  1. Abra o CloudWatch console em https://console.aws.amazon.com/cloudwatch/.

  2. Verifique se há grupos de log criados pela sua função Lambda ou pelo cluster do Amazon Redshift.

  3. Exclua esses grupos de registros se eles não forem mais necessários.

DevOps engenheiro

Recursos relacionados

Mais informações

Depois de descarregar os dados do Amazon Redshift para o Amazon S3, você pode analisá-los usando o Amazon Athena.

O Amazon Athena é um serviço de consulta de big data que é benéfico quando você precisa acessar grandes volumes de dados. Você pode usar o Athena sem precisar provisionar servidores ou bancos de dados. O Athena oferece suporte a consultas complexas e você pode executá-lo em objetos diferentes.

Como acontece com a maioria Serviços da AWS, o principal benefício de usar o Athena é que ele oferece grande flexibilidade na forma como você executa consultas sem a complexidade adicional. Ao usar o Athena, você pode consultar diferentes tipos de dados, como CSV e JSON, no Amazon S3 sem alterar o tipo de dados. Você pode consultar dados de várias fontes, inclusive externas AWS. O Athena reduz a complexidade porque você não precisa gerenciar servidores. O Athena lê dados diretamente do Amazon S3 sem carregar ou alterar os dados antes de você executar a consulta.

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.