Lance um CodeBuild projeto em várias contas da AWS usando Step Functions e uma função de proxy Lambda - 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á.

Lance um CodeBuild projeto em várias contas da AWS usando Step Functions e uma função de proxy Lambda

Criado por Richard Milner-Watts (AWS) e Amit Anjarlekar (AWS)

Repositório de códigos: Cross-Account Proxy CodeBuild

Ambiente: produção

Tecnologias: DevOps; Gestão e governança; Operações; Sem servidor

Serviços da AWS: AWS CodeBuild; AWS Lambda; AWS Step Functions; AWS X-Ray; AWS CloudFormation

Resumo

Esse padrão demonstra como iniciar de forma assíncrona um projeto da AWS CodeBuild em várias contas da AWS usando o AWS Step Functions e uma função de proxy do AWS Lambda. Você pode usar a máquina de estado Step Functions de amostra do padrão para testar o sucesso do seu CodeBuild projeto.

CodeBuild ajuda você a iniciar tarefas operacionais usando a AWS Command Line Interface (AWS CLI) a partir de um ambiente de tempo de execução totalmente gerenciado. Você pode alterar o comportamento do seu CodeBuild projeto em tempo de execução substituindo as variáveis de ambiente. Além disso, você pode usar CodeBuild para gerenciar fluxos de trabalho. Para obter mais informações, consulte Service Catalog Tools no site do AWS Workshop e agende trabalhos no Amazon RDS for PostgreSQL usando a AWS e a EventBridge Amazon no blog do banco de dados CodeBuild da AWS.

Pré-requisitos e limitações

Pré-requisitos

  • Duas contas ativas da AWS: uma conta de origem para invocar uma função de proxy Lambda com Step Functions e uma conta de destino para criar um CodeBuild projeto de amostra remoto

Limitações

  • Esse padrão não pode ser usado para copiar artefatos entre contas.

Arquitetura

O diagrama a seguir mostra a arquitetura que esse padrão cria.

Diagrama de arquitetura do lançamento de um CodeBuild projeto em várias contas da AWS

O diagrama mostra o seguinte fluxo de trabalho:

  1. A máquina de estado do Step Functions analisa o mapa de entrada fornecido e invoca a função de proxy do Lambda (codebuild-proxy-lambda) para cada conta, região e projeto que você definiu.

  2. A função de proxy Lambda usa o AWS Security Token Service (AWS STS) para assumir uma função de proxy do IAM (codebuild-proxy-role), que está associada a uma política do IAM (codebuild-proxy-policy) na conta de destino.

  3. Usando a função assumida, a função Lambda inicia o CodeBuild projeto e retorna o ID do CodeBuild trabalho. A máquina de estado do Step Functions faz um loop e pesquisa a CodeBuild tarefa até receber um status de sucesso ou falha.

A lógica da máquina de estados é mostrada na imagem a seguir.

Fluxo de trabalho da máquina de estado Step Functions

Pilha de tecnologia

  • AWS CloudFormation

  • CodeBuild

  • IAM

  • Lambda

  • Step Functions

  • X-Ray

Ferramentas

  • CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.

  • O AWS CloudFormation Designer fornece um editor JSON e YAML integrado que ajuda você a visualizar e editar CloudFormation modelos.

  • CodeBuildA AWS é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda você 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 AWS Step Functions é um serviço de orquestração com tecnologia sem servidor que permite combinar funções do AWS Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios.

  • O AWS X-Ray ajuda a coletar dados sobre solicitações que seu aplicativo atende e fornece ferramentas que você pode usar para visualizar, filtrar e obter informações sobre esses dados para identificar problemas e oportunidades de otimização.

Código

O código de amostra desse padrão está disponível no repositório GitHub Cross Account CodeBuild Proxy. Esse padrão usa a biblioteca AWS Lambda Powertools for Python para fornecer funcionalidade de registro e rastreamento. Para obter mais informações sobre essa biblioteca e seus utilitários, consulte Powertools para AWS Lambda (Python).

Práticas recomendadas

  1. Ajuste os valores do tempo de espera na máquina de estado da Step Function para minimizar as solicitações de pesquisa sobre o status do trabalho. Use o tempo de execução esperado para o CodeBuild projeto.

  2. Ajuste a MaxConcurrency propriedade do mapa em Step Functions para controlar quantos CodeBuild projetos podem ser executados paralelamente.

  3. Se necessário, revise o código de amostra para verificar se a produção está pronta. Considere quais dados podem ser registrados pela solução e se a CloudWatch criptografia padrão da Amazon é suficiente.

Épicos

TarefaDescriçãoHabilidades necessárias

Registre as IDs da conta da AWS.

As IDs de conta da AWS são necessárias para configurar o acesso entre contas.

Registre a ID da conta da AWS para suas contas de origem e destino. Para obter mais informações, consulte Como encontrar a ID da conta da AWS na documentação do IAM.

AWS DevOps

Baixe os CloudFormation modelos da AWS.

  1. Faça o download do CloudFormation modelo da sample_target_codebuild_template.yaml AWS do GitHub repositório para esse padrão.

  2. Faça o download do CloudFormation modelo da codebuild_lambda_proxy_template.yaml AWS do GitHub repositório para esse padrão.

Nota: Nos CloudFormation modelos da AWS, <SourceAccountId> é o ID da conta da AWS para a conta de origem e <TargetAccountId> é o ID da conta da AWS para a conta de destino.

AWS DevOps

Crie e implante a CloudFormation pilha da AWS.

  1. Faça login no Console de Gerenciamento da AWS para obter sua conta de origem, abra o CloudFormation console da AWS e escolha Stacks.

  2. Selecione Create stack (Criar pilha) e With new resources (standard) (Com novos recursos, padrão).

  3. Para Template source (Origem do template), escolha Upload a template file (Fazer upload de um arquivo de template).

  4. Em Carregar um arquivo de modelo, escolha arquivo e, em seguida, escolha o arquivo codebuild_lambda_proxy_template.yaml baixado. Escolha Próximo.

  5. Em Nome da pilha, insira um nome para a pilha (por exemplo, codebuild-lambda-proxy).

  6. Substitua o parâmetro crossAccountTargetRoleArn por seu <TargetAccountId> (por exemplo, <arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role>). Observação: você não precisa atualizar o valor padrão do parâmetro targetCodeBuildProject.

  7. Escolha Avançar, aceite as opções padrão de criação de pilha e escolha Avançar.

  8. Escolha a caixa de seleção Eu reconheço que a AWS CloudFormation pode criar recursos do IAM com nomes personalizados e, em seguida, escolha Criar pilha.

Observação: você deve criar a CloudFormation pilha da AWS para a função proxy Lambda antes de criar qualquer recurso nas contas de destino. Quando você cria uma política de confiança em uma conta de destino, o perfil do IAM é traduzida do nome da função para um identificador interno. É por isso que o perfil do IAM já deve existir.

AWS DevOps

Confirme a criação da função proxy e da máquina de estado.

  1. Aguarde até que a CloudFormation pilha da AWS alcance o status CREATE_COMPLETE. Isso deve levar menos de um minuto.

  2. Abra o console do AWS Lambda, selecione sua Functions (Funções) e encontre alambda-proxy-ProxyLambda-<GUID> função.

  3. Abra o console do AWS Step Functions, escolha as máquinas de estado e, em seguida, localize a máquina de estado sample-crossaccount-codebuild-state-machine.

AWS DevOps
TarefaDescriçãoHabilidades necessárias

Crie e implante a CloudFormation pilha da AWS.

  1. Faça login no AWS Management Console da sua conta de destino, abra o CloudFormation console da AWS e escolha Stacks.

  2. Selecione Create stack (Criar pilha) e With new resources (standard) (Com novos recursos, padrão).

  3. Para Template source (Origem do template), escolha Upload a template file (Fazer upload de um arquivo de template).

  4. Em Carregar um arquivo de modelo, escolha Escolher arquivo e, em seguida, escolha o arquivo sample_target_codebuild_template.yaml. Escolha Próximo.

  5. Em Nome da pilha, insira um nome para a pilha (por exemplo: sample-codebuild-stack).

  6. Substitua o parâmetro crossAccountSourceRoleArn por seu <SourceAccountId> (por exemplo, <arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role>).

  7. Escolha Avançar, aceite as opções padrão de criação de pilha e escolha Avançar.

  8. Escolha a caixa de seleção Eu reconheço que a AWS CloudFormation pode criar recursos do IAM com nomes personalizados e, em seguida, escolha Criar pilha.

AWS DevOps

Verifique a criação do CodeBuild projeto de amostra.

  1. Aguarde até que a CloudFormation pilha da AWS alcance o status CREATE_COMPLETE. Isso deve levar menos de um minuto.

  2. Abra o CodeBuild console da AWS e, em seguida, encontre o sample-codebuild-project projeto.

AWS DevOps
TarefaDescriçãoHabilidades necessárias

Inicie a máquina de estado.

  1. Faça login no Console de Gerenciamento da AWS para obter sua conta de origem, abra o console do AWS Step Functions e escolha Máquinas de estado.

  2. Escolha a máquina de estado sample-crossaccount-codebuild-state-machine e, em seguida, escolha Iniciar execução.

  3. No editor de entrada, insira o seguinte JSON e <TargetAccountID> substitua pelo ID da conta da AWS da conta que contém o CodeBuild projeto.

    { "crossAccountTargetRoleArns": [ { "arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role", "region": "eu-west-1", "codeBuildProject": "sample-codebuild-project", "SampleValue1": "Value1", "SampleValue2": "Value2" } ] }

    Observação: os pares de valores-chave são passados como variáveis de ambiente da função na conta de origem para o CodeBuild projeto na conta de destino.

  4. Selecione Iniciar execução.

  5. Na guia Detalhes da página da máquina de estado, verifique se o Status de execução está definido como Bem-sucedido. Isso confirma que sua máquina de estado está em execução. Nota: pode levar cerca de 30 segundos para que a máquina de estado alcance o status Bem-sucedido.

  6. Para ver a saída e a entrada de uma etapa na máquina de estado, expanda essa etapa na seção Histórico de eventos de execução. Por exemplo, expanda a etapa Lambda - CodeBuild Proxy — Start. A saída inclui detalhes sobre as variáveis de ambiente substituídas, a carga original e o ID do CodeBuild trabalho.

AWS DevOps

Valide as variáveis de ambiente.

  1. Faça login no Console de Gerenciamento da AWS para sua conta de destino.

  2. Abra o CodeBuild console da AWS, expanda Build e escolha Build projects.

  3. Escolha o sample-codebuild-project projeto e, em seguida, escolha Exibir detalhes.

  4. Na guia Histórico de compilação, escolha a compilação mais recente do projeto e, em seguida, escolha Exibir registros.

  5. Na saída de logs, verifique se as variáveis de ambiente impressas em STDOUT correspondem às variáveis de ambiente da máquina de estado de amostra do Step Functions.

AWS DevOps

Solução de problemas

ProblemaSolução

A execução do Step Functions está demorando mais do que o esperado.

Ajuste a MaxConcurrency propriedade do mapa na máquina de estado da Step Function para controlar quantos CodeBuild projetos podem ser executados paralelamente.

A execução dos CodeBuild trabalhos está demorando mais do que o esperado.

  1. Ajuste os valores do tempo de espera na máquina de estado Step Functions para minimizar as solicitações de pesquisa sobre o status do trabalho. Use o tempo de execução esperado para o CodeBuild projeto.

  2. Considere se CodeBuild é a ferramenta apropriada a ser usada. Por exemplo, o tempo necessário para inicializar um CodeBuild trabalho pode ser significativamente maior do que o AWS Lambda. Se for necessário um alto rendimento e tempos de conclusão rápidos, considere migrar a lógica de negócios para o AWS Lambda e usar uma arquitetura fan-out.