

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á.

# DevOps
<a name="devops-pattern-list"></a>

**Topics**
+ [Acelere MLOps com os modelos de Backstage e de autoatendimento da Amazon AI SageMaker](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Automatize as operações de AWS infraestrutura usando o Amazon Bedrock](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Automatize CloudFront as atualizações quando os endpoints do balanceador de carga mudarem usando o Terraform](automate-cloudfront-updates-when-load-balancer-endpoints-change.md)
+ [Automatize as CodeGuru avaliações da Amazon para aplicativos AWS CDK Python usando o Actions GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatize a implantação de Cadeia de Suprimentos AWS data lakes em uma configuração de vários repositórios usando GitHub Actions, Artifactory e Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatize a avaliação de recursos da AWS](automate-aws-resource-assessment.md)
+ [Instale sistemas SAP automaticamente usando ferramentas de código aberto](install-sap-systems-automatically-by-using-open-source-tools.md)
+ [Automatize o portfólio e a implantação de produtos do AWS Service Catalog usando o AWS CDK](automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.md)
+ [Automatize o gerenciamento dinâmico de pipelines para implantar soluções de hotfix em ambientes Gitflow usando e AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Automatize a exclusão de AWS CloudFormation pilhas e recursos associados](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatização da ingestão e da visualização de métricas personalizadas do Amazon MWAA no Amazon Managed Grafana usando o Terraform](automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.md)
+ [Automatize a implantação de conjuntos de pilhas usando a AWS e a AWS CodePipeline CodeBuild](automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.md)
+ [Anexe automaticamente uma política gerenciada da AWS para Systems Manager aos perfis de EC2 instância usando o Cloud Custodian e o AWS CDK](automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.md)
+ [Crie CI/CD pipelines e clusters do Amazon ECS automaticamente para microsserviços usando o AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Crie e envie imagens do Docker para o Amazon ECR usando GitHub Actions e Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Crie e teste aplicativos iOS com AWS CodeCommit CodePipeline, AWS e AWS Device Farm](build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm.md)
+ [Configurar a autenticação de TLS mútuo para aplicativos em execução no Amazon EKS](configure-mutual-tls-authentication-for-applications-running-on-amazon-eks.md)
+ [Automatize a criação de recursos da Amazon WorkSpaces Applications usando AWS CloudFormation](automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.md)
+ [Crie um analisador de log personalizado para o Amazon ECS usando um roteador de log Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Crie uma estrutura de orquestração de recursos baseada em API usando Actions e Terragrunt GitHub](create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.md)
+ [Crie pull requests automatizados para a AWS infraestrutura gerenciada pelo Terraform usando Actions GitHub](create-automated-pull-requests-for-terraform-managed-aws-infrastructure.md)
+ [Criar pipelines dinâmicos de CI para projetos Java e Python automaticamente](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Implante canários CloudWatch Synthetics usando o Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Implemente uma ChatOps solução para gerenciar os resultados do escaneamento SAST usando o Amazon Q Developer em aplicativos de bate-papo, ações personalizadas e CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Implantação de sistemas agênticos no Amazon Bedrock com a estrutura do CrewAI usando o Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Implante um trabalho do AWS Glue com um pipeline de CodePipeline CI/CD da AWS](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Implemente código em várias regiões da AWS usando AWS CodePipeline CodeCommit, AWS e AWS CodeBuild](deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild.md)
+ [Implante cargas de trabalho dos DevOps pipelines do Azure em clusters privados do Amazon EKS](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Execução de consultas SQL no Amazon Redshift usando o Terraform](execute-redshift-sql-queries-using-terraform.md)
+ [Exporte relatórios do AWS Backup de toda a organização no AWS Organizations como um arquivo CSV](export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.md)
+ [Exportar tags de uma lista de EC2 instâncias da Amazon para um arquivo CSV](export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.md)
+ [Gere um CloudFormation modelo da AWS contendo regras gerenciadas do AWS Config usando o Troposphere](generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.md)
+ [Conceda às instâncias do SageMaker notebook acesso temporário a um CodeCommit repositório em outra conta da AWS](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Implemente uma estratégia GitHub de ramificação do Flow para ambientes com várias contas DevOps](implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implemente uma estratégia de ramificação do Gitflow para ambientes com várias contas DevOps](implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.md)
+ [Implemente uma estratégia de ramificação de troncos para ambientes com várias contas DevOps](implement-a-trunk-branching-strategy-for-multi-account-devops-environments.md)
+ [Implemente o escaneamento Checkov personalizado e centralizado para aplicar a política antes de implantar a infraestrutura AWS](centralized-custom-checkov-scanning.md)
+ [Implementação de diagnósticos e solução de problemas com base em IA no Kubernetes usando a integração do K8sGPT e do Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Detecte alterações automaticamente e inicie diferentes CodePipeline pipelines para um monorepo em CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Integre um repositório Bitbucket com o AWS Amplify usando a AWS CloudFormation](integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.md)
+ [Lance um CodeBuild projeto em várias contas da AWS usando Step Functions e uma função de proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Gerenciamento do failover multi-AZ para clusters do EMR usando o Controlador de Recuperação de Aplicações](multi-az-failover-spark-emr-clusters-arc.md)
+ [Gerencie blue/green implantações de microsserviços em várias contas e regiões usando os serviços de código da AWS e as chaves multirregionais do AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Monitore os repositórios do Amazon ECR para obter permissões curinga usando o AWS e o AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Otimize implantações sem servidor de várias contas usando os fluxos de trabalho e Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Provisione AWS Service Catalog produtos com base em AWS CloudFormation modelos usando GitHub Ações](provision-aws-service-catalog-products-using-github-actions.md)
+ [Provisione funções do IAM com privilégios mínimos implantando uma solução de máquina de venda automática de funções](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)
+ [Publique CloudWatch métricas da Amazon em um arquivo CSV](publish-amazon-cloudwatch-metrics-to-a-csv-file.md)
+ [Remova EC2 as entradas Contas da AWS da Amazon em frente AWS Managed Microsoft AD usando a AWS Lambda automação](remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.md)
+ [Remova EC2 as entradas da Amazon na mesma forma Conta da AWS AWS Managed Microsoft AD usando a AWS Lambda automação](remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.md)
+ [Execute testes de unidade para trabalhos de ETL do Python AWS Glue usando a estrutura pytest](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [Configure um CI/CD pipeline usando a AWS CodePipeline e o AWS CDK](set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.md)
+ [Configuração do registro em log centralizado em escala empresarial usando o Terraform](set-up-centralized-logging-at-enterprise-scale-by-using-terraform.md)
+ [Configure a end-to-end criptografia para aplicativos no Amazon EKS usando cert-manager e Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Simplificação da implantação de aplicações multilocatário no Amazon EKS usando o Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Desenvolvimento e implantação simplificados de bots do Amazon Lex usando um fluxo de trabalho automatizado](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Coordene a dependência de recursos e a execução de tarefas usando a AWS Fargate WaitCondition construção de gancho](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Use repositórios de origem Git de terceiros na AWS CodePipeline](use-third-party-git-source-repositories-in-aws-codepipeline.md)
+ [Crie um CI/CD pipeline para validar as configurações do Terraform usando a AWS CodePipeline](create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.md)
+ [Mais padrões](devops-more-patterns-pattern-list.md)

# Acelere MLOps com os modelos de Backstage e de autoatendimento da Amazon AI SageMaker
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates"></a>

*Ashish Bhatt, Shashank Hirematt e Shivanshu Suryakar, Amazon Web Services*

## Resumo
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-summary"></a>

Organizações que usam sistemas de operações de aprendizado de máquina (MLOps) enfrentam desafios significativos para escalar, padronizar e proteger sua infraestrutura de ML. Esse padrão introduz uma abordagem transformadora que combina o [Backstage](https://backstage.io/), um portal de desenvolvedores de código aberto, com a [ SageMaker IA da Amazon](https://aws.amazon.com/sagemaker/) e módulos de infraestrutura reforçada como código (IaC) para melhorar a forma como suas equipes de ciência de dados podem desenvolver, implantar e gerenciar fluxos de trabalho de ML.

Os módulos IaC para esse padrão são fornecidos no repositório de GitHub [AWS AIOps módulos](https://github.com/awslabs/aiops-modules/tree/main/modules/sagemaker). Esses módulos oferecem modelos predefinidos para configurar a infraestrutura de ML e criar ambientes de ML consistentes. No entanto, os cientistas de dados geralmente têm dificuldade em usar esses modelos diretamente porque eles exigem experiência em infraestrutura. Adicionar um portal para desenvolvedores, como o Backstage, é uma alternativa que facilita para os cientistas de dados implantarem ambientes de ML padronizados sem precisarem entender os detalhes da infraestrutura subjacente.

Ao usar o Backstage como uma plataforma de autoatendimento e integrar modelos de SageMaker IA pré-configurados, você pode:
+ Acelerar o tempo de geração de valor de suas iniciativas de ML.
+ Ajudar a impor segurança e governança consistentes.
+ Fornecer aos cientistas de dados ambientes padronizados e compatíveis.
+ Reduzir a sobrecarga operacional e a complexidade da infraestrutura.

Esse padrão fornece uma solução que aborda os desafios críticos MLOps e também fornece uma estrutura escalável e repetível que permite a inovação enquanto mantém os padrões organizacionais.

**Público-alvo**

Este padrão é destinado a um amplo público envolvido em ML, arquitetura de nuvem e engenharia de plataforma em uma organização. Isso inclui:
+ **Engenheiros de ML** que desejam padronizar e automatizar implantações de fluxo de trabalho de ML.
+ **Cientistas de dados** que desejam ter acesso por autoatendimento a ambientes de ML pré-configurados e compatíveis.
+ **Engenheiros de plataforma** responsáveis por criar e manter plataformas internas para desenvolvedores e infraestrutura compartilhada.
+ **Arquitetos de nuvem** que projetam soluções de nuvem escaláveis, seguras e econômicas para. MLOps
+ **DevOps engenheiros** interessados em estender as práticas de integração contínua e entrega contínua (CI/CD) ao provisionamento e fluxos de trabalho da infraestrutura de ML.
+ **Gestores e líderes técnicos** que supervisionam as iniciativas de ML e desejam melhorar a produtividade da equipe, a governança e o tempo de lançamento no mercado.

Para obter mais informações sobre MLOps desafios, MLOps módulos de SageMaker IA e como a solução fornecida por esse padrão pode atender às necessidades de suas equipes de ML, consulte a seção [Informações adicionais](#accelerate-mlops-with-backstage-and-sagemaker-templates-additional).

## Pré-requisitos e limitações
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-prereqs"></a>

**Pré-requisitos **
+ AWS Identity and Access Management (IAM) [funções e permissões](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#prerequisites) para provisionar recursos em seu Conta da AWS
+ Uma compreensão dos conceitos do [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), [SageMaker Projects](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-whatis.html), [SageMaker Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html) e [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)
+ Um entendimento dos princípios da IaC e experiência com ferramentas como o [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)

**Limitações**
+ **Cobertura limitada de modelos**. Atualmente, a solução oferece suporte somente SageMaker aos AIOps módulos relacionados à IA da [AIOps solução](https://github.com/awslabs/aiops-modules) mais ampla. Outros módulos, como o Ray no Amazon Elastic Kubernetes Service (Amazon EKS) MLflow, o Apache Airflow e o ajuste fino do Amazon Bedrock, ainda não estão disponíveis como modelos do Backstage.
+ **Configurações padrão que não podem ser alteradas**. Os modelos usam configurações padrão fixas dos AIOps SageMaker módulos sem personalização. Você não pode modificar tipos de instância, tamanhos de armazenamento, configurações de rede ou políticas de segurança por meio da interface do Backstage, o que limita a flexibilidade para casos de uso específicos.
+ **Suporte somente para a AWS**. A plataforma foi projetada exclusivamente para AWS implantações e não oferece suporte a cenários de várias nuvens. Organizações que usam serviços de nuvem fora do país Nuvem AWS não podem usar esses modelos para suas necessidades de infraestrutura de ML.
+ **Gerenciamento manual de credenciais**. Você deve fornecer manualmente suas AWS credenciais para cada implantação. Essa solução não fornece integração com provedores de identidade corporativa nem rotação automática de credenciais. Centro de Identidade do AWS IAM
+ **Gerenciamento limitado do ciclo de vida**. Os modelos não têm recursos abrangentes de gerenciamento do ciclo de vida de atributos, como políticas de limpeza automatizadas, recomendações de otimização de custos e detecção de desvios na infraestrutura. Você deve gerenciar e monitorar manualmente os recursos implantados após a criação.

## Arquitetura
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-architecture"></a>

O diagrama a seguir mostra a arquitetura da solução para um portal unificado do desenvolvedor que padroniza e acelera a implantação da infraestrutura de ML com SageMaker IA em todos os ambientes.

![\[Arquitetura para um portal unificado para desenvolvedores com Backstage, CNOE, GitHub Actions e Seed-Farmer.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c16160cf-d637-423e-93a7-485ffbb28646/images/233adab3-83cf-42f3-a1de-72d0b8ade5ae.png)


Nesta arquitetura:

1. [AWS Os planos de modernização de aplicativos](https://github.com/aws-samples/appmod-blueprints.git) provisionam a configuração da infraestrutura com um cluster [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) como base para a estrutura [Cloud Native Operational Excellence (CNOE](https://cnoe.io/)). Essa solução abrangente aborda desafios complexos de gerenciamento de infraestrutura nativa da nuvem, fornecendo uma plataforma interna para desenvolvedores (IDP) escalável. Os esquemas oferecem uma abordagem estruturada para configurar uma infraestrutura robusta e flexível que pode se adaptar às suas necessidades organizacionais em evolução.

1. A estrutura de código aberto CNOE consolida DevOps ferramentas e resolve a fragmentação do ecossistema por meio de uma abordagem unificada de engenharia de plataforma. Ao reunir ferramentas e tecnologias diferentes, isso simplifica o cenário complexo do desenvolvimento nativo da nuvem, para que suas equipes possam se concentrar na inovação, em vez do gerenciamento da cadeia de ferramentas. A estrutura fornece uma metodologia padronizada para selecionar, integrar e gerenciar ferramentas de desenvolvimento.

1. Com o CNOE, o Backstage é implantado como uma out-of-the-box solução dentro do cluster Amazon EKS. O Backstage vem com autenticação robusta por meio do [Keycloak](https://www.keycloak.org/) e fluxos de trabalho de implantação abrangentes por meio do [Argo CD](https://argo-cd.readthedocs.io/en/stable/). Essa plataforma integrada cria um ambiente centralizado para gerenciar processos de desenvolvimento e fornece um único local para as equipes acessarem, implantarem e monitorarem sua infraestrutura e aplicações em vários ambientes.

1. Um GitHub repositório contém modelos de AIOps software pré-configurados que abrangem todo o ciclo de vida da SageMaker IA. Esses modelos atendem às necessidades críticas de infraestrutura de ML, incluindo provisionamento de SageMaker estúdio, treinamento de modelos, pipelines de inferência e monitoramento de modelos. Esses modelos ajudam você a acelerar suas iniciativas de ML e garantir a consistência em diferentes projetos e equipes.

1. GitHub [O [Actions](https://github.com/features/actions) implementa um fluxo de trabalho automatizado que aciona dinamicamente o provisionamento de recursos por meio do utilitário Seed-Farmer.](https://github.com/awslabs/seed-farmer) Essa abordagem integra o catálogo do Backstage com o repositório de AIOps módulos e cria um processo simplificado de implantação de infraestrutura. A automação reduz a intervenção manual, minimiza erros humanos e garante a criação rápida e consistente da infraestrutura em diferentes ambientes.

1. O [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) ajuda você a definir e provisionar a infraestrutura como código e garante a implantação de recursos de maneira repetível, segura e compatível em todas as Contas da AWS especificadas. Essa abordagem fornece o máximo de governança com o mínimo de intervenção manual, para que você possa criar modelos padronizados de infraestrutura que possam ser facilmente replicados, controlados por versão e auditados.

## Ferramentas
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ O [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/) é um serviço gerenciado de ML que ajuda você a criar e treinar modelos de ML e depois implantá-los em um ambiente hospedado pronto para produção.

**Outras ferramentas**
+ O [Backstage](https://backstage.io/) é uma estrutura de código aberto que ajuda você a criar portais internos para desenvolvedores.
+ GitHub O [Actions](https://github.com/features/actions) é uma CI/CD plataforma que automatiza os fluxos de trabalho de desenvolvimento de software, incluindo tarefas como criar, testar e implantar código.

**Repositórios de códigos**

Esse padrão usa código e modelos dos seguintes GitHub repositórios:
+ [AIOps plataforma interna de desenvolvedores (IDP) com repositório Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ SageMaker Módulos relacionados à IA do repositório de [AWS AIOps módulos](https://github.com/awslabs/aiops-modules)
+ Repositório [Modern engineering on AWS](https://github.com/aws-samples/appmod-blueprints)

**Implementação**

Essa implementação usa um padrão de implantação de nível de produção para o Backstage do repositório [Modern engineering on AWS](https://github.com/aws-samples/appmod-blueprints). Essa abordagem simplifica significativamente o processo de configuração e, ao mesmo tempo, incorpora as AWS melhores práticas de segurança e escalabilidade.

A seção [Épicos](#accelerate-mlops-with-backstage-and-sagemaker-templates-epics) deste padrão descreve a abordagem de implementação. Para obter instruções detalhadas de step-by-step implantação, consulte o [guia abrangente de implantação](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md) disponível na [plataforma AIOps interna do desenvolvedor (IDP) com o repositório Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). A implementação inclui:
+ Implantação inicial da plataforma Backstage
+ Integração de modelos de SageMaker software com o Backstage
+ Utilização e manutenção de modelos do Backstage

O guia de implantação também inclui orientações para manutenção contínua, solução de problemas e escalabilidade da plataforma.

## Práticas recomendadas
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-best-practices"></a>

Siga essas melhores práticas para ajudar a garantir a segurança, a governança e a excelência operacional em suas implementações de MLOps infraestrutura.

**Gerenciamento de modelos**
+ Nunca faça alterações significativas nos modelos ativos.
+ Sempre teste minuciosamente as atualizações antes da implantação na produção.
+ Mantenha as versões de modelos claras e bem documentadas.

**Segurança**
+ Fixe GitHub ações em algoritmos de hash seguros de confirmação específicos (SHAs) para ajudar a evitar ataques à cadeia de suprimentos.
+ Use perfis do IAM com privilégios mínimos com permissões granulares.
+ Armazene credenciais confidenciais em [GitHub Segredos](https://docs.github.com/en/actions/concepts/security/secrets) e. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ Nunca codifique credenciais em modelos.

**Governança e rastreamento**
+ Implemente padrões abrangentes de marcação de recursos.
+ Permita o controle preciso dos custos e o monitoramento da conformidade.
+ Mantenha trilhas de auditoria claras para alterações na infraestrutura.

Este guia fornece uma base sólida para implementar essas melhores práticas usando os módulos Backstage, SageMaker AI e IaC.

## Épicos
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-epics"></a>

### Configurar o ambiente de ML
<a name="set-up-your-ml-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o Backstage. | Essa etapa usa os esquemas da [engenharia moderna no AWS](https://github.com/aws-samples/appmod-blueprints) repositório para criar uma infraestrutura robusta e escalável que integra várias para criar um IDP centralizado Serviços da AWS para fluxos de trabalho de ML. Siga as instruções na [seção de implantação do Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#backstage-deployment) do guia de implantação para clonar o repositório, instalar dependências, inicializar as variáveis de ambiente de AWS CDK configuração e implantar a plataforma Backstage.A infraestrutura usa o Amazon EKS como uma plataforma de orquestração de contêineres para implantar componentes de IDP. A arquitetura do Amazon EKS inclui configurações de rede seguras para estabelecer padrões rígidos de isolamento e controle de acesso à rede. A plataforma se integra aos mecanismos de autenticação para ajudar a proteger o acesso do usuário em todos os serviços e ambientes. | Engenheiro de plataforma | 
| Configure seus modelos de SageMaker IA. | Essa etapa usa os scripts na [plataforma GitHub AIOps interna do desenvolvedor (IDP) com o repositório Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). Siga as instruções na seção de [configuração do SageMaker modelo](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-template-setup) do guia de implantação para clonar o repositório, configurar os pré-requisitos e executar o script de configuração.Esse processo cria um repositório que contém os modelos de SageMaker IA necessários para a integração com o Backstage. | Engenheiro de plataforma | 
| Integre os**** modelos de SageMaker IA com o Backstage. | Siga as instruções na seção [SageMaker de integração de modelos](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-templates-integration) do guia de implantação para registrar seus modelos de SageMaker IA.Essa etapa integra os AIOps módulos (modelos de SageMaker IA da última etapa) à sua implantação do Backstage para que você possa autoatender às suas necessidades de infraestrutura de ML. | Engenheiro de plataforma | 
| Use os modelos de SageMaker IA do Backstage. | Siga as instruções na seção [Usando SageMaker modelos](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#using-sagemaker-templates) do guia de implantação para acessar o portal Backstage e criar o ambiente de ML no SageMaker Studio.No portal Backstage, você pode selecionar entre os modelos de SageMaker IA disponíveis, incluindo opções para ambientes SageMaker Studio, SageMaker cadernos, modelos de SageMaker projetos personalizados e pipelines de implantação de modelos. Depois de fornecer os parâmetros de configuração, a plataforma cria repositórios dedicados automaticamente e provisiona AWS recursos por meio do GitHub Actions e do Seed-Farmer. Você pode monitorar o progresso por meio dos registros de GitHub ações e do catálogo de componentes do Backstage. | Cientista de dados, engenheiro de dados, desenvolvedor | 

### Gerenciar modelos para governança e conformidade
<a name="manage-templates-for-governance-and-compliance"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize os modelos de SageMaker IA. | Para atualizar um modelo de SageMaker IA no Backstage, siga estas etapas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Engenheiro de plataforma | 
| Crie e gerencie várias versões de um modelo. | Para alterações ou atualizações significativas, talvez você queira criar várias versões de um modelo de SageMaker IA.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Engenheiro de plataforma | 

### Estender o ambiente de ML
<a name="extend-your-ml-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Expanda a cobertura de modelos além da SageMaker IA. | A solução atual implementa somente modelos SageMaker relacionados à IA AIOps . Você pode estender o ambiente de ML adicionando [AIOps módulos](https://github.com/awslabs/aiops-modules) e integrando modelos de software personalizados para aplicativos adicionais Serviços da AWS . É possível criá-los usando a interface do designer de modelos no Backstage, implementando ações personalizadas de scaffolder ou mantendo repositórios de modelos com metadados padrão. A plataforma oferece suporte ao versionamento de modelos, compartilhamento entre equipes e fluxos de trabalho de validação para fins de consistência. Para obter mais informações, consulte a [documentação do Backstage](https://backstage.io/docs/overview/what-is-backstage/).Você também pode implementar padrões de herança de modelos para criar versões especializadas de modelos de base. Essa extensibilidade permite que você gerencie diversos AWS recursos e aplicativos além da SageMaker IA, preservando a experiência simplificada do desenvolvedor e mantendo os padrões da sua organização. | Engenheiro de plataforma | 
| Use injeção dinâmica de parâmetros. | Os modelos atuais usam configurações padrão sem personalização e executam a CLI do Seed-Farmer para implantar recursos com variáveis padrão. Você pode estender a configuração padrão usando a injeção dinâmica de parâmetros para configurações específicas do módulo. | Engenheiro de plataforma | 
| Aumente a segurança e a conformidade. | Para aumentar a segurança na criação de recursos da AWS, você pode habilitar a integração do controle de acesso baseado em perfis (RBAC) com autenticação única (SSO), SAML, OpenID Connect (OIDC) e imposição de políticas como código. | Engenheiro de plataforma | 
| Adicione a limpeza automatizada de recursos. | Você pode habilitar atributos para políticas de limpeza automatizadas e adicionar detecção e remediação de desvios na infraestrutura. | Engenheiro de plataforma | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova a infraestrutura do Backstage e os recursos de SageMaker IA. | Ao terminar de usar seu ambiente de ML, siga as instruções na seção [Limpeza e gerenciamento de recursos](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#cleanup-and-resource-management) do guia de implantação para remover a infraestrutura do Backstage e excluir os recursos de SageMaker IA em seu ambiente de ML. | Engenheiro de plataforma | 

## Solução de problemas
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| AWS CDK falhas de bootstrap |  Verifique AWS as credenciais e a configuração da região. | 
| Problemas de acesso a clusters do Amazon EKS | Verifique a configuração **kubectl** e as permissões do IAM. | 
| Problemas de conectividade do Application Load Balancer | Certifique-se de que os grupos de segurança permitam o tráfego de entrada na porta 80/443. | 
| GitHub problemas de integração | Verifique as permissões GitHub do token e o acesso à organização. | 
| SageMaker Falhas na implantação de IA | Verifique as [cotas do AWS service (Serviço da AWS)](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) e as permissões do IAM. | 

## Recursos relacionados
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-resources"></a>
+ [Platform engineering](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-caf-platform-perspective/platform-eng.html) (no guia *AWS Cloud Adoption Framework: Platform perspective*)
+ [Documentação da Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/)
+ [Backstage Software Templates](https://backstage.io/docs/features/software-templates/) (site do Backstage)
+ [AIOps repositório de módulos](https://github.com/awslabs/aiops-modules) (coleção de módulos IaC reutilizáveis para ML)
+ [AIOps plataforma interna de desenvolvedores (IDP) com repositório Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ Repositório [Modern engineering on AWS](https://github.com/aws-samples/appmod-blueprints)
+ [Site da Cloud Native Operational Excellence (CNOE)](https://cnoe.io/)

## Mais informações
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-additional"></a>

**Desafios comerciais**

Organizações que iniciam ou expandem suas MLOps iniciativas frequentemente enfrentam os seguintes desafios comerciais e técnicos:
+ **Ambientes inconsistentes**. A falta de ambientes padronizados de desenvolvimento e implantação dificulta a colaboração e aumenta os riscos da implantação.
+ **Sobrecarga de provisionamento manual**. Configurar manualmente uma infraestrutura de ML com o SageMaker Studio, buckets do Amazon Simple Storage Service (Amazon S3), funções do IAM CI/CD e pipelines é demorado e propenso a erros, além de desviar os cientistas de dados de sua tarefa principal de desenvolvimento de modelos.
+ **Falta de capacidade de descoberta e reutilização**. A falta de um catálogo centralizado dificulta a localização de conjuntos de dados, pipelines e modelos de ML existentes. Isso leva ao trabalho redundante e à perda de oportunidades de reutilização.
+ **Governança e conformidade complexas**. Garantir que os projetos de ML respeitem as políticas de segurança organizacionais, regulamentos de privacidade de dados e normas de conformidade, como a Lei de Portabilidade e Responsabilidade de Provedores de Saúde (HIPAA) e o Regulamento Geral de Proteção de Dados (RGDP), pode ser um desafio sem barreiras de proteção automatizadas.
+ **Muito tempo para a geração de valor**. O efeito cumulativo desses desafios resulta em ciclos de vida prolongados do projeto de ML e atrasa a obtenção do valor comercial dos investimentos em ML.
+ **Riscos de segurança**. Configurações inconsistentes e processos manuais podem introduzir vulnerabilidades de segurança que dificultam a aplicação de privilégios mínimos e o isolamento da rede.

Esses problemas prolongam os ciclos de desenvolvimento, aumentam a sobrecarga operacional e introduzem riscos de segurança. A natureza iterativa de ML exige fluxos de trabalho repetíveis e colaboração eficiente.

A Gartner prevê que até 2026, 80% das organizações de engenharia de software terão equipes de plataforma. (Consulte [Platform Engineering Empowers Developers to be Better, Faster, Happier](https://www.gartner.com/en/experts/top-tech-trends-unpacked-series/platform-engineering-empowers-developers) no site da Gartner.) Essa previsão destaca como uma IDP pode acelerar a entrega de software. Como uma IDP, o Backstage ajuda a restaurar a ordem em uma infraestrutura complexa para que as equipes possam fornecer código de alta qualidade com rapidez e segurança. A integração do Backstage com AIOps módulos reforçados ajuda você a mudar da solução de problemas reativa para a prevenção proativa.

**MLOps SageMaker módulos**

Os [AIOps módulos](https://github.com/awslabs/aiops-modules) no GitHub repositório usados para esse padrão fornecem uma base valiosa para padronização MLOps por AWS meio de IaC reutilizável e reforçado. Esses módulos resumem as melhores práticas para SageMaker projetos de provisionamento, pipelines e recursos de rede e armazenamento associados, com o objetivo de reduzir a complexidade e acelerar a configuração de ambientes de ML. Você pode usar esses modelos em vários casos de MLOps uso para estabelecer padrões de implantação consistentes e seguros que promovam uma abordagem mais governada e eficiente aos fluxos de trabalho de ML. 

O uso direto dos AIOps módulos geralmente exige que as equipes da plataforma implantem e gerenciem esses modelos de IaC, o que pode representar desafios para cientistas de dados que desejam acesso por autoatendimento. Descobrir e entender os modelos disponíveis, configurar os parâmetros necessários e acionar sua implantação pode exigir a navegação nos AWS service (Serviço da AWS) consoles ou a interação direta com as ferramentas de IaC. Isso pode criar atrito, aumentar a carga cognitiva para cientistas de dados que preferem se concentrar em tarefas de ML e possivelmente resultar em parametrização inconsistente ou desvios dos padrões organizacionais se esses modelos não forem gerenciados por meio de uma interface centralizada e fácil de usar. A integração desses AIOps módulos poderosos com um IDP, como o Backstage, ajuda a enfrentar esses desafios, fornecendo uma experiência simplificada de autoatendimento, maior capacidade de descoberta e controles de governança mais fortes para o uso desses componentes padronizados. MLOps 

**Backstage como uma IDP**

Uma plataforma interna para desenvolvedores (IDP) é uma camada de autoatendimento criada por equipes de plataforma para simplificar e padronizar a forma como os desenvolvedores criam, implantam e gerenciam aplicações. Ela abstrai a complexidade da infraestrutura e fornece aos desenvolvedores acesso fácil a ferramentas, ambientes e serviços por meio de uma interface unificada.

O objetivo principal de uma IDP é aprimorar a experiência e a produtividade dos desenvolvedores ao:
+ Habilitar o autoatendimento para tarefas como criação e implantação de serviços.
+ Promover a consistência e a conformidade por meio de modelos padrão.
+ Integrar ferramentas em todo o ciclo de vida do desenvolvimento (CI/CD, monitoramento e documentação).

O Backstage é um portal para desenvolvedores de código aberto criado pela Spotify e que agora faz parte da Cloud Native Computing Foundation (CNCF). Ele ajuda as organizações a criar sua própria IDP fornecendo uma plataforma centralizada e extensível para gerenciar componentes de software, ferramentas e documentação. Com o Backstage, os desenvolvedores podem:
+ Descubra e gerencie todos os serviços internos por meio de um catálogo de software.
+ Crie novos projetos usando modelos predefinidos por meio do plug-in scaffolder.
+ Acesse ferramentas integradas, como CI/CD pipelines, painéis do Kubernetes e sistemas de monitoramento em um único local.
+ Mantenha uma documentação consistente e baseada em remarcações por meio de. TechDocs

**PERGUNTAS FREQUENTES**

**Qual é a diferença entre usar esse modelo do Backstage e implantar o SageMaker Studio manualmente por meio do SageMaker console?**

O modelo Backstage oferece várias vantagens em relação à implantação manual do AWS console, incluindo configurações padronizadas que seguem as melhores práticas organizacionais, implantação automatizada de IaC usando o Seed-Farmer e o AWS CDK, políticas de segurança e medidas de conformidade integradas e integração com os fluxos de trabalho de desenvolvedores de sua organização. GitHub O modelo também cria implantações reproduzíveis com controle de versão, o que facilita a replicação de ambientes em diferentes estágios (desenvolvimento, preparação, produção) e mantém a consistência entre as equipes. Além disso, o modelo inclui recursos de limpeza automatizados e se integra ao sistema de gerenciamento de identidade da sua organização por meio do Backstage. A implantação manual por meio do console exige profundo AWS conhecimento e não fornece controle de versão ou o mesmo nível de padronização e governança que o modelo oferece. Por esses motivos, as implantações de console são mais adequadas para experimentos únicos do que ambientes de ML de produção.

**O que é o Seed-Farmer e por que a solução usa essa ferramenta?**

O Seed-Farmer é uma ferramenta de orquestração de AWS implantação que gerencia módulos de infraestrutura usando o. AWS CDK Esse padrão usa o Seed-Farmer porque fornece componentes de infraestrutura padronizados e reutilizáveis que são projetados especificamente para AI/ML cargas de trabalho, manipula dependências complexas entre si Serviços da AWS automaticamente e garante implantações consistentes em diferentes ambientes.

**Preciso instalar o AWS CLI para usar esses modelos?**

Não, você não precisa instalar o AWS CLI no seu computador. Os modelos são executados inteiramente por meio de GitHub ações na nuvem. Você fornece suas AWS credenciais (chave de acesso, chave secreta e token de sessão) por meio da interface do Backstage, e a implantação acontece automaticamente no ambiente GitHub Actions.

**Quanto tempo é necessário para implantar um ambiente SageMaker Studio?**

Uma implantação típica do SageMaker Studio leva de 15 a 25 minutos para ser concluída. Isso inclui AWS CDK inicialização (2 a 3 minutos), configuração do conjunto de ferramentas Seed-Farmer (3 a 5 minutos) e criação de recursos (10 a 15 minutos). O tempo exato depende de você Região da AWS e da complexidade de sua configuração de rede.

**Posso implantar vários SageMaker ambientes no mesmo ambiente Conta da AWS?**

Sim. Cada implantação cria recursos com nomes exclusivos com base no nome do componente que você fornece no modelo. No entanto, esteja ciente das AWS service (Serviço da AWS) cotas: cada conta pode ter um número limitado de SageMaker domínios por região, portanto, [verifique suas cotas](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) antes de criar vários ambientes.

# Automatize as operações de AWS infraestrutura usando o Amazon Bedrock
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock"></a>

*Ishwar Chauthaiwale e Anand Bukkapatnam Tirumala, Amazon Web Services*

## Resumo
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-summary"></a>

Em soluções nativas da nuvem, automatizar operações comuns de infraestrutura desempenha um papel fundamental na manutenção de ambientes eficientes, seguros e econômicos. Realizar operações de forma manual é um processo demorado e propenso a erros por parte dos humanos. Além disso, membros da equipe com diferentes níveis de AWS especialização precisam realizar essas tarefas e, ao mesmo tempo, garantir a conformidade com os protocolos de segurança. Esse padrão demonstra como usar o Amazon Bedrock para automatizar operações comuns de AWS infraestrutura por meio do processamento de linguagem natural (NLP).

Com este padrão, as organizações podem desenvolver código modular, reutilizável e seguro para a implantação de infraestrutura baseada em IA generativa em diversos ambientes. Por meio de seu foco na infraestrutura como código (IaC) e na automação, ela oferece DevOps os principais benefícios, incluindo controle de versão, implantações consistentes, redução de erros, provisionamento mais rápido e colaboração aprimorada.

O padrão implementa uma arquitetura segura que permite que as equipes gerenciem operações relacionadas à chave Serviços da AWS , incluindo:
+ Gerenciamento de versionamento de buckets do Amazon Simple Storage Service (Amazon S3)
+ Criação de snapshots do Amazon Relational Database Service (Amazon RDS)
+ Gerenciamento de instâncias do Amazon Elastic Compute Cloud (Amazon EC2)

A arquitetura emprega endpoints e redes privadas da Amazon Virtual Private Cloud (Amazon VPC) para comunicação segura, AWS Lambda com funções operando como executores de tarefas em sub-redes privadas. O Amazon S3 fornece gerenciamento de dados e implementa funções e permissões abrangentes AWS Identity and Access Management (IAM) para garantir controles de acesso adequados. Esta solução não inclui um recurso de histórico para chat, e as conversas não são armazenadas.

## Pré-requisitos e limitações
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-prereqs"></a>
+ Um ativo Conta da AWS.
+ Medidas adequadas de controle de acesso devem estar implementadas para ajudar a proteger e a gerenciar o acesso. Exemplos de controle de acesso incluem o uso de acesso a modelos básicos AWS Systems Manager, uma função do IAM para implantação e funções baseadas em serviços, a desativação do acesso público aos buckets do Amazon S3 e a configuração de uma fila de mensagens mortas.
+ Uma [chave AWS Key Management Service (AWS KMS) gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).
+ AWS Command Line Interface (AWS CLI) versão 2 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) e [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) no ambiente de implantação.
+ Terraform AWS Provider versão 4 ou posterior [instalado](https://registry.terraform.io/providers/-/aws/latest/docs/guides/version-4-upgrade) e configurado.
+ O Terraform, na versão 1.5.7 ou em versões posteriores, [instalado](https://developer.hashicorp.com/terraform/install) e configurado.
+ Analise e [defina os esquemas da OpenAPI para os grupos de ação do seu agente no Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html), com o objetivo de prevenir acessos não autorizados e garantir a integridade dos dados.
+ [Acesso habilitado](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) [em seu Conta da AWS para os modelos Amazon Titan Text Embeddings v2 necessários e para os modelos Claude 3.5 Sonnet ou Claude 3 Haiku Foundation.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) Para evitar falhas na implantação, confirme se a implantação de destino é Região da AWS [compatível com os modelos necessários](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html).
+ Uma nuvem privada virtual (VPC) configurada com base nas práticas recomendadas do [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-design.html).
+ Análise da [política de uso responsável de IA da Amazon](https://aws.amazon.com/ai/responsible-ai/policy/) concluída.

**Versões do produto**
+ Incorporador de Texto do Amazon Titan v2
+ Claude 3.5 Sonnet ou Claude 3 Haiku da Anthropic
+ Terraform AWS Provider versão 4 ou posterior
+ Terraform versão 1.5.7 ou posterior

## Arquitetura
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho para automatizar operações conhecidas de infraestrutura da AWS usando o Amazon Bedrock.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/924e503f-bfc5-4452-abdf-d72a58d4d36f/images/bd56ad29-b435-4543-8ee8-dc4e1d38df18.png)


A arquitetura da solução consiste em várias camadas que trabalham juntas para processar solicitações de linguagem natural e executar AWS as operações correspondentes:

1. O usuário realiza solicitações de operações por meio do console de chat do Amazon Bedrock.

1. O chatbot usa as Bases de Conhecimento para Amazon Bedrock para o processamento das solicitações. Esse chatbot implementa o modelo Incorporador de Texto do Amazon Titan v2 para o processamento da linguagem natural.

1. Se o prompt fornecido pelo usuário incluir uma solicitação de ação, o grupo de ações do Amazon Bedrock usará o modelo Claude 3 Haiku ou Claude 3.5 Sonnet da Anthropic, com base na sua escolha, para determinar a lógica de execução e definir as operações por meio de um esquema da OpenAPI.

1. O grupo de ação alcança os [endpoints](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) da Amazon VPC usando AWS PrivateLink para comunicação segura de serviços.

1. A AWS Lambda função é alcançada por meio de endpoints Amazon VPC para serviços Amazon Bedrock.

1. As funções do Lambda são o principal mecanismo de execução. Com base na solicitação, a função do Lambda chama a API para executar ações nos serviços da Serviços da AWS. Além disso, a função do Lambda gerencia o roteamento e a execução das operações.

1. A solicitação Serviços da AWS get the API da função Lambda e as operações correspondentes são executadas.

1. A função do Lambda gera uma carga útil de saída que é compreendida pelo Amazon Bedrock.

1. Essa carga é enviada para o Amazon Bedrock usando PrivateLink para comunicação segura de serviços. O grande modelo de linguagem (LLM) empregado pelo Amazon Bedrock compreende essa carga útil e a converte em um formato compreensível por humanos.

1. Em seguida, a saída é apresentada ao usuário no console de chat do Amazon Bedrock.

A solução possibilita as seguintes operações principais:
+ Amazon S3: habilitar o versionamento de buckets para controle de versões.
+ Amazon RDS: criar snapshots de bancos de dados para backup.
+ Amazon EC2: listar instâncias e controlar o início e a interrupção das instâncias.

## Ferramentas
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-tools"></a>

**Serviços da AWS**
+ [O Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é um serviço totalmente gerenciado que disponibiliza modelos básicos de alto desempenho (FMs) das principais startups de IA e da Amazon para seu uso por meio de uma API unificada.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) oferece capacidade de computação escalável na Nuvem AWS. Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) é uma configuração sem servidor sob demanda para o Amazon Service. OpenSearch 
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)ajuda você a criar conexões unidirecionais e privadas de suas nuvens privadas virtuais (VPCs) para serviços fora da VPC.
+ O [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) ajuda você a configurar, operar e escalar um banco de dados relacional na Nuvem AWS.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ O [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar suas aplicações e infraestrutura em execução na Nuvem AWS. Ele simplifica o gerenciamento de aplicativos e recursos, reduz o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus AWS recursos com segurança em grande escala.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ O [Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [infra-ops-orchestratoraws-samples/](https://github.com/aws-samples/infra-ops-orchestrator).

## Práticas recomendadas
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-best-practices"></a>
+ Monitore regularmente os logs de execução do Lambda. Para obter mais informações, consulte [Monitorar e solucionar problemas de funções do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para obter mais informações sobre as melhores práticas, consulte [Práticas recomendadas para trabalhar com AWS Lambda funções](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).
+ Analise periodicamente as configurações de segurança para garantir a conformidade com os requisitos da sua organização. Para obter mais informações, consulte [Security best practices](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-bp.html).
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-epics"></a>

### Implante a solução
<a name="deploy-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório em sua máquina local, execute o seguinte comando:<pre>git clone "git@github.com:aws-samples/infra-ops-orchestrator.git"<br />cd infra-ops-orchestrator</pre> | AWS DevOps, DevOps engenheiro | 
| Edite as variáveis de ambiente. | Edite o arquivo `terraform.tfvars` no diretório raiz do repositório clonado. Analise os espaços reservados indicados por `[XXXXX]` e atualize-os de acordo com o seu ambiente. | AWS DevOps, DevOps engenheiro | 
| Crie a infraestrutura. | Para criar a infraestrutura, execute os seguintes comandos:<pre>terraform init</pre><pre>terraform plan</pre>Analise cuidadosamente o plano de execução. Se as alterações propostas estiverem adequadas, execute o seguinte comando:<pre>terraform apply --auto-approve</pre> | AWS DevOps, DevOps engenheiro | 

### Acesso à solução
<a name="access-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Acesse a solução. | Após a implantação com êxito, siga estas etapas para usar a interface baseada em chat:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-infrastructure-operations-by-using-amazon-bedrock.html) | AWS DevOps, DevOps engenheiro | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua os recursos criados. | Para excluir toda a infraestrutura criada por este padrão, execute o seguinte comando:<pre>terraform plan -destroy </pre>Analise cuidadosamente o plano de exclusão. Se as exclusões propostas estiverem adequadas, execute o seguinte comando:<pre>terraform destroy</pre>Observação: este comando excluirá permanentemente todos os recursos criados por este padrão. O comando solicitará confirmação antes de remover quaisquer recursos. | AWS DevOps, DevOps engenheiro | 

## Solução de problemas
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Comportamento do agente  | Para obter informações sobre este problema, consulte [Test and troubleshoot agent behavior](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) na documentação do Amazon Bedrock. | 
| Problemas de rede relacionados ao Lambda | Para obter informações sobre estes problemas, consulte [Solucionar problemas de redes no Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) na documentação do Lambda. | 
| permissões do IAM | Para obter informações sobre estes problemas, consulte [Solucionar problemas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) na documentação do IAM. | 

## Recursos relacionados
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-resources"></a>
+ [Criação de um DB snapshot para uma instância de banco de dados Single-AZ para o Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [Define OpenAPI schemas for your agent's action groups in Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html)
+ [Ativando o controle de versão em buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)
+ [Como o Amazon Bedrock Agents funciona](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [Retrieve data and generate AI responses with Amazon Bedrock Knowledge Bases](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Acesse com segurança os serviços em AWS PrivateLink](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Pare e inicie instâncias do Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
+ [Use grupos de ação para definir ações para seu agente realizar](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html)

# Automatize CloudFront as atualizações quando os endpoints do balanceador de carga mudarem usando o Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamilselvan P, Mohan Annam e Naveen Suthar, Amazon Web Services*

## Resumo
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

Quando usuários do Amazon Elastic Kubernetes Service (Amazon EKS) excluem e instalam novamente a configuração de entrada por meio de charts do Helm, um novo Application Load Balancer (ALB) é criado. Isso cria um problema porque CloudFront a Amazon continua referenciando o antigo registro DNS do ALB. Como resultado, os serviços destinados a este endpoint não estarão acessíveis. (Para obter mais detalhes sobre este fluxo de trabalho com problemas, consulte [Informações adicionais](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

Para resolver esse problema, esse padrão descreve o uso de uma AWS Lambda função personalizada desenvolvida com Python. Essa função Lambda detecta automaticamente quando um novo ALB é criado por meio das regras da Amazon. EventBridge Usando o AWS SDK para Python (Boto3), a função então atualiza a CloudFront configuração com o novo endereço DNS do ALB, garantindo que o tráfego seja roteado para o endpoint correto.

Essa solução automatizada mantém a continuidade do serviço sem a necessidade de roteamento adicional ou aumento de latência. O processo ajuda a garantir que CloudFront sempre faça referência ao endpoint DNS correto do ALB, mesmo quando a infraestrutura subjacente muda.

## Pré-requisitos e limitações
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Uma aplicação web de amostra para testes e validações, implantada no Amazon EKS usando o Helm. Para obter mais informações, consulte [Deploy applications with Helm on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) na documentação do Amazon EKS.
+ Configure CloudFront para rotear chamadas para um ALB criado por um controlador de [entrada](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) do Helm. Para obter mais informações, consulte [Instalar o controlador AWS Load Balancer com o Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) na documentação do Amazon EKS e [Restringir o acesso aos Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) na documentação. CloudFront 
+ O Terraform [instalado](https://developer.hashicorp.com/terraform/install?product_intent=terraform) e configurado em um espaço de trabalho local.

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Terraform versão 1.0.0 ou posterior
+ Terraform [AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) versão 4.20 ou versões posteriores

## Arquitetura
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho a ser atualizado CloudFront com o novo endereço DNS do ALB detectado por meio da EventBridge regra.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Esta solução executa as seguintes etapas:

1. O controlador de entrada do Amazon EKS cria um novo Application Load Balancer (ALB) sempre que há reinicialização ou implantação do Helm.

1. EventBridge procura eventos de criação de ALB.

1. O evento de criação do ALB aciona a função do Lambda.

1. A função Lambda foi implantada com base no python 3.9 e usa a API boto3 para fazer chamadas. Serviços da AWS A função Lambda atualiza a CloudFront entrada com o nome DNS mais recente do balanceador de carga, que é recebido dos eventos de criação do balanceador de carga.

## Ferramentas
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Serviços da AWS**
+ [A Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) acelera a distribuição do seu conteúdo da web entregando-o por meio de uma rede mundial de data centers, o que reduz a latência e melhora o desempenho.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS

**Outras ferramentas**
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

## Épicos
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Configuração da estação de trabalho local
<a name="set-up-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure e ajuste a CLI do Git. | Para instalar e configurar a interface de linha de comandos (CLI) do Git em sua estação de trabalho local, siga as instruções apresentadas em [Getting Started – Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) na documentação oficial do Git. | DevOps engenheiro | 
| Crie a pasta do projeto e adicione os arquivos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Provisionamento da arquitetura de destino por meio da configuração do Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a solução. | Para implantar recursos no destino Conta da AWS, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

### Limpeza da infraestrutura
<a name="clean-up-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe a infraestrutura. | Para limpar a infraestrutura que você criou anteriormente, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps engenheiro | 

## Solução de problemas
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro ao validar as credenciais do provedor | Ao executar os comandos `apply` ou `destroy` do Terraform em sua máquina local, você pode encontrar um erro semelhante ao seguinte:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local.Para resolver o erro, consulte [Definir e visualizar as configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) na documentação AWS Command Line Interface (AWS CLI). | 

## Recursos relacionados
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS recursos**
+ [Restrinja o acesso aos Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Roteie o tráfego da Internet com o AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Documentação do Terraform**
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Instalar o Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Remote State](https://developer.hashicorp.com/terraform/language/state/remote)

## Mais informações
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Fluxo de trabalho com problemas**

![\[Fluxo de trabalho que produz a entrada out-of-date ALB DNS em. CloudFront\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Quando o usuário acessa o aplicativo, a chamada vai para CloudFront.

1. CloudFront encaminha as chamadas para o respectivo Application Load Balancer (ALB).

1. O ALB inclui os endereços IP de destino, que correspondem aos endereços IP dos pods da aplicação. A partir desse ponto, o ALB fornece os resultados esperados ao usuário.

No entanto, esse fluxo de trabalho evidencia um problema. As implantações da aplicação estão sendo realizadas por meio de charts do Helm. Sempre que há uma implantação ou se alguém reinicia o Helm, a entrada correspondente também é recriada. Como resultado, o controlador do balanceador de carga externo recria o ALB. Além disso, a cada recriação, o ALB é recriado com um nome de DNS diferente. Por causa disso, CloudFront terá uma entrada obsoleta nas configurações de origem. Devido a essa entrada desatualizada, a aplicação não ficará acessível para o usuário. Esse problema resulta em tempo de inatividade para os usuários.

**Solução alternativa**

Outra solução possível é criar um [DNS externo](https://github.com/kubernetes-sigs/external-dns) para o ALB e, em seguida, direcioná-lo para o endpoint de zona hospedada privada do Amazon Route 53. CloudFront No entanto, essa abordagem adiciona um salto extra no fluxo da aplicação, o que pode causar latência. A solução baseada na função do Lambda deste padrão não interrompe o fluxo atual.

# Automatize as CodeGuru avaliações da Amazon para aplicativos AWS CDK Python usando o Actions GitHub
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy e Sarat Chandra Pothula, Amazon Web Services*

## Resumo
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

Observação: a partir de 7 de novembro de 2025, você não pode criar novas associações de repositórios no Amazon CodeGuru Reviewer. Para saber mais sobre serviços com recursos semelhantes aos do CodeGuru Reviewer, consulte a [mudança de disponibilidade do Amazon CodeGuru Reviewer na documentação](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) do CodeGuru Reviewer.

Esse padrão mostra a integração das análises de código CodeGuru automatizadas da Amazon para aplicativos AWS Cloud Development Kit (AWS CDK) Python, GitHub orquestradas por meio de ações. A solução implanta uma arquitetura sem servidor definida em Python. AWS CDK Ao automatizar a análise de código especializada no pipeline de desenvolvimento, essa abordagem pode fazer o seguinte para projetos em Python AWS CDK :
+ Código de melhor qualidade.
+ Simplificação dos fluxos de trabalho.
+ Aproveitamento máximo dos benefícios da computação com tecnologia sem servidor.

## Pré-requisitos e limitações
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Command Line Interface [(AWS CLI) versão 2.9.11 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) e configurada.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Uma GitHub conta ativa e um GitHub repositório com permissões de fluxo de trabalho de leitura e gravação e criação de pull requests (PR) pela GitHub Actions para garantir que o fluxo de trabalho de PR funcione corretamente.
+ Uma função do OpenID Connect (OIDC) em GitHub Ações para implantar a solução no. Conta da AWS Para criar o perfil, use o [constructo do AWS CDK](https://github.com/aws-samples/github-actions-oidc-cdk-construct).

**Limitações**
+ O Amazon CodeGuru Profiler [oferece suporte a aplicativos](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support) escritos em todas as linguagens de máquina virtual Java (JVM) (como Scala e Kotlin) e tempos de execução e Python 3.6 ou posterior.
+ O Amazon CodeGuru Reviewer [oferece suporte a associações](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html) com repositórios de código Java e Python somente dos seguintes provedores de origem AWS CodeCommit: Bitbucket GitHub GitHub , Enterprise Cloud e Enterprise Server. GitHub Além disso, os repositórios do Amazon Simple Storage Service (Amazon S3) só são suportados por meio de ações. GitHub 
+ Não existe uma forma automatizada de apresentar as descobertas durante o pipeline de integração contínua e implantação contínua (CI/CD). Em vez disso, esse padrão usa GitHub Ações como um método alternativo para manipular e exibir as descobertas.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura para esta solução.

![\[Fluxo de trabalho para integrar a revisão de CodeGuru código para aplicativos GitHub Python do AWS CDK usando Actions.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


Conforme mostrado no diagrama, quando um desenvolvedor cria uma pull request (PR) para análise, o GitHub Actions aciona as seguintes etapas:

1. Suposição da função do IAM — O pipeline usa a função do IAM especificada em GitHub Segredos para realizar tarefas de implantação.

1. Análise de código
   + CodeGuru O revisor analisa o código armazenado no bucket do Amazon S3. Ele identifica defeitos e fornece recomendações para correções e otimizações.
   + CodeGuru Verificações de segurança em busca de violações e vulnerabilidades de políticas.

1. Revisão das descobertas
   + O pipeline apresenta um link para o painel de descobertas na saída do console.
   + Se forem detectadas descobertas críticas, o pipeline falhará imediatamente.
   + Para descobertas com severidade alta, normal ou baixa, o pipeline prosseguirá para a próxima etapa.

1. Aprovação de PR
   + O PR precisa ser aprovado manualmente por um revisor.
   + Caso o PR seja recusado, o pipeline falha e interrompe quaisquer etapas subsequentes de implantação.

1. Implantação do CDK: após a aprovação do PR, o processo de implantação do CDK é iniciado. Ele configura o seguinte Serviços da AWS e os recursos:
   + CodeGuru Perfilador
   + AWS Lambda função
   + Fila do Amazon Simple Queue Service (Amazon SQS)

1. Geração de dados de perfil — Para gerar dados de perfil suficientes para CodeGuru o Profiler:
   + O pipeline invoca a função do Lambda várias vezes, enviando mensagens periodicamente para a fila do Amazon SQS.

## Ferramentas
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ O [CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) é um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu AWS CDK aplicativo.
+ [O Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) coleta dados de desempenho de tempo de execução de seus aplicativos ativos e fornece recomendações que podem ajudá-lo a ajustar o desempenho do seu aplicativo.
+ [O Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) usa análise de programas e aprendizado de máquina para detectar possíveis defeitos difíceis de serem encontrados pelos desenvolvedores. Em seguida, o CodeGuru Profiler oferece sugestões para melhorar seu código Java e Python.
+ O Amazon CodeGuru Security é uma ferramenta estática de segurança de aplicativos que usa aprendizado de máquina para detectar violações e vulnerabilidades de políticas de segurança. A ferramenta fornece sugestões para lidar com os riscos de segurança e gera métricas para que você possa acompanhar a postura de segurança das aplicações.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**
+ GitHub O [Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python).

## Práticas recomendadas
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ Siga as práticas apresentadas em [Best practices for developing and deploying cloud infrastructure with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html).
+ Siga as [melhores práticas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) ao usar os fluxos Serviços da AWS de trabalho do GitHub Actions, incluindo:
  + Não armazene credenciais no código do seu repositório.
  + [Assuma um perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles) para receber credenciais temporárias e use esse tipo de credencial sempre que possível.
  + [Conceda o menor privilégio](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) à função do IAM usada nos fluxos de trabalho do GitHub Actions. Conceda somente as permissões necessárias para realizar as ações em seus fluxos de trabalho de GitHub ações. 
  + [Monitore a atividade](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) da função do IAM usada nos fluxos de trabalho do GitHub Actions.
  + Faça a rotação periódica de quaisquer credenciais de longo prazo que você empregue.

## Épicos
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure as AWS credenciais. | Para exportar as variáveis que definem Conta da AWS e Região da AWS onde você está implantando a pilha, execute os seguintes comandos:<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>As AWS credenciais do AWS CDK são fornecidas por meio de variáveis de ambiente. | AWS DevOps, DevOps engenheiro | 
| Clonar o repositório. | Para clonar o repositório em sua máquina local, execute o seguinte comando:<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps engenheiro | 
| Instale o CDK Toolkit. | Para confirmar que o CDK Toolkit está instalado e verificar a versão, execute o seguinte comando: <pre>cdk --version</pre>Se a versão do CDK Toolkit for anterior à 2.27.0, digite o seguinte comando para atualizá-lo para a versão 2.27.0:<pre>npm install -g aws-cdk@2.27.0</pre>Se o CDK Toolkit *não* estiver instalado, execute o seguinte comando para instalá-lo:<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps engenheiro | 
| Instale as dependências necessárias. | Para instalar as dependências necessárias do projeto, execute o seguinte comando:<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps engenheiro | 
| Inicialize o ambiente do CDK. | Para [inicializar](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) um ambiente do AWS CDK, execute os seguintes comandos:<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Após inicializar com êxito o ambiente, a seguinte saída deve ser exibida:<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps, DevOps engenheiro | 

### Implante a aplicação do CDK.
<a name="deploy-the-cdk-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Sintetize o aplicativo. AWS CDK  | Para sintetizar um AWS CDK aplicativo, execute o seguinte comando:<pre>cdk synth</pre>Para obter mais informações sobre esse comando, consulte [cdk synthesize na documentação](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html). AWS CDK  | AWS DevOps, DevOps engenheiro | 
| Implantar os recursos | Para implantar os recursos, execute o seguinte comando:<pre>cdk deploy --require-approval never</pre>A sinalização `--require-approval never` indica que o CDK aprovará e aplicará todas as alterações de forma automática. Isso inclui alterações que o CDK normalmente sinalizaria para revisão manual, como alterações em políticas do IAM ou remoção de recursos. Certifique-se de que o código e o CI/CD pipeline do CDK estejam bem testados e seguros antes de usar a `--require-approval never` bandeira em ambientes de produção. | AWS DevOps, DevOps engenheiro | 

### Crie GitHub segredos e token de acesso pessoal
<a name="create-github-secrets-and-personal-access-token"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os segredos necessários em GitHub. | Para permitir que os fluxos de trabalho do GitHub Actions acessem AWS recursos com segurança sem expor informações confidenciais no código do seu repositório, crie segredos. Para criar os segredos em GitHub for`ROLE_TO_ASSUME`,, e `CodeGuruReviewArtifactBucketName``AWS_ACCOUNT_ID`, siga as instruções em [Criação de segredos para um repositório](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository) na documentação de GitHub Ações.A seguir, apresentamos mais informações sobre as variáveis:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps engenheiro | 
| Crie um token de acesso GitHub pessoal. | Para configurar uma forma segura de autenticar e interagir com seus fluxos de trabalho do GitHub Actions GitHub, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps engenheiro | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpar os recursos | Para limpar seu aplicativo AWS CDK Python, execute o seguinte comando:<pre>cdk destroy --all</pre> | DevOps engenheiro | 

## Solução de problemas
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Exibir o link para as descobertas do painel. | Não há como imprimir as descobertas durante o CI/CD pipeline. Em vez disso, esse padrão usa GitHub Ações como um método alternativo para manipular e exibir as descobertas. | 

## Recursos relacionados
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS recursos**
+ [AWS Kit de desenvolvimento em nuvem](https://aws.amazon.com/cdk/)
+ [ CodeGuru Documentação da Amazon](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [O que AWS Lambdaé](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub documentação**
+ [Configuring OpenID Connect in Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Ações](https://github.com/features/actions)
+ [Reusing workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [Triggering a workflow](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 

# Automatize a implantação de Cadeia de Suprimentos AWS data lakes em uma configuração de vários repositórios usando GitHub Actions, Artifactory e Terraform
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes"></a>

*Keshav Ganesh, Amazon Web Services*

## Resumo
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-summary"></a>

Esse padrão fornece uma abordagem automatizada para implantar e gerenciar lagos de Cadeia de Suprimentos AWS dados usando uma integração contínua de vários repositórios e uma implantação contínua (recursos). CI/CD) pipeline. It demonstrates two deployment methods: automated deployment using GitHub Actions workflows, or manual deployment using Terraform directly. Both approaches use Terraform for infrastructure as code (IaC), with the automated method adding GitHub Actions and JFrog Artifactory for enhanced CI/CD

A solução utiliza Cadeia de Suprimentos AWS o Amazon Simple Storage Service (Amazon S3) para estabelecer a infraestrutura do data lake, enquanto usa qualquer um dos métodos de implantação para automatizar a configuração e a criação de recursos. AWS Lambda Essa automação elimina as etapas de configuração manual e garante implantações consistentes em todos os ambientes. Além disso, Cadeia de Suprimentos AWS elimina a necessidade de uma profunda experiência em extração, transformação e carregamento (ETL) e pode fornecer informações e análises baseadas no Amazon Quick Sight.

Ao implementar esse padrão, as organizações podem reduzir o tempo de implantação, manter a infraestrutura como código e gerenciar os data lakes da cadeia de suprimentos por meio de um processo automatizado e controlado por versão. A abordagem de vários repositórios fornece controle de acesso refinado e oferece suporte à implantação independente de diferentes componentes. As equipes podem escolher o método de implantação mais adequado às ferramentas e aos processos existentes.

## Pré-requisitos e limitações
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs"></a>

**Pré-requisitos **

Certifique-se de que o seguinte esteja instalado em sua máquina local:
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versão 2
+ [GitHub CLI](https://docs.github.com/en/get-started/git-basics/set-up-git)
+ [Python v3.13](https://www.python.org/downloads/)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) v1.12 ou posterior

Certifique-se de que o seguinte esteja em vigor antes da implantação:
+ Um ativo Conta da AWS.
+ Uma [nuvem privada virtual (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) com duas [sub-redes privadas na área](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) de sua Conta da AWS escolha. Região da AWS 
+ Permissões suficientes para a função AWS Identity and Access Management (IAM) usada para implantação nos seguintes serviços:
  + Cadeia de Suprimentos AWS — O Full Access é o preferido para implantar seus componentes, como conjuntos de dados e fluxos de integração, além de acessá-los a partir do. Console de gerenciamento da AWS
  + Amazon CloudWatch Logs — Para criar e gerenciar grupos de CloudWatch registros.
  + Amazon Elastic Compute Cloud (Amazon EC2) — Para grupos de segurança do Amazon EC2 e endpoints do Amazon Virtual Private Cloud (Amazon VPC).
  + Amazon EventBridge — Para uso por Cadeia de Suprimentos AWS.
  + IAM — Para criar funções AWS Lambda de serviço.
  + AWS Key Management Service (AWS KMS) — Para acessar o AWS KMS keys usado para o bucket de artefatos do Amazon S3 e o bucket de armazenamento do Amazon S3. Cadeia de Suprimentos AWS 
  + AWS Lambda — Para criar as funções Lambda que implantam os Cadeia de Suprimentos AWS componentes.
  + Amazon S3 — Para acessar o bucket de artefatos do Amazon S3, o bucket de registro de acesso ao servidor e o bucket de armazenamento. Cadeia de Suprimentos AWS Se você estiver usando a implantação manual, as permissões para o bucket de artefatos do Amazon S3 Terraform também são necessárias.
  + Amazon VPC — Para criar e gerenciar uma VPC.

Se você preferir usar fluxos de trabalho do GitHub Actions para implantação, faça o seguinte:
+ Configure o [OpenID Connect (OIDC)](https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws#configuring-the-role-and-trust-policy) para a função do IAM com as permissões mencionadas anteriormente.
+ Crie uma função do IAM com permissões semelhantes para acessar Console de gerenciamento da AWS o. Para obter mais informações, consulte [Criar um papel para dar permissões a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) na documentação do IAM.

Se você preferir fazer uma implantação manual, faça o seguinte:
+ Crie um usuário do IAM para assumir a função do IAM com as permissões mencionadas anteriormente. Para obter mais informações, consulte [Criar um papel para dar permissões a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) na documentação do IAM.
+ [Assuma a função](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-role.html) em seu terminal local.

Se você preferir usar fluxos de trabalho do GitHub Actions para implantação, configure o seguinte:
+ Uma [conta JFrog Artifactory](https://jfrog.com/artifactory/?utm_source=google&utm_medium=cpc_search&utm_campaign=SearchDSKBrandAPACIN202506&utm_term=jfrog%20cloud&gads_network=g&utm_content=u-bin&gads_campaign_id=22674833884&gads_adgroup_id=184501797241&gads_extension_id=233003714635&gads_target_id=aud-312135645780:kwd-1598615735032&gads_matchtype=b&gad_source=1&gad_campaignid=22674833884&gbraid=0AAAAADqV85U5B37iapTR9IIFHBvydF5AQ&gclid=CjwKCAjwiY_GBhBEEiwAFaghvqdNV-odNLZXPHjT7NAwf8lA-QuMtg666hgvDW1oCJ4nn7wvf869_xoCW4IQAvD_BwE) para obter o nome do host, o nome de usuário de login e o token de acesso de login.
+ Uma [chave de JFrog projeto e um repositório](https://jfrog.com/help/r/jfrog-platform-administration-documentation/step-1-set-up-a-new-project) para armazenar artefatos.

**Limitações**
+ A Cadeia de Suprimentos AWS instância não oferece suporte a técnicas complexas de transformação de dados.
+ Cadeia de Suprimentos AWS é mais adequado para domínios da cadeia de suprimentos porque fornece análises e insights integrados. Para qualquer outro domínio, Cadeia de Suprimentos AWS pode ser usado como um armazenamento de dados como parte da arquitetura do data lake.
+ As funções Lambda usadas nessa solução talvez precisem ser aprimoradas para lidar com novas tentativas de API e gerenciamento de memória em uma implantação em escala de produção.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-architecture"></a>

Você pode implantar essa solução usando fluxos de trabalho automatizados de GitHub ações ou manualmente usando o Terraform.

**Implantação automatizada com GitHub ações**

O diagrama a seguir mostra a opção de implantação automatizada que usa fluxos de trabalho de GitHub ações. JFrog Artifactory é usado para gerenciamento de artefatos. Ele armazena informações e saídas de recursos para uso em uma implantação de vários repositórios.

![\[Opção de implantação automatizada que usa fluxos de trabalho de GitHub ações e. JFrog\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/d454a5c5-ed51-421c-a87f-ff74cfcb30be.png)


**Implantação manual com o Terraform**

O diagrama a seguir mostra a opção de implantação manual por meio do Terraform. Em vez de JFrog Artifactory, o Amazon S3 é usado para gerenciamento de artefatos.

![\[Opção de implantação manual usando o Terraform e o Amazon S3.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/1130e728-44d5-4ae7-9586-1e497f54352a.png)


**Fluxo de trabalho de implantação**

O diagrama mostra o seguinte fluxo de trabalho:

1. Implante conjuntos Cadeia de Suprimentos AWS de dados de serviços, infraestrutura e bancos de dados usando um dos seguintes métodos de implantação:
   + **Implantação automatizada** — usa fluxos de trabalho do GitHub Actions para orquestrar todas as etapas de implantação e usa o JFrog Artifactory para gerenciamento de artefatos.
   + **Implantação manual** — executa comandos do Terraform diretamente para cada etapa de implantação e usa o Amazon S3 para gerenciamento de artefatos.

1. Crie os AWS recursos de suporte necessários para a operação Cadeia de Suprimentos AWS do serviço:
   + Endpoints e grupos de segurança da Amazon VPC
   + AWS KMS keys
   + CloudWatch Grupos de registros

1. Crie e implante os seguintes recursos de infraestrutura:
   + Funções Lambda que gerenciam (criam, atualizam e excluem) a instância de Cadeia de Suprimentos AWS serviço, namespaces e conjuntos de dados.
   + Cadeia de Suprimentos AWS preparação do bucket Amazon S3 para ingestão de dados

1. Implante a função Lambda que gerencia os fluxos de integração entre o bucket de preparação e os conjuntos de dados. Cadeia de Suprimentos AWS Após a conclusão da implantação, as etapas restantes do fluxo de trabalho gerenciam a ingestão e a análise de dados.

1. Configure a ingestão de dados de origem no bucket Cadeia de Suprimentos AWS temporário do Amazon S3.

1. Depois que os dados são adicionados ao bucket Cadeia de Suprimentos AWS temporário do Amazon S3, o serviço aciona automaticamente o fluxo de integração para os conjuntos de dados. Cadeia de Suprimentos AWS 

1. Cadeia de Suprimentos AWS se integra ao Quick Sight Analytics para produzir painéis com base nos dados ingeridos.

## Ferramentas
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-tools"></a>

**Serviços da AWS**
+ O [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ajuda você a centralizar os registros de todos os seus sistemas e aplicativos, Serviços da AWS para que você possa monitorá-los e arquivá-los com segurança.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) oferece capacidade de computação escalável na Nuvem AWS. Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)ajuda você a gerenciar centralmente o acesso de login único (SSO) a todos os seus Contas da AWS aplicativos e à nuvem.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 Q](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) in Cadeia de Suprimentos AWS é um assistente interativo de IA generativa que ajuda você a operar sua cadeia de suprimentos com mais eficiência analisando os dados em seu Cadeia de Suprimentos AWS data lake.
+ O [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) é um serviço de business intelligence (BI) em escala de nuvem que ajuda você a visualizar, analisar e relatar dados em um único painel.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ [Cadeia de Suprimentos AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)é um aplicativo gerenciado baseado em nuvem que pode ser usado como armazenamento de dados em organizações para domínios da cadeia de suprimentos, que pode ser usado para gerar insights e realizar análises sobre os dados ingeridos.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. Um [endpoint Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) é um dispositivo virtual que ajuda você a conectar de forma privada sua VPC ao VPC compatível Serviços da AWS sem exigir um gateway de internet, dispositivo NAT, conexão VPN ou conexão. AWS Direct Connect 

**Outras ferramentas**
+ GitHub O [Actions](https://docs.github.com/en/actions) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.
+ [HashiCorp O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) que ajuda você a criar e gerenciar recursos na nuvem e no local.
+ JFrog O [Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/jfrog-artifactory) fornece end-to-end automação e gerenciamento de binários e artefatos por meio do processo de entrega de aplicativos.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral. Esse padrão usa Python para que o código da AWS função interaja com Cadeia de Suprimentos AWS

  .

## Práticas recomendadas
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-best-practices"></a>
+ Mantenha o maior nível de segurança possível ao implementar esse padrão. Conforme declarado nos [Pré-requisitos](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), certifique-se de que uma nuvem [privada virtual (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) com duas [sub-redes privadas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) esteja na área de sua escolha. Conta da AWS Região da AWS 
+ Use [chaves gerenciadas pelo AWS KMS cliente](https://docs.aws.amazon.com/kms/latest/cryptographic-details/basic-concepts.html) sempre que possível e conceda permissões de acesso limitadas a elas.
+ Para configurar funções do IAM com o mínimo de acesso necessário para a ingestão de dados desse padrão, consulte [Ingestão segura de dados dos sistemas de origem para o Amazon S3](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main?tab=readme-ov-file#secure-data-ingestion-from-source-systems-to-amazon-s3) no repositório desse padrão.

## Épicos
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-epics"></a>

### (Ambas as opções) Configurar a estação de trabalho local
<a name="both-options-set-up-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório correspondente a este padrão, execute o seguinte comando na estação de trabalho local:<pre>git clone https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment.git<br />cd ASC-Deployment</pre> | AWS DevOps | 
| (Opção automatizada) Verifique os pré-requisitos para implantação. | Certifique-se de que os [pré-requisitos](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) estejam preenchidos para a implantação automatizada. | Proprietário do App | 
| (Opção manual) Prepare-se para a implantação de Cadeia de Suprimentos AWS conjuntos de dados. | Para acessar o `terraform-deployment` diretório de`ASC-Datasets`, execute o seguinte comando:<pre>cd ASC-Datasets/terraform-deployment</pre>Para assumir a função ARN que foi criada nos [Pré-requisitos, execute](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) o seguinte comando:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Para configurar e exportar as variáveis de ambiente, execute os seguintes comandos:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Datasets dir name><br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export AWS_USER_ROLE=<Enter user role ARN for AWS Console access and deployment><br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | AWS DevOps | 
| (Opção manual) Prepare-se para gerenciar fluxos de Cadeia de Suprimentos AWS integração na implantação. | Para acessar o `terraform-deployment` diretório de`ASC-Integration-Flows`, execute o seguinte comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre>Para assumir a função ARN que foi criada anteriormente, execute o seguinte comando:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Para configurar e exportar as variáveis de ambiente, execute os seguintes comandos:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Integration Flows dir name><br />export ASC_DATASET_VARS_REPO=<Enter Current ASC Datasets dir name>  #Must be the same directory name used for ASC Datasets deployment<br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | Proprietário do App | 

### (Opção automatizada) Implantar Cadeia de Suprimentos AWS conjuntos de dados usando fluxos de trabalho do GitHub Actions
<a name="automated-option-deploy-supplychain-datasets-using-github-actions-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o `ASC-Datasets` diretório. | Para copiar o `ASC-Datasets` diretório para um novo local, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configure o `ASC-Datasets` diretório. | Para configurar `ASC-Datasets` como um repositório independente em sua organização, execute os seguintes comandos:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Datasets standalone repository"<br />git remote add origin <INSERT_ASC_DATASETS_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configure o nome da ramificação no arquivo de fluxo de trabalho .github. | Configure o nome da ramificação no arquivo do fluxo de trabalho de [implantação](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/asc-datasets.yml), conforme mostrado no exemplo a seguir:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Proprietário do App | 
| Configure GitHub ambientes e configure os valores do ambiente. | Para configurar GitHub ambientes em sua GitHub organização, use as instruções em [Configurar GitHub ambientes](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-github-environments) no repositório desse padrão.Para configurar [os valores do ambiente](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) nos arquivos do fluxo de trabalho, use as instruções em [Configurar valores do ambiente nos arquivos do fluxo](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) de trabalho no repositório desse padrão. | Proprietário do App | 
| Acione o fluxo de trabalho. | Para enviar suas alterações para sua GitHub organização e acionar o fluxo de trabalho de implantação, execute o seguinte comando:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opção automatizada) Implemente fluxos de Cadeia de Suprimentos AWS integração usando fluxos de trabalho de GitHub ações
<a name="automated-option-deploy-supplychain-integration-flows-using-github-actions-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o `ASC-Integration-Flows` diretório. | Para copiar o `ASC-Integration-Flows` diretório para um novo local, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Configure o `ASC-Integration-Flows` diretório. | Para configurar o `ASC-Integration-Flows` diretório como um repositório independente em sua organização, execute os seguintes comandos:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Integration-Flows standalone repository"<br />git remote add origin <INSERT_ASC_Integration_Flows_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Configure o nome da ramificação no arquivo de fluxo de trabalho .github. | Configure o nome da ramificação no arquivo do fluxo de trabalho de [implantação](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/asc-integration-flows.yml), conforme mostrado no exemplo a seguir:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Proprietário do App | 
| Configure GitHub ambientes e configure os valores do ambiente. | Para configurar GitHub ambientes em sua GitHub organização, use as instruções em [Configurar GitHub ambientes](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) no repositório desse padrão.Para configurar [os valores do ambiente](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) nos arquivos do fluxo de trabalho, use as instruções em [Configurar valores do ambiente nos arquivos do fluxo](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-environment-values-in-the-workflow-files) de trabalho no repositório desse padrão. | Proprietário do App | 
| Acione o fluxo de trabalho. | Para enviar suas alterações para sua GitHub organização e acionar o fluxo de trabalho de implantação, execute o seguinte comando:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opção manual) Implantar Cadeia de Suprimentos AWS conjuntos de dados usando o Terraform
<a name="manual-option-deploy-supplychain-datasets-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Navegue até o diretório `terraform-deployment `. | Para acessar o `terraform-deployment` diretório de`ASC-Datasets`, execute o seguinte comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configure o bucket Amazon S3 do estado do Terraform. | Para configurar o bucket Amazon S3 do estado do Terraform, use o seguinte script:<pre># Setup terraform bucket<br />chmod +x ../scripts/setup-terraform.sh<br />../scripts/setup-terraform.sh</pre> | AWS DevOps | 
| Configure o bucket Amazon S3 de artefatos do Terraform. | Para configurar o bucket Amazon S3 de artefatos do Terraform, use o seguinte script:<pre># Setup terraform artifacts bucket<br />chmod +x ../scripts/setup-terraform-artifacts-bucket.sh<br />../scripts/setup-terraform-artifacts-bucket.sh</pre> | AWS DevOps | 
| Configure o back-end e a configuração dos provedores do Terraform. | Para configurar o back-end e os provedores do Terraform, use o seguinte script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Gere um plano de implantação. | Para gerar um plano de implantação, execute os seguintes comandos:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implante as configurações. | Para implantar as configurações, execute o seguinte comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Atualize outras configurações e armazene saídas. | Para atualizar as AWS KMS principais políticas e armazenar as saídas das configurações aplicadas no bucket Amazon S3 de artefatos do Terraform, execute os seguintes comandos:<pre># Update AWS Supply Chain KMS Key policy with the service's requirements<br />chmod +x ../scripts/update-asc-kms-policy.sh<br />../scripts/update-asc-kms-policy.sh<br /></pre><pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy.sh<br />../scripts/update-kms-policy.sh<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Opção manual) Implemente fluxos Cadeia de Suprimentos AWS de integração de serviços usando o Terraform
<a name="manual-option-deploy-supplychain-service-integration-flows-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Navegue até o diretório `terraform-deployment`. | Para acessar o `terraform-deployment` diretório de`ASC-Integration-Flows`, execute o seguinte comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configure o back-end e a configuração dos provedores do Terraform. | Para definir as configurações do back-end e do provedor do Terraform, use o seguinte script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Gere um plano de implantação. | Para gerar um plano de implantação, execute os comandos a seguir. Esses comandos inicializam seu ambiente Terraform, mesclam variáveis de configuração `ASC-Datasets` com suas configurações existentes do Terraform e geram um plano de implantação.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Implante as configurações. | Para implantar as configurações, execute o seguinte comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Atualize outras configurações. | Para atualizar as AWS KMS principais políticas e armazenar as saídas das configurações aplicadas no bucket Amazon S3 de artefatos do Terraform, execute os seguintes comandos:<pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy-through-s3.sh<br />../scripts/update-kms-policy-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Ambas as opções) Ingerir dados
<a name="both-options-ingest-data"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça upload de arquivos CSV de amostra. | Para fazer upload de arquivos CSV de amostra para os conjuntos de dados, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Engenheiro de dados | 

### (Ambas as opções) Configurar o Cadeia de Suprimentos AWS acesso
<a name="both-options-set-up-supplychain-access"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o Cadeia de Suprimentos AWS acesso. | Para configurar o Cadeia de Suprimentos AWS acesso a partir do Console de gerenciamento da AWS, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Proprietário do App | 

### (Opção automatizada) Limpe todos os recursos usando fluxos de trabalho de GitHub ações
<a name="automated-option-clean-up-all-resources-using-github-actions-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Acione o fluxo de trabalho de destruição para recursos de fluxos de integração. | Acione o [fluxo de trabalho de destruição](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/destroy-workflow.yml) `ASC-Integration-Flows` de sua filial de implantação em sua GitHub organização. | AWS DevOps | 
| Acione o fluxo de trabalho de destruição para recursos de conjuntos de dados. | Acione o [fluxo de trabalho de destruição](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/destroy-workflow.yml) `ASC-Datasets` de sua filial de implantação em sua GitHub organização. | AWS DevOps | 

### (Opção manual) Limpe os recursos dos fluxos de Cadeia de Suprimentos AWS integração usando o Terraform
<a name="manual-option-clean-up-resources-of-supplychain-integration-flows-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Navegue até o diretório `terraform-deployment`. | Para acessar o `terraform-deployment` diretório de`ASC-Integration-Flows`, execute o seguinte comando:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Configure o back-end e a configuração dos provedores do Terraform. | Para configurar o back-end e os provedores do Terraform, use o seguinte script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Gere um plano de destruição da infraestrutura. | Para se preparar para a destruição controlada de sua AWS infraestrutura gerando um plano detalhado de desmontagem, execute os comandos a seguir. O processo inicializa o Terraform, incorpora configurações do Cadeia de Suprimentos AWS conjunto de dados e cria um plano de destruição que você pode revisar antes de executar.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Execute o plano de destruição da infraestrutura. | Para executar a destruição planejada de sua infraestrutura, execute o seguinte comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Remova as saídas do Terraform do bucket Amazon S3. | Para remover o arquivo de saída que foi carregado durante a implantação do`ASC-Integration-Flows`, execute o seguinte comando:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

### (Opção manual) Limpe os recursos dos conjuntos de dados de Cadeia de Suprimentos AWS serviço usando o Terraform
<a name="manual-option-clean-up-resources-of-supplychain-service-datasets-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Navegue até o diretório `terraform-deployment`. | Para acessar o `terraform-deployment` diretório de`ASC-Datasets`, execute o seguinte comando:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Configure o back-end e a configuração dos provedores do Terraform. | Para configurar o back-end e os provedores do Terraform, use o seguinte script:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Gere um plano de destruição da infraestrutura. | Para criar um plano para destruir recursos do Cadeia de Suprimentos AWS conjunto de dados, execute os seguintes comandos:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Esvazie os buckets do Amazon S3. | Para esvaziar todos os buckets do Amazon S3 (exceto o bucket de registro de acesso ao servidor, que está configurado para`force-destroy`), use o seguinte script:<pre># Delete S3 buckets excluding server access logging bucket<br />chmod +x ../scripts/empty-s3-buckets.sh<br />../scripts/empty-s3-buckets.sh tfplan.out</pre> | AWS DevOps | 
| Execute o plano de destruição da infraestrutura. | Para executar a destruição planejada da sua infraestrutura de Cadeia de Suprimentos AWS conjunto de dados usando o plano gerado, execute o seguinte comando:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Remova as saídas do Terraform do bucket de artefatos do Amazon S3 Terraform. | Para concluir o processo de limpeza, remova o arquivo de saída que foi carregado durante a implantação do `ASC-Datasets` executando o seguinte comando:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

## Solução de problemas
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Um Cadeia de Suprimentos AWS conjunto de dados ou fluxo de integração não foi implantado corretamente devido a erros Cadeia de Suprimentos AWS internos ou permissões insuficientes do IAM para a função de serviço. | Primeiro, limpe todos os recursos. Em seguida, reimplante os recursos do Cadeia de Suprimentos AWS [conjunto de dados e, em seguida, reimplante os recursos](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/README.md) do fluxo de Cadeia de Suprimentos AWS [integração](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/README.md). | 
| O fluxo de Cadeia de Suprimentos AWS integração não busca os novos arquivos de dados enviados para os Cadeia de Suprimentos AWS conjuntos de dados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | 

## Recursos relacionados
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-resources"></a>

**AWS documentação**
+ [Cadeia de Suprimentos AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)

**Outros recursos**
+ [Entendendo os fluxos de trabalho do GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions) (GitHub documentação)

## Mais informações
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-additional"></a>

Essa solução pode ser replicada para mais conjuntos de dados e pode ser consultada para análises adicionais, por meio de painéis pré-criados fornecidos ou da integração Cadeia de Suprimentos AWS personalizada com o Amazon Quick Sight. Além disso, você pode usar o Amazon Q para fazer perguntas relacionadas à sua Cadeia de Suprimentos AWS instância.

**Analise dados com o Cadeia de Suprimentos AWS Analytics**

Para obter instruções sobre como configurar o Cadeia de Suprimentos AWS Analytics, consulte [Como configurar o Cadeia de Suprimentos AWS Analytics](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/setting_analytics.html) na Cadeia de Suprimentos AWS documentação.

Esse padrão demonstrou a criação dos conjuntos de dados **Calendar** e **Outbound\$1Order\$1Line**. Para criar uma análise que usa esses conjuntos de dados, use as seguintes etapas:

1. Para analisar os conjuntos de dados, use o painel de análise de **sazonalidade.** Para adicionar o painel, siga as etapas em [Painéis pré-criados](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/prebuilt_dashboards.html) na Cadeia de Suprimentos AWS documentação.

1. Escolha o painel para ver sua análise com base em arquivos CSV de amostra para dados do calendário e dados da linha de pedido de saída.

O painel fornece informações sobre a demanda ao longo dos anos com base nos dados ingeridos pelos conjuntos de dados. Você pode especificar ainda mais o ProductID, o CustomerID, os anos e outros parâmetros para análise.

**Use o Amazon Q para fazer perguntas relacionadas à sua Cadeia de Suprimentos AWS instância**

[O Amazon Q in Cadeia de Suprimentos AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) é um assistente interativo de IA generativa que ajuda você a operar sua cadeia de suprimentos com mais eficiência. O Amazon Q pode fazer o seguinte:
+ Analise os dados em seu Cadeia de Suprimentos AWS data lake.
+ Forneça informações operacionais e financeiras.
+ Responda às suas perguntas imediatas sobre a cadeia de suprimentos.

Para obter mais informações sobre o uso do Amazon Q, consulte [Habilitando o Amazon Q in Cadeia de Suprimentos AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/enabling_QinASC.html) e [Usando o Amazon Q Cadeia de Suprimentos AWS in](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/using_QinASC.html) na Cadeia de Suprimentos AWS documentação.

# Automatize a avaliação de recursos da AWS
<a name="automate-aws-resource-assessment"></a>

*Naveen Suthar, Arun Bagal, Manish Garg e Sandeep Gawande, Amazon Web Services*

## Resumo
<a name="automate-aws-resource-assessment-summary"></a>

Esse padrão descreve uma abordagem automatizada para configurar recursos de avaliação de recursos usando o [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html). Ao usar esse padrão, as equipes de operações coletam detalhes de auditoria de recursos de forma automatizada e visualizam os detalhes de todos os recursos implantados em uma conta da AWS em um único painel. Isso é útil nos seguintes casos de uso:
+ Identificação de ferramentas de infraestrutura como código (IaC) e isolamento de recursos criados por diferentes soluções de IaC, como [HashiCorp Terraform](https://www.terraform.io/), [AWS CloudFormation, AWS CDK](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) [e AWS Command Line Interface (AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) CLI)
+ Buscando informações de auditoria de recursos

Essa solução também ajudará a equipe de liderança a obter informações sobre os recursos e as atividades em uma conta da AWS a partir de um único painel. 


| 
| 
| Observação: o [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) é um serviço pago. Antes de executá-lo para analisar dados e criar um painel, revise os [preços do Amazon Quick Sight](https://aws.amazon.com/quicksight/pricing/). | 
| --- |

## Pré-requisitos e limitações
<a name="automate-aws-resource-assessment-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Funções e permissões do AWS Identity and Access Management (IAM) com acesso a recursos de provisionamento
+ [Uma [conta Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) criada com acesso ao [Amazon Simple Storage Service (Amazon S3) e ao Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ AWS CDK versão 2.55.1 ou superior instalado. 
+ [Python](https://www.python.org/downloads/release/python-390/) versão 3.9 ou superior instalado.

**Limitações**
+ Essa solução é implantada em uma única conta da AWS.
+ A solução não rastreará os eventos que aconteceram antes de sua implantação, a menos que a AWS já CloudTrail estivesse configurada e armazenando dados em um bucket S3.

**Versões do produto**
+ AWS CDK versão 2.55.1 ou superior
+ Python, versão 3.9 ou superior.

## Arquitetura
<a name="automate-aws-resource-assessment-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon Athena
+ AWS CloudTrail
+ AWS Glue
+ AWS Lambda
+ Amazon Quick Sight
+ Amazon S3

**Arquitetura de destino**

O código do AWS CDK implantará todos os recursos necessários para configurar recursos de avaliação de recursos em uma conta da AWS. O diagrama a seguir mostra o processo de envio de CloudTrail registros para o AWS Glue, o Amazon Athena e o Quick Sight.

![\[Avaliação de recursos da AWS com AWS Glue, Amazon Athena e Amazon QuickSight em um processo de seis etapas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a504774e-db7a-4c36-a22c-ce56d252fb58/images/8f2b549d-33a8-4cbf-86fd-33244716b668.png)


1. CloudTrail envia registros para um bucket do S3 para armazenamento.

1. Uma notificação de evento invoca uma função do Lambda que processa os registros e gera dados filtrados.

1. Os dados filtrados são armazenados em outro bucket do S3.

1. Um crawler do AWS Glue é configurado nos dados filtrados que estão no bucket do S3 para criar um esquema na tabela do catálogo de dados do AWS Glue.

1. Os dados filtrados estão prontos para serem consultados pelo Amazon Athena.

1. Os dados consultados são acessados pelo Quick Sight para visualização.

**Automação e escala**
+ Essa solução pode ser escalada de uma conta da AWS para várias contas da AWS se houver uma trilha para toda a organização no CloudTrail AWS Organizations. Ao implantar CloudTrail no nível organizacional, você também pode usar essa solução para obter detalhes de auditoria de recursos para todos os recursos necessários.
+ Esse padrão usa recursos com tecnologia sem servidor da AWS para implantar a solução.

## Ferramentas
<a name="automate-aws-resource-assessment-tools"></a>

**Serviços da AWS**
+ O [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) é um serviço de consultas interativas que facilita a análise de dados diretamente no Amazon S3 usando SQL padrão.
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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.
+  CloudTrailA [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) ajuda você a auditar a governança, a conformidade e o risco operacional da sua conta da AWS.
+ O [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) é um serviço de extração, transformação e carregamento (ETL) totalmente gerenciado. Ele ajuda você a categorizar de forma confiável, limpar, enriquecer e mover dados de forma confiável entre armazenamento de dados e fluxos de dados. Esse padrão usa um crawler do AWS Glue e uma tabela do Catálogo de Dados do AWS Glue.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) é um serviço de inteligência de negócios (BI) em escala de nuvem que ajuda você a visualizar, analisar e relatar seus dados em um único painel.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é 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 GitHub [infrastructure-assessment-iac-automation](https://github.com/aws-samples/infrastructure-assessment-iac-automation)repositório.

O repositório de código contém os seguintes arquivos e pastas:
+ Pasta `lib`: o AWS CDK estrutura arquivos Python usados para criar recursos da AWS
+ `src/lambda_code`: o código Python que é executado na função do Lambda
+ `requirements.txt`: a lista de todas as dependências do Python que devem ser instaladas
+ `cdk.json`: o arquivo de entrada para fornecer os valores necessários para gerar recursos

## Práticas recomendadas
<a name="automate-aws-resource-assessment-best-practices"></a>

Configure o monitoramento e o alerta para a função do Lambda. Para obter mais informações, consulte [Monitorar e solucionar problemas de funções do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para obter as melhores práticas gerais ao trabalhar com funções do Lambda, consulte a [documentação da AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Épicos
<a name="automate-aws-resource-assessment-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório na sua máquina local. | Para clonar o repositório, execute o comando `git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git`. | AWS DevOps, DevOps engenheiro | 
| Configurar o ambiente virtual Python e instalar as dependências necessárias. | Para ativar o ambiente virtual do Python, execute os comandos a seguir.<pre>cd infrastructure-assessment-iac-automation<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Execute o comando `pip install -r requirements.txt` para configurar as dependências necessárias. | AWS DevOps, DevOps engenheiro | 
| Configure o ambiente do AWS CDK e sintetize o código do AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps engenheiro | 

### Configurar credenciais da AWS na sua máquina local
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exporte variáveis para a conta e a região em que a pilha será implantada. | Para fornecer credenciais da AWS para o AWS CDK usando variáveis de ambiente, execute os seguintes comandos.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | AWS DevOps, DevOps engenheiro | 
| Configurar o perfil da AWS CLI. | Para configurar o perfil da AWS CLI para a conta, siga as instruções na [documentação da AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | AWS DevOps, DevOps engenheiro | 

### Configurar e implantar a ferramenta de avaliação de recursos
<a name="configure-and-deploy-the-resource-assessment-tool"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante recursos na conta. | Para implantar recursos na conta da AWS usando o AWS CDK, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps | 
| Execute o AWS Glue Crawler e crie a tabela do Data Catalog. | Um [AWS Glue Crawler](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) é usado para manter o esquema de dados dinâmico. A solução cria e atualiza partições na [tabela do catálogo de dados do AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) executando o rastreador periodicamente, conforme definido pelo programador do AWS Glue Crawler. Depois que os dados estiverem disponíveis no bucket S3 de saída, use as etapas a seguir para executar o crawler AWS Glue e criar o esquema da tabela do catálogo de dados para teste:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)O código do AWS CDK configura o crawler do AWS Glue para ser executado em um horário específico, mas você também pode executá-lo sob demanda. | AWS DevOps, DevOps engenheiro | 
| Implante a construção Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps engenheiro | 
| Crie o painel do Quick Sight. | Para criar o exemplo de painel e análise do Quick Sight, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Para obter mais informações, consulte [Iniciando uma análise no Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/creating-an-analysis.html) e [Tipos visuais no Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-visual-types.html). | AWS DevOps, DevOps engenheiro | 

### Limpe todos os recursos da AWS na solução
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova os recursos da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps engenheiro | 

### Configure recursos adicionais além da automação da ferramenta de avaliação de recursos da AWS
<a name="set-up-additional-features-on-top-of-the-aws-resource-assessment-tool-automation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Monitore e limpe os recursos criados manualmente. | (Opcional) Se sua organização tem requisitos de conformidade para criar recursos usando ferramentas de IaC, você pode alcançar a conformidade usando a automação da ferramenta de avaliação de recursos da AWS para buscar recursos provisionados manualmente. Você também pode usar a ferramenta para importar os recursos para uma ferramenta IaC ou para recriá-los. Execute as seguintes tarefas de alto nível para monitorar recursos provisionados manualmente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps engenheiro | 

## Solução de problemas
<a name="automate-aws-resource-assessment-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O AWS CDK retorna erros. | Para obter ajuda com problemas do AWS CDK, consulte [Solução de problemas comuns do AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 

## Recursos relacionados
<a name="automate-aws-resource-assessment-resources"></a>
+ [Criar funções do Lambda com Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Comece a usar o AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Trabalhando com o AWS CDK no Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Criando uma trilha CloudTrail de toras](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Comece a usar o Amazon Quick Sight](https://aws.amazon.com/quicksight/getting-started/)

## Mais informações
<a name="automate-aws-resource-assessment-additional"></a>

**Várias contas**

Para configurar a credencial da AWS CLI para várias contas, use os perfis da AWS. Para obter mais informações, consulte a seção *Configurar vários perfis* em [Configurar a AWS CLI](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/).

**Comandos do AWS CDK**

Ao trabalhar com o AWS CDK, lembre-se dos seguintes comandos úteis:
+ Lista todas as pilhas no aplicativo

  ```
  cdk ls
  ```
+ Emite o modelo sintetizado da AWS CloudFormation 

  ```
  cdk synth
  ```
+ Implanta a pilha na sua conta e região padrão da AWS

  ```
  cdk deploy
  ```
+ Compara a pilha implantada com o estado atual

  ```
  cdk diff
  ```
+ Abre a documentação do AWS CDK

  ```
  cdk docs
  ```

# Instale sistemas SAP automaticamente usando ferramentas de código aberto
<a name="install-sap-systems-automatically-by-using-open-source-tools"></a>

*Guilherme Sesterheim, Amazon Web Services*

## Resumo
<a name="install-sap-systems-automatically-by-using-open-source-tools-summary"></a>

Esse padrão mostra como automatizar a instalação de sistemas SAP usando ferramentas de código aberto para criar os seguintes recursos:
+ Um banco de dados SAP S/4HANA 1909
+ Uma instância do SAP ABAP Central Services (ASCS)
+ Uma instância do Servidor de aplicações principal (PAS)

HashiCorp O Terraform cria a infraestrutura do sistema SAP e o Ansible configura o sistema operacional (OS) e instala os aplicativos SAP. O Jenkins executa a instalação.

Essa configuração transforma a instalação de sistemas SAP em um processo repetível, o que pode ajudar a aumentar a eficiência e a qualidade da implantação.

**nota**  
O código de exemplo fornecido neste padrão funciona tanto para sistemas de alta disponibilidade (HA, na sigla em inglês) quanto para sistemas que não contam com HA.

## Pré-requisitos e limitações
<a name="install-sap-systems-automatically-by-using-open-source-tools-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um bucket do Amazon Simple Storage Service (Amazon S3) que contém todos os seus arquivos de mídia do SAP.
+ Uma entidade principal do AWS Identity and Access Management (IAM) com uma [chave de acesso e uma chave secreta](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) e que tem as seguintes permissões:
  + **Permissões somente leitura:** Amazon Route 53, AWS Key Management Service (AWS KMS)
  + **Permissões de leitura e gravação:** Amazon S3, Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic File System (Amazon EFS), IAM, Amazon, Amazon CloudWatch DynamoDB
+ Uma [zona hospedada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) do Route 53
+ Uma assinatura do [Red Hat Enterprise Linux for SAP com HA e Update Services 8.2](https://aws.amazon.com/marketplace/pp/prodview-5grz5a5thx7c2) Imagem de máquina da Amazon (AMI) no Amazon Marketplace
+ Uma [chave gerenciada pelo cliente do AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-keys)
+ Um [par de chaves do Secure Shell (SSH)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
+ **Um [grupo EC2 de segurança da Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) que permite a conexão SSH na porta 22 a partir do nome do host em que você instala o Jenkins (o nome do host provavelmente é localhost)**
+ [Vagrant](https://www.vagrantup.com/) por HashiCorp instalado e configurado
+ [VirtualBox](https://www.virtualbox.org/)instalado e configurado pela Oracle
+ Familiaridade com Git, Terraform, Ansible e Jenkins

**Limitações**
+ Somente o SAP S/4HANA 1909 é totalmente testado para esse cenário específico. O exemplo de código Ansible nesse padrão requer modificação se você usar outra versão do SAP HANA.
+ O procedimento de exemplo nesse padrão funciona para sistemas operacionais Mac OS e Linux. Alguns dos comandos podem ser executados somente em terminais baseados em UNIX. No entanto, você pode obter um resultado semelhante usando comandos diferentes e um sistema operacional Windows.

**Versões do produto**
+ SAP S/4HANA 1909
+ Red Hat Enterprise Linux (RHEL) versão 8.2 ou superior

## Arquitetura
<a name="install-sap-systems-automatically-by-using-open-source-tools-architecture"></a>

O diagrama a seguir mostra um exemplo de fluxo de trabalho que usa ferramentas de código aberto para automatizar a instalação de sistemas SAP em uma conta da AWS:

![\[O fluxo de trabalho de exemplo usa ferramentas de código aberto para automatizar a instalação de sistemas SAP em uma conta da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/aaf11dac-38cc-4e89-be86-51d4409cf238/images/d7902f9d-f1be-461f-b69b-cf3c663c8f2f.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O Jenkins coordena a execução da instalação do sistema SAP executando o código do Terraform e do Ansible.

1. O código do Terraform cria a infraestrutura do sistema SAP.

1. O código Ansible configura o sistema operacional e instala aplicativos SAP.

1. Um banco de dados SAP S/4HANA 1909, uma instância ASCS e uma instância PAS que incluem todos os pré-requisitos definidos são instalados em uma instância da Amazon. EC2 

**nota**  
A configuração de exemplo neste padrão cria um bucket do Amazon S3 automaticamente em sua conta da AWS para armazenar o arquivo de estado do Terraform.

**Pilha de tecnologia**
+ Terraform
+ Ansible
+ Jenkins
+ Um banco de dados SAP S/4HANA 1909
+ Uma instância do SAP ASCS
+ Uma instância do SAP PAS
+ Amazon EC2 

## Ferramentas
<a name="install-sap-systems-automatically-by-using-open-source-tools-tools"></a>

**Serviços da AWS**
+ [A Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) fornece capacidade de computação escalável na Nuvem AWS. Você pode iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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 Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ A [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é um aplicativo de interface de linha de comando que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.
+ O [Ansible](https://www.ansible.com/) é uma ferramenta de código aberto de configuração como código (CaC) que ajuda a automatizar aplicativos, configurações e infraestrutura de TI.
+ [Jenkins](https://www.jenkins.io/): é um servidor de automação de código aberto que permite aos desenvolvedores construir, testar e implantar seu software.

**Código **

O código desse padrão está disponível no repositório GitHub [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible).

## Épicos
<a name="install-sap-systems-automatically-by-using-open-source-tools-epics"></a>

### Configurar os pré-requisitos
<a name="configure-the-prerequisites"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione seus arquivos de mídia SAP a um bucket do Amazon S3. | [Crie um bucket do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) que contenha todos os arquivos de mídia do SAP.Certifique-se de seguir a hierarquia de pastas do AWS Launch Wizard para **S/4HANA** conforme apresentado na [documentação do Launch Wizard](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap-software-install-details.html). | Administrador de nuvem | 
| Instalar VirtualBox. | Instale e configure [VirtualBox](https://www.virtualbox.org/)pela Oracle. | DevOps engenheiro | 
| Instale o Vagrant. | Instale e configure o [Vagrant by.](https://www.vagrantup.com/) HashiCorp | DevOps engenheiro | 
| Configure sua conta da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | AWS geral | 

### Compile e execute a instalação do SAP
<a name="build-and-run-your-sap-installation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de código de. GitHub | Clone o repositório [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible) em. GitHub | DevOps engenheiro | 
| Inicie o serviço do Jenkins. | Abra o terminal do Linux. Em seguida, navegue até a pasta local que contém a pasta do repositório de código clonado e execute o seguinte comando:<pre>sudo vagrant up</pre>O tempo de inicialização do Jenkins é de aproximadamente 20 minutos. O comando retorna uma mensagem de **serviço ativo e em execução** quando bem-sucedido. | DevOps engenheiro | 
| Abra o Jenkins em um navegador da Web e faça login. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | DevOps engenheiro | 
| Configure os parâmetros de instalação do sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)É possível configurar os outros parâmetros não obrigatórios conforme necessário, com base no seu caso de uso. Por exemplo, você pode alterar o ID do sistema SAP (SID) das instâncias, a senha padrão, os nomes e as tags do seu sistema SAP. Todas as variáveis obrigatórias têm **(Obrigatório)** no início de seus nomes. | Administrador de sistemas e DevOps engenheiro da AWS | 
| Execute a instalação do sistema SAP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Para obter informações sobre as etapas do pipeline, consulte a seção **Entendendo as etapas do pipeline** de [Automatização da instalação do SAP com ferramentas de código aberto](https://aws.amazon.com/blogs/awsforsap/automating-sap-installation-with-open-source-tools/) no blog da AWS.Se ocorrer um erro, posicione o cursor sobre a caixa de erro vermelha que aparecer e selecione **Logs**. Os logs da etapa do pipeline que apresentou um erro são exibidos. A maioria dos erros ocorre devido a configurações de parâmetros incorretas. | DevOps engenheiro, administrador de sistemas da AWS | 

## Recursos relacionados
<a name="install-sap-systems-automatically-by-using-open-source-tools-resources"></a>
+ [DevOps para SAP — Instalação do SAP: de 2 meses a 2 horas](https://videos.itrevolution.com/watch/707351918/) (Biblioteca de vídeos do DevOps Enterprise Summit)

# Automatize o portfólio e a implantação de produtos do AWS Service Catalog usando o AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva e RAJNEESH TYAGI, Amazon Web Services*

## Resumo
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

O AWS Service Catalog ajuda você a gerenciar centralmente catálogos de serviços ou *produtos* de TI aprovados para uso no ambiente da AWS da sua organização. Uma coleção de produtos é chamada de *portfólio*, e um portfólio também contém informações de configuração. Com o AWS Service Catalog, você pode criar um portfólio personalizado para cada tipo de usuário em sua organização e, então, conceder acesso de modo seletivo ao portfólio adequado. Esses usuários podem então implantar rapidamente qualquer produto de que precisem dentro do portfólio.

Se você tiver uma infraestrutura de rede complexa, como arquiteturas multirregião de várias contas, é recomendável criar e gerenciar portfólios do Service Catalog em uma única conta central. Esse padrão descreve como usar o AWS Cloud Development Kit (AWS CDK) para automatizar a criação de portfólios do Service Catalog em uma conta central, conceder aos usuários finais acesso a eles e, opcionalmente, provisionar produtos em uma ou mais contas de destino da AWS. Essa ready-to-use solução cria os portfólios do Service Catalog na conta de origem. Opcionalmente, também provisiona produtos em contas de destino usando CloudFormation pilhas da AWS e ajuda você a configurar TagOptions os produtos:
+ **AWS CloudFormation StackSets** — Você pode usar StackSets para lançar produtos do Service Catalog em várias regiões e contas da AWS. Nessa solução, você tem a opção de provisionar produtos automaticamente ao implantar essa solução. Para obter mais informações, consulte Como [usar a AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (documentação do Service Catalog) e [StackSets conceitos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentação).
+ **TagOption biblioteca** — você pode gerenciar tags em produtos provisionados usando TagOption a biblioteca. A *TagOption*é um par de valores-chave gerenciado no AWS Service Catalog. Não é uma tag da AWS, mas serve como um modelo para criar uma tag da AWS com base na TagOption. Para obter mais informações, consulte a [TagOption biblioteca](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (documentação do Service Catalog).

## Pré-requisitos e limitações
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da AWS que você deseja usar como a conta de origem para administrar os portfólios do Service Catalog.
+ Se você estiver usando essa solução para provisionar produtos em uma ou mais contas de destino, a conta de destino já deverá existir e estar ativa.
+ Permissões do AWS Identity and Access Management (IAM) para acessar o AWS Service Catalog, o AWS CloudFormation e o AWS IAM.

**Versões do produto**
+ AWS CDK versão 2.27.0

## Arquitetura
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Pilha de tecnologias de destino**
+ Portfólios do Service Catalog em uma conta centralizada da AWS
+ Produtos do Service Catalog implantados na conta de destino

**Arquitetura de destino**

![\[O AWS CDK cria portfólios do Service Catalog e fornece produtos na conta de destino.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. Na conta do portfólio (ou *origem*), você atualiza o arquivo **config.json** com a conta da AWS, a região da AWS, o perfil do IAM, o portfólio e as informações do produto para seu caso de uso.

1. Você implanta o aplicativo AWS CDK.

1. O aplicativo AWS CDK assume o perfil de implantação do IAM e cria os portfólios e produtos do Service Catalog definidos no arquivo **config.json**.

   Se você configurou StackSets para implantar produtos em uma conta de destino, o processo continua. Se você não configurou StackSets para provisionar nenhum produto, o processo está concluído.

1. **O aplicativo AWS CDK assume a função de **StackSet administrador** e implanta o conjunto de CloudFormation pilhas da AWS que você definiu no arquivo config.json.**

1. Na conta-alvo, StackSets assume a função de **StackSet execução** e provisiona os produtos.

## Ferramentas
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+ [O AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) é um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu aplicativo AWS CDK.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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 Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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 Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) ajuda você a gerenciar de modo centralizado os catálogos de serviços de TI aprovados para a AWS. Os usuários finais podem implantar rapidamente somente os serviços de TI aprovados de que precisam, seguindo as restrições definidas pela organização.

**Repositório de código**

O código desse padrão está disponível em GitHub, no [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)repositório. O repositório de código contém os seguintes arquivos e pastas:
+ **cdk-sevicecatalog-app**— Essa pasta contém o aplicativo AWS CDK para essa solução.
+ **config** — Essa pasta contém o arquivo **config.json** e o CloudFormation modelo para implantar os produtos no portfólio do Service Catalog.
+ **config/config.json**: esse arquivo contém todas as informações de configuração. Você atualiza esse arquivo para personalizar essa solução para seu caso de uso.
+ **config/templates** — Essa pasta contém os CloudFormation modelos dos produtos do Service Center.
+ **setup.sh**: esse script implanta a solução.
+ **uninstall.sh**: esse script exclui a pilha e todos os recursos da AWS criados ao implantar essa solução.

Para usar o código de amostra, siga as instruções na seção [Épicos](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics).

## Práticas recomendadas
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ As funções do IAM usadas para implantar essa solução devem seguir o [princípio do privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentação do IAM).
+ Siga as [melhores práticas para desenvolver aplicativos em nuvem com o AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (postagem no blog da AWS).
+ Siga as [ CloudFormation melhores práticas da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation documentação).

## Épicos
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o AWS CDK Toolkit. | Verifique se você tem o AWS CDK Toolkit instalado. Digite o comando a seguir para confirmar se ele está instalado e verificar a versão. <pre>cdk --version</pre>Se o AWS CDK Toolkit ainda não estiver instalado, insira o comando a seguir para instalá-lo.<pre>npm install -g aws-cdk@2.27.0</pre>Se a versão do AWS CDK Toolkit for anterior à 2.27.0, digite o comando a seguir para atualizá-la para a versão 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps engenheiro | 
| Clonar o repositório. | Insira o comando da a seguir. Em *Clonar o repositório* na seção [Informações adicionais](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), você pode copiar o comando completo contendo a URL do repositório. Isso clona o [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation)repositório de. GitHub<pre>git clone <repository-URL>.git</pre>Isso cria uma pasta `cd aws-cdk-servicecatalog-automation` no diretório de destino. Para navegar até essa pasta, insira o comando a seguir.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps engenheiro | 
| Configurar credenciais da AWS. | Insira os comandos a seguir. Eles exportam as seguintes variáveis, que definem a conta da AWS e a região em que você está implantando a pilha.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>As credenciais da AWS para o AWS CDK são fornecidas por meio de variáveis de ambiente. | AWS DevOps, DevOps engenheiro | 
| Configurar permissões de usuário usando perfis do IAM. | Se você for usar funções do IAM para conceder acesso ao portfólio e aos produtos nele contidos, as funções devem ter permissões para serem assumidas pela entidade principal de serviço **servicecatalog.amazonaws.com**. Para obter instruções sobre como conceder essas permissões, consulte [Habilitar o acesso confiável com o Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (documentação do AWS Organizations). | AWS DevOps, DevOps engenheiro | 
| Configure as funções do IAM exigidas pelo StackSets. | Se você estiver usando StackSets para provisionar produtos automaticamente nas contas de destino, precisará configurar as funções do IAM que administram e executam o conjunto de pilhas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps engenheiro | 

### Personalize e implante a solução
<a name="customize-and-deploy-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os CloudFormation modelos. | Na `config/templates` pasta, crie CloudFormation modelos para qualquer produto que você queira incluir em seus portfólios. Para obter mais informações, consulte Como [trabalhar com CloudFormation modelos da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation documentação). | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 
| Personalize o arquivo de configuração. | Na pasta `config`, abra o arquivo **config.json** e defina os parâmetros conforme apropriado para seu caso de uso. Os seguintes parâmetros são obrigatórios, salvo indicação em contrário:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Para ver um exemplo de um arquivo de configuração completo, consulte *Exemplo de arquivo de configuração* na seção [Informações adicionais](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Desenvolvedor de aplicativos, DevOps engenheiro, AWS DevOps | 
| Implante a solução. | Insira o comando da a seguir. **Isso implanta o aplicativo AWS CDK e provisiona os portfólios e produtos do Service Catalog conforme especificado no arquivo config.json**.<pre>sh +x setup.sh</pre> | Desenvolvedor de aplicativos, DevOps engenheiro, AWS DevOps | 
| Verificar a implantação. | Verifique a implantação bem-sucedida fazendo o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS geral | 
| (Opcional) Atualize os portfólios e os produtos. | Se você quiser usar essa solução para atualizar os portfólios ou produtos ou para provisionar novos produtos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Por exemplo, você pode adicionar mais portfólios ou provisionar mais recursos. O aplicativo AWS CDK implementa somente as alterações. Se não houver alterações nos portfólios ou produtos implantados anteriormente, a reimplantação não os afetará. | Desenvolvedor de aplicativos, DevOps engenheiro, AWS geral | 

### Limpe a solução
<a name="clean-up-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| (Opcional) Remova os recursos da AWS implantados por essa solução. | Se você quiser excluir um produto provisionado, siga as instruções em [Excluindo produtos provisionados](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) (documentação do Service Catalog).Para excluir todos os recursos criados por essa solução, insira o comando a seguir.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps engenheiro, desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Biblioteca de estrutura do AWS Service Catalog](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (referência do AWS API )
+ [StackSets conceitos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation documentação)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (marketing da AWS)
+ [Usando o Service Catalog com o AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (workshop da AWS)

## Mais informações
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Clonar o repositório**

Digite o comando a seguir para clonar o repositório. GitHub

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**Arquivo de configuração de amostra**

Veja a seguir um exemplo de arquivo **config.json** com valores de exemplo.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```

# Automatize o gerenciamento dinâmico de pipelines para implantar soluções de hotfix em ambientes Gitflow usando e AWS Service Catalog AWS CodePipeline
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions"></a>

*Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker e Vivek Thangamuthu, Amazon Web Services*

## Resumo
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-summary"></a>

**nota**  
AWS CodeCommit não está mais disponível para novos clientes. Os clientes existentes do AWS CodeCommit podem continuar usando o serviço normalmente. [Saiba mais](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)

Este padrão aborda um cenário de gerenciamento de um pipeline dinâmico de hotfix dedicado exclusivamente à implantação segura de soluções de hotfix em um ambiente de produção. A solução é implementada e gerenciada usando um AWS Service Catalog portfólio e um produto. Uma EventBridge regra da Amazon é usada para automação de eventos. As restrições são aplicadas usando as restrições do portfólio do Service Catalog e os perfis do AWS Identity and Access Management (IAM) para desenvolvedores. Somente uma AWS Lambda função tem permissão para iniciar o produto Service Catalog, acionada pela EventBridge regra. Este padrão foi projetado para ambientes com uma configuração específica do Gitflow, descrita em [Informações adicionais](#automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional).

Normalmente, um hotfix é implantado para resolver problemas críticos ou de segurança relatados em um ambiente ativo, como de produção. Os hotfixes devem ser implantados diretamente somente nos ambientes de preparação e produção. Os pipelines de preparação e produção são usados extensivamente para solicitações regulares de desenvolvimento. Esses pipelines não podem ser usados para implantar hotfixes porque há atributos contínuos de garantia de qualidade que não podem ser promovidos à produção. Para lançar hotfixes, este padrão descreve um pipeline dinâmico e de curta duração com os seguintes atributos de segurança:
+ **Criação automática** — Um pipeline de hotfix é criado automaticamente sempre que uma ramificação de hotfix é criada em um AWS CodeCommit repositório. 
+ **Restrições de acesso**: os desenvolvedores não têm acesso para criar esse pipeline fora do processo de hotfix. 
+ **Estágio controlado**: o pipeline tem um estágio controlado com um token de acesso especial, garantindo que uma solicitação de pull (PR) só possa ser criada uma vez. 
+ **Estágios de aprovação**: os estágios de aprovação são incluídos no pipeline para obter as aprovações necessárias das partes interessadas relevantes. 
+ **Exclusão automática** — O pipeline de hotfix é excluído automaticamente sempre que uma `hotfix` ramificação é excluída no CodeCommit repositório após ser mesclada com um PR. 

## Pré-requisitos e limitações
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-prereqs"></a>

**Pré-requisitos **
+  Contas da AWS São necessários três ativos da seguinte forma:
  + Conta de ferramentas: para a configuração de integração contínua e entrega contínua (CI/CD).
  + Conta de preparação: para testes de aceitação do usuário.
  + Conta de produção: para um usuário final comercial.
  + (Opcional) Adicione uma Conta da AWS para atuar como uma conta de controle de qualidade. Essa conta é necessária se você quiser uma configuração de pipeline principal, incluindo controle de qualidade, e uma solução de pipeline de hotfix para testes.
+ Uma AWS CloudFormation pilha com uma condição opcional para ser implantada na conta de controle de qualidade usando o pipeline principal, se necessário. O padrão ainda pode ser testado sem a configuração do pipeline principal, criando e excluindo uma ramificação `hotfix`.
+ Um bucket do Amazon Simple Storage Service (Amazon S3) para armazenar CloudFormation os modelos usados para criar produtos do Service Catalog.
+ Crie regras de aprovação de relações públicas para o CodeCommit repositório de acordo com os requisitos de conformidade (depois de criar o repositório).
+ Restrinja as permissões do IAM de desenvolvedores e líderes de equipe para negar a execução da função do Lambda [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55), pois ela deve ser invocada somente pelo pipeline.

**Limitações**
+ O CloudFormation provedor é usado no estágio de implantação e o aplicativo é implantado usando um conjunto de CloudFormation alterações. Se você quiser usar uma opção de implantação diferente, modifique a CodePipeline pilha conforme necessário.
+ Esse padrão usa outros arquivos AWS CodeBuild de configuração para implantar um microsserviço de amostra. Se você tiver um tipo de workload diferente (por exemplo, workloads com tecnologia sem servidor), deverá atualizar todas as configurações relevantes.
+ Esse padrão implanta o aplicativo em um único lado Região da AWS (por exemplo, Leste dos EUA (Norte da Virgínia) us-east-1). Contas da AWS Para implantar em várias regiões, altere a referência da região em comandos e pilhas.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-architecture"></a>

Os diagramas nesta seção fornecem fluxos de trabalho para um evento do ciclo de vida de criação e para um evento do ciclo de vida de exclusão.

![\[Fluxo de trabalho para criar um evento de ciclo de vida.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/3939f77c-4221-4c23-a3a1-3e8a294b2b32.png)


O diagrama anterior para criar um evento de ciclo de vida mostra o seguinte:

1. O desenvolvedor cria uma `hotfix-*` ramificação no CodeCommit repositório para desenvolver uma solução relacionada ao hotfix.

1. O evento de criação da `hotfix-*` ramificação é capturado por meio da EventBridge regra. Os detalhes do evento incluem o nome do repositório e o nome da ramificação.

1. A EventBridge regra invoca a AWS Lambda função. `hotfix-lambda-function` A EventBridge regra passa as informações do evento para a função Lambda como entrada.

1. A função do Lambda processa a entrada para recuperar o nome do repositório e o nome da ramificação. Ele lança o produto do Service Catalog com valores recuperados da entrada processada.

1. O produto do Service Catalog inclui uma configuração de pipeline que implantará a solução nos ambientes de preparação e produção. O bloco de pipeline inclui estágios de origem, compilação e implantação. Além disso, há um estágio de aprovação manual para promover a implantação no ambiente de produção.

1. O estágio de origem recupera o código do repositório e da ramificação `hotfix-*` que foram criados na primeira etapa. O código é passado para o estágio de compilação por meio de um bucket do Amazon S3 para artefatos. No estágio de compilação, é criada uma imagem de contêiner que inclui o hotfix que é desenvolvido na ramificação `hotfix-*` e enviado ao Amazon Elastic Container Registry (Amazon ECR).

1. O estágio de implantação ao ambiente de estágio atualiza o Amazon Elastic Container Service (Amazon ECS) com a imagem de contêiner mais recente que inclui o hotfix. O hotfix é implantado criando e executando um CloudFormation conjunto de alterações.

1. A função `prcreation-lambda` do Lambda é invocada após a implantação bem-sucedida no ambiente de preparação. Essa função do Lambda cria uma PR com base na ramificação `hotfix-*` para as ramificações `develop` e `main` do repositório. A função do Lambda garante que a correção desenvolvida na ramificação `hotfix-*` seja mesclada novamente e incluída nas implantações subsequentes.

1. Um estágio de aprovação manual ajuda a garantir que as partes interessadas necessárias revisem a correção e aprovem a implantação na produção.

1. O estágio de implantação ao ambiente de produção atualiza o Amazon ECS com a imagem de contêiner mais recente que inclui o hotfix. O hotfix é implantado criando e executando um CloudFormation conjunto de alterações.

![\[Fluxo de trabalho para excluir um evento de ciclo de vida.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/192aa897-bd9b-4a9f-804e-340371612b3b.png)


O diagrama anterior para excluir um evento de ciclo de vida mostra o seguinte:

1. O desenvolvedor exclui a ramificação `hotfix-*` após a implantação bem-sucedida do hotfix no ambiente de produção.

1. O evento de exclusão da `hotfix-*` ramificação é capturado por meio de uma EventBridge regra. Os detalhes do evento incluem o nome do repositório e o nome da ramificação.

1. A EventBridge regra invoca a função Lambda. A EventBridge regra passa as informações do evento para a função Lambda como entrada.

1. A função do Lambda processa a entrada para recuperar o nome do repositório e o nome da ramificação. A função do Lambda determina o respectivo produto do Service Catalog com base na entrada passada e, em seguida, encerra o produto.

1. O encerramento do produto provisionado pelo Service Catalog exclui o pipeline e os recursos relevantes que foram criados anteriormente nesse produto.

**Automação e escala**
+ O padrão inclui uma EventBridge regra e uma função Lambda, que podem lidar com várias solicitações de criação de ramificações de hotfix em paralelo. A função do Lambda provisiona o produto do Service Catalog para a regra de evento correspondente.
+ A configuração do pipeline é feita usando o produto do Service Catalog, que fornece recursos de controle de versão. A solução também se expande automaticamente para lidar com vários desenvolvimentos de hotfix para a mesma aplicação em paralelo.
+ A função [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) garante que essas alterações de hotfix também sejam mescladas novamente nas ramificações `main` e `develop` por meio de uma criação automática de solicitação de pull. Essa abordagem é essencial para manter as ramificações `main` e `develop` atualizadas com todas as correções e evitar possíveis regressões de código. Esse processo ajuda a manter a consistência entre as ramificações e evitar regressões de código, garantindo que todas as ramificações de longa duração tenham as correções mais recentes.

## Ferramentas
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem. O AWS CodeCommit não está mais disponível para novos clientes. Os clientes existentes do AWS CodeCommit podem continuar usando o serviço normalmente. Para obter mais informações, consulte [Como migrar seu AWS CodeCommit repositório para outro provedor Git](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/).
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)ajuda você a gerenciar centralmente catálogos de serviços de TI aprovados. AWS Os usuários finais podem implantar rapidamente somente os serviços de TI aprovados de que precisam, seguindo as restrições definidas pela organização.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**
+ [CloudFormation Linter (cfn-lint) é um linter](https://github.com/aws-cloudformation/cfn-lint) [que verifica os modelos CloudFormation YAML ou JSON em relação à especificação do recurso. CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Ele também executa outras verificações, como a verificação de valores válidos para as propriedades dos recursos e a adesão às práticas recomendadas.
+ [cfn-nag](https://github.com/stelligent/cfn_nag) é uma ferramenta de código aberto que identifica possíveis problemas de segurança em CloudFormation modelos pesquisando padrões.
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres. Esse padrão usa o Docker para compilar e testar imagens de contêiner localmente.
+ O [Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [dynamic\$1hotfix\$1codepipeline](https://github.com/aws-samples/dynamic_hotfix_codepipeline).

## Práticas recomendadas
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-best-practices"></a>

Analise e ajuste os perfis do IAM e as políticas de controle de serviços (SCP) em seu ambiente para garantir que elas restrinjam o acesso de forma adequada. Isso é crucial para evitar quaisquer ações que possam anular as medidas de segurança incluídas neste padrão. Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-epics"></a>

### Configurar o ambiente de trabalho
<a name="set-up-the-work-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o [repositório](https://github.com/aws-samples/dynamic_hotfix_codepipeline) de amostra em um novo diretório em seu local de trabalho, execute o seguinte comando:<pre>git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git</pre> | AWS DevOps | 
| Exporte variáveis de ambiente para implantação CloudFormation de pilha. | Defina as seguintes variáveis de ambiente que serão usadas como entrada para as CloudFormation pilhas posteriormente nesse padrão.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export BucketStartName=<BucketName></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export ProdAccount=<prodaccountnumber><br />export StageAccount=<stage/preprodaccountnumber><br />export QAAccount=<qaccountnumber><br />export ToolsAccount=<toolsaccountnumber><br />export DepRegion=<region></pre> | AWS DevOps | 

### Configure os pré-requisitos necessários em Contas da AWS
<a name="set-up-prerequisites-required-in-aws-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os recursos necessários CI/CD na conta de ferramentas. | Para implantar a CloudFormation pilha na conta de ferramentas, use os comandos a seguir. (Remova o parâmetro `QAAccount` se você não estiver usando a conta de controle de qualidade para configuração.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre>Anote os recursos que o CodeCommit repositório e o Amazon ECR criaram a partir da pilha anterior. Esses parâmetros são necessários para configurar a ramificação `main` do pipeline nas próximas etapas. | AWS DevOps | 
| Crie os recursos necessários CI/CD nas contas de carga de trabalho. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Atualize a política de bucket de artefatos do S3 para permitir o acesso às contas de workload. | Para atualizar os pré-requisitos da CloudFormation pilha na conta de ferramentas, use os comandos a seguir para adicionar todas as permissões necessárias para as contas de carga de trabalho de estágio e produção. (Remova o parâmetro `QAAccount` se você não o estiver usando para configuração.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} PutPolicy=true \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre> | AWS DevOps | 

### Configurar a função do Lambda e os recursos do Service Catalog na conta de ferramentas
<a name="set-up-lam-function-and-sc-resources-in-tools-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o portfólio e os produtos do Service Catalog. | Para configurar o portfólio e os produtos do Service Catalog, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Configure as funções do Lambda. | Essa solução usa as seguintes funções do Lambda para gerenciar fluxos de trabalho de hotfix:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)Para permitir que as funções do Lambda provisionem e encerrem produtos do Service Catalog quando `hotfix ` ramificações são criadas ou excluídas por meio da EventBridge regra associada, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Criar um pipeline para a ramificação principal e implantar a aplicação em contas de workload
<a name="create-pipeline-for-main-branch-and-deploy-application-in-workload-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o pipeline da ramificação `main`. | Para configurar o pipeline da ramificação principal, execute o comando a seguir na conta de ferramentas. Substitua os parâmetros de `MainProductId` e `MainProductArtifactId` por valores das saídas da pilha `servicecatalogsetup`.<pre>#InToolsAccount<br />aws servicecatalog provision-product \<br />    --product-id <MainProductId> \<br />    --provisioning-artifact-id <MainProductArtifactId> \<br />    --provisioned-product-name "${ApplicationName}-main-pipeline" \<br />    --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \<br />    --region=${DepRegion}</pre> | AWS DevOps | 
| Implante a aplicação usando a ramificação `main`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Criar o pipeline para uma ramificação hotfix-\$1 e implantar o hotfix
<a name="create-the-pipeline-for-a-hotfix--branch-and-deploy-the-hotfix"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma ramificação `hotfix-*` e confirme as alterações. | Para criar um pipeline para a ramificação `hotfix-*` e implantar o hotfix nas contas de workload, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Exclua a ramificação `hotfix-check1`. | Para excluir a ramificação `hotfix-check1` criada anteriormente, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe os recursos implantados. | Para limpar os recursos que foram implantados anteriormente, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>##In Tools Account##<br />aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}</pre><pre>##In Workload Accounts##<br />aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}</pre>Para obter mais informações, consulte [Deleting provisioned products](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) na documentação do Service Catalog. | AWS DevOps | 

## Solução de problemas
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| As alterações que você confirmou no CodeCommit repositório não estão sendo implantadas. | Verifique se há erros nos CodeBuild registros na ação de compilação do Docker. Para obter mais informações, consulte a [documentação do CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html). | 
| O produto do Service Catalog não está sendo provisionado. | Analise as CloudFormation pilhas relacionadas em busca de eventos com falha. Para obter mais informações, consulte a [documentação do CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html). | 

## Recursos relacionados
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-resources"></a>
+ [Comandos básicos do Git](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-basic-git.html)
+ [Configurar uma política do IAM para limitar os envios e mesclagens a uma ramificação](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html#how-to-conditional-branch-create-policy)
+ [Conecte-se a um AWS CodeCommit repositório](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [Granting access to users](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)
+ [Enviando uma imagem do Docker para um repositório privado do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Solução de problemas AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html)
+ [O que é AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

## Mais informações
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional"></a>

Esse padrão foi projetado para ambientes com uma configuração do Gitflow que é adotada para o fluxo de trabalho de desenvolvimento no CI/CD processo. Os pipelines seguem o ciclo de implantação que começa no desenvolvimento e passa pelos ambientes de garantia de qualidade (QA), preparação e produção. A CI/CD configuração inclui duas ramificações do git com implantações promocionais em ambientes da seguinte forma:
+ A ramificação `develop` é implantada no ambiente de desenvolvimento.
+ A ramificação `main` é implantada nos ambientes de controle de qualidade, preparação e produção.

Nessa configuração, é um desafio aplicar um hotfix ou um patch de segurança mais rápido do que o ciclo normal de implantação enquanto o desenvolvimento ativo de novos recursos está em andamento. É necessário um processo dedicado para atender às solicitações de hotfix ou segurança, garantindo que os ambientes ativos permaneçam funcionando adequadamente e com segurança.

No entanto, você pode usar outras opções disponíveis sem precisar de um processo de implantação dedicado se:
+ O CI/CD processo está bem equipado com testes automatizados, como testes funcionais e end-to-end testes, que eliminam a necessidade de testes manuais e evitam atrasos nas implantações na produção. No entanto, se os testes automatizados não estiverem bem integrados ao CI/CD processo, fazer uma pequena correção no ambiente de produção pode se tornar complexo e complicado para os desenvolvedores. Isso ocorre porque é possível que novos recursos estejam no ambiente de controle de qualidade aguardando aprovação e liberação. Um hotfix ou correção de segurança não pode ser colocado em produção de forma direta e simultânea.
+ As equipes de desenvolvimento implantam continuamente novos recursos no ambiente de produção, integrando hotfixes ou patches de segurança na implantação programada de cada novo recurso. Em outras palavras, a próxima atualização de recursos para o ambiente de produção compreende dois componentes: a adição de um novo recurso e a inclusão do hotfix ou patch de segurança. No entanto, se o ciclo de implantação não for contínuo, pode haver vários novos recursos já aguardando aprovação no ambiente de controle de qualidade. Gerenciar versões diferentes e garantir que as alterações corretas sejam reaplicadas pode se tornar um trabalho complexo e propenso a erros.

**nota**  
Se você estiver usando a [versão 2](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types.html#:~:text=V2%20type%20pipelines%20have%20the%20same%20structure) do AWS CodePipeline com os acionadores adequados configurados na `hotfix` ramificação, ainda precisará de um processo dedicado para atender às solicitações não programadas. Na versão 2, você pode configurar gatilhos para solicitações de push ou pull. A execução será colocada em fila ou executada imediatamente, dependendo do estado anterior do pipeline. No entanto, com um pipeline dedicado, as correções são aplicadas imediatamente ao ambiente de produção, garantindo que problemas urgentes sejam resolvidos sem demora.

# Automatize a exclusão de AWS CloudFormation pilhas e recursos associados
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*Sandeep Singh e James Jacob, Amazon Web Services*

## Resumo
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

O [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) é um serviço amplamente usado para gerenciar a infraestrutura como código (IaC) da nuvem. Ao usar CloudFormation, você gerencia os recursos relacionados como uma única unidade chamada *pilha*. Você pode criar, atualizar e excluir um conjunto de recursos criando, atualizando e excluindo pilhas.

Às vezes, você não precisa mais dos recursos em uma CloudFormation pilha. Dependendo dos recursos e das respectivas configurações, remover uma pilha e os recursos associados pode ser uma tarefa complexa. Em sistemas de produção do mundo real, as exclusões às vezes falham ou demoram muito devido a condições ou restrições conflitantes que não podem ser substituídas. CloudFormation Pode ser necessário planejamento e execução cuidadosos para garantir que todos os recursos sejam devidamente excluídos, de maneira consistente e eficiente. Esse padrão descreve como configurar uma estrutura que ajuda você a gerenciar a exclusão de CloudFormation pilhas que envolvem as seguintes complexidades:
+ **Recursos com proteção contra exclusão**: alguns recursos podem ter a proteção contra exclusão habilitada. Exemplos comuns desses recursos são tabelas do [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) e buckets do [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html). A proteção contra exclusão impede a exclusão automática, como a exclusão por meio de. CloudFormation Caso deseje remover esses recursos, você deve, manualmente ou por meio de programação, desabilitar temporariamente ou sobrescrever a proteção contra exclusão. Antes de prosseguir, você deve refletir cuidadosamente sobre os impactos da exclusão desses recursos.
+ **Recursos com políticas de retenção** — Certos recursos, como chaves AWS Key Management Service (AWS KMS) e buckets do Amazon S3, podem ter políticas de retenção que especificam por quanto tempo eles devem ser retidos após a solicitação da exclusão. Essas políticas devem ser consideradas na estratégia de limpeza para garantir conformidade com as políticas organizacionais e com os requisitos regulatórios.
+ **Exclusão demorada de funções do Lambda que estão anexadas a uma VPC**: a exclusão de uma função do [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) que está anexada a uma nuvem privada virtual (VPC) pode demorar de 5 a 40 minutos, dependendo das diversas dependências interconectadas envolvidas no processo. Se você desanexar a função da VPC antes de excluir a pilha, é possível reduzir esse tempo para menos de 1 minuto.
+ **Recursos não criados diretamente por CloudFormation** — Em determinados designs de aplicativos, os recursos podem ser criados fora da CloudFormation pilha original, seja pelo próprio aplicativo ou por recursos provisionados por meio da pilha. Veja os dois exemplos a seguir:
  + CloudFormation pode provisionar uma instância do [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) que executa um script de dados do usuário. Em seguida, esse script pode criar um parâmetro do [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) para armazenar dados relacionados à aplicação. Esse parâmetro não é gerenciado por meio de CloudFormation.
  + CloudFormation pode provisionar uma função Lambda que gera automaticamente um grupo [Amazon CloudWatch Logs para armazenar registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). Esse grupo de registros não é gerenciado por meio de CloudFormation.

  Embora esses recursos não sejam gerenciados diretamente pelo CloudFormation, eles geralmente precisam ser limpos quando a pilha é excluída. Caso não sejam gerenciados, esses recursos podem ficar órfãos e gerar consumo desnecessário de recursos.

Embora essas barreiras de proteção possam gerar complexidade, elas são intencionais e essenciais. CloudFormation Permitir ignorar todas as restrições e excluir recursos indiscriminadamente pode levar a consequências prejudiciais e imprevistas em muitos cenários. No entanto, como DevOps engenheiro de nuvem responsável pelo gerenciamento do ambiente, às vezes pode ser necessário ignorar essas restrições, principalmente em ambientes de desenvolvimento, teste ou preparação.

**Resultados de negócios desejados**

Com a implementação desta estrutura, você poderá aproveitar os seguintes benefícios:
+ **Gerenciamento de custos** — a limpeza regular e eficiente de ambientes temporários, como end-to-end ambientes de teste de aceitação de usuários, ajuda a evitar que os recursos funcionem por mais tempo do que o necessário. Isso pode reduzir os custos de forma significativa.
+ **Segurança** — A limpeza automatizada de recursos desatualizados ou não utilizados reduz a superfície de ataque e ajuda a manter um ambiente seguro AWS .
+ **Eficiência operacional**: a limpeza regular e automatizada pode fornecer os seguintes benefícios operacionais:
  + Scripts automatizados que removem grupos de logs antigos ou buckets do Amazon S3 vazios podem aumentar a eficiência operacional, mantendo o ambiente organizado e fácil de gerenciar.
  + Excluir e recriar pilhas rapidamente permite iterações ágeis no projeto e na implementação, resultando em uma arquitetura mais robusta e resiliente.
  + A exclusão e a reconstrução frequente de ambientes ajudam a identificar e corrigir problemas potenciais. Isso contribui para garantir que a infraestrutura seja capaz de lidar com situações reais.

## Pré-requisitos e limitações
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Python, versão 3.6 ou versões posteriores, [instalado](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitações**
+ Uma convenção de nomenclatura é usada para identificar os recursos que devem ser excluídos. O código de amostra deste padrão usa um prefixo no nome do recurso, mas você pode definir sua própria convenção de nomenclatura. Os recursos que não seguem essa convenção não serão identificados nem excluídos.

## Arquitetura
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

O diagrama a seguir mostra como essa estrutura identifica a CloudFormation pilha de destino e os recursos adicionais associados a ela.

![\[As fases que descobrem, processam e excluem CloudFormation pilhas e seus recursos associados.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. **Reúna recursos** — A estrutura de automação usa uma convenção de nomenclatura para retornar todas as CloudFormation pilhas relevantes, repositórios do Amazon Elastic Container Registry (Amazon ECR), tabelas do DynamoDB e buckets do Amazon S3.
**nota**  
As funções deste estágio usam [paginadores](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), um recurso do Boto3 que abstrai o processo de iteração sobre um conjunto de resultados de API truncado. Isso garante que todos os recursos sejam processados. [Para otimizar ainda mais o desempenho, considere aplicar a filtragem do [lado do servidor](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou considere usá-la JMESPath para realizar a filtragem do lado do cliente.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

1. **Pré-processamento** — A estrutura de automação identifica e aborda as restrições de serviço que devem ser substituídas para permitir a exclusão dos recursos. CloudFormation Por exemplo, a configuração `DeletionProtectionEnabled` das tabelas do DynamoDB é alterada para `False`. Na interface de linha de comandos, para cada recurso, você recebe um prompt perguntando se deseja ignorar a restrição.

1. **Excluir pilha** — A estrutura de automação exclui a CloudFormation pilha. Na interface de linha de comandos, você recebe um prompt perguntando se deseja excluir a pilha.

1. **Pós-processamento** — a estrutura de automação exclui todos os recursos relacionados que não foram provisionados diretamente CloudFormation como parte da pilha. Exemplos desses tipos de recursos incluem parâmetros e grupos de CloudWatch registros do Systems Manager. As funções separadas reúnem esses recursos, realizam o processamento prévio e, em seguida, os excluem. Na interface de linha de comandos, para cada recurso, você recebe um prompt perguntando se deseja excluir o recurso.
**nota**  
As funções deste estágio usam [paginadores](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), um recurso do Boto3 que abstrai o processo de iteração sobre um conjunto de resultados de API truncado. Isso garante que todos os recursos sejam processados. [Para otimizar ainda mais o desempenho, considere aplicar a filtragem do [lado do servidor](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) ou considere usá-la JMESPath para realizar a filtragem do lado do cliente.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

**Automação e escala**

Se sua CloudFormation pilha incluir outros recursos que não estão incluídos no código de amostra ou se a pilha tiver uma restrição que não tenha sido tratada nesse padrão, você poderá adaptar a estrutura de automação para seu caso de uso. Adote a mesma sequência metodológica para coletar recursos, realizar o processamento prévio, excluir a pilha e, depois, executar o processamento posterior.

## Ferramentas
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
+ CloudFormation A [Interface de Linha de Comando (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) é uma ferramenta de código aberto que ajuda você a desenvolver e testar extensões de terceiros AWS e, em seguida, registrá-las para uso em. CloudFormation
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS

**Outras ferramentas**
+ O [Click](https://click.palletsprojects.com/en/stable/) é uma ferramenta em Python que auxilia na criação de interfaces de linha de comandos.
+ O [Poetry](https://python-poetry.org/docs/) é uma ferramenta para gerenciamento de dependências e empacotamento em Python.
+ O [Pyenv](https://github.com/pyenv/pyenv) é uma ferramenta que ajuda a gerenciar e alternar entre diferentes versões do Python.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Repositório de código**

O código desse padrão está disponível no GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)repositório.

## Práticas recomendadas
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Marque os recursos para facilitar a identificação**: implemente uma [estratégia de marcação](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) para identificar recursos criados para diferentes ambientes e finalidades. As etiquetas podem simplificar o processo de limpeza, ajudando a filtrar os recursos com base nas suas marcações.
+ **Defina ciclos de vida dos recursos**: estabeleça ciclos de vida para os recursos a fim de excluí-los automaticamente após um determinado período. Essa prática ajuda a garantir que ambientes temporários não gerem custos permanentes.

## Épicos
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

### Instalar as ferramentas
<a name="install-tools"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro | 
| Instale o Poetry. | Siga as [instruções](https://python-poetry.org/docs/), apresentadas na documentação do Poetry, para instalar o Poetry no ambiente virtual de destino. | DevOps engenheiro | 
| Instale as dependências. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro | 
| (Opcional) Instale o Pyenv. | Siga as [instruções](https://github.com/pyenv/pyenv#installation) (GitHub) para instalar o Pyenv. | DevOps engenheiro | 

### (Opcional) Personalização da estrutura
<a name="optional-customize-the-framework"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie funções que coletem, processem previamente e excluam os recursos de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps engenheiro, Python | 

### Criação de recursos de amostra
<a name="create-sample-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Crie um parâmetro do Systems Manager. | Digite o comando a seguir para criar um parâmetro do Systems Manager que não seja provisionado por meio de: CloudFormation<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Crie um bucket do Amazon S3. | Insira o seguinte comando para criar um bucket do Amazon S3 que não seja provisionado por meio de: CloudFormation<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Exclusão dos recursos de amostra
<a name="delete-the-sample-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Valide a exclusão dos recursos. | Na saída, confirme se todos os recursos de amostra foram excluídos. Para obter uma saída de amostra, consulte a seção [Recursos adicionais](#automate-deletion-cloudformation-stacks-associated-resources-additional) deste padrão. | AWS DevOps | 

## Recursos relacionados
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Excluir uma pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentação)
+ [Solução de problemas CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html) (CloudFormation documentação)
+ [Conceder acesso a funções do Lambda para recursos em uma Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (documentação do Lambda)
+ [Como excluo uma AWS CloudFormation pilha que está presa no status DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Centro de AWS conhecimento)

## Mais informações
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

A seguir, apresentamos uma saída de amostra produzida pelo comando `cfncli`:

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```

# Automatização da ingestão e da visualização de métricas personalizadas do Amazon MWAA no Amazon Managed Grafana usando o Terraform
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah e Satya Vajrapu, Amazon Web Services*

## Resumo
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

Este padrão descreve como usar o Amazon Managed Grafana para criar e monitorar métricas personalizadas que são ingeridas pelo Amazon Managed Workflows for Apache Airflow (Amazon MWAA). O Amazon MWAA serve como orquestrador de fluxos de trabalho, empregando Directed Acyclic Graphs () que são programados em Python. DAGs Esse padrão se concentra no monitoramento de métricas personalizadas, incluindo o número total de DAGs execuções na última hora, a contagem de aprovados e reprovados a DAGs cada hora e a duração média desses processos. Essa análise mostra como o Amazon Managed Grafana se integra ao Amazon MWAA para permitir monitoramento e insights abrangentes sobre a orquestração de fluxos de trabalho nesse ambiente.

## Pré-requisitos e limitações
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS com as permissões de usuário necessárias para criar e gerenciar o seguinte Serviços da AWS:
  + AWS Identity and Access Management Funções e políticas (IAM)
  + AWS Lambda
  + Amazon Managed Grafana
  + Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Timestream
+ Acesso a um ambiente de shell que pode ser um terminal em sua máquina local ou [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html).
+ Um ambiente de shell com o Git instalado e a versão mais recente do AWS Command Line Interface (AWS CLI) instalada e configurada. Para obter mais informações, consulte [Instalação ou atualização para a versão mais recente do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) na AWS CLI documentação.
+ A seguinte versão do Terraform instalada: `required_version = ">= 1.6.1, < 2.0.0"` Você pode usar [tfswitch](https://tfswitch.warrensbox.com/) para alternar entre diferentes versões do Terraform.
+ Fonte de identidade configurada Centro de Identidade do AWS IAM para o seu Conta da AWS. Para obter mais informações, consulte [Confirm your identity sources in IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html) na documentação do Centro de Identidade do IAM. Você pode escolher entre o Active Directory padrão Diretório do Centro de Identidade do IAM ou um provedor de identidade externo (IdP), como o Okta. Para obter mais informações, consulte [Recursos relacionados](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources).

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Terraforma `required_version = ">= 1.6.1, < 2.0.0"`
+ Amazon Managed Grafana versão 9.4 ou posterior. Este padrão foi testado na versão 9.4.

## Arquitetura
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

O diagrama de arquitetura a seguir destaca o Serviços da AWS usado na solução.

![\[Fluxo de trabalho para automatizar a ingestão de métricas personalizadas do Amazon MWAA.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


O diagrama anterior mostra o seguinte fluxo de trabalho:

1. As métricas personalizadas no Amazon MWAA se originam das DAGs que estão sendo executadas no ambiente. As métricas são carregadas para o bucket do Amazon S3 em formato de arquivo CSV. O seguinte DAGs usa os recursos de consulta de banco de dados do Amazon MWAA:
   + `run-example-dag`: esse DAG contém um exemplo de código Python que define uma ou mais tarefas. Ele é executado a cada sete minutos e imprime a data. Depois de imprimir a data, o DAG inclui uma tarefa para suspender ou pausar a execução por um período específico.
   + `other-sample-dag`: esse DAG é executado a cada dez minutos e imprime a data. Depois de imprimir a data, o DAG inclui uma tarefa para suspender ou pausar a execução por um período específico.
   + `data-extract`: esse DAG é executado a cada hora e consulta o banco de dados do Amazon MWAA e coleta métricas. Depois que as métricas são coletadas, esse DAG as grava em um bucket do Amazon S3 para realizar análise e processamento adicionais.

1. Para agilizar o processamento de dados, as funções do Lambda são executadas quando acionadas por eventos do Amazon S3, o que facilita o carregamento de métricas no Timestream.

1. O Timestream é integrado como uma fonte de dados no Amazon Managed Grafana, onde todas as métricas personalizadas do Amazon MWAA são armazenadas.

1. Os usuários podem consultar os dados e criar painéis personalizados para visualizar os principais indicadores de performance e obter informações sobre a orquestração dos fluxos de trabalho no Amazon MWAA.

## Ferramentas
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**Serviços da AWS**
+ [Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)ajuda você a gerenciar centralmente o acesso de login único (SSO) a todos os seus Contas da AWS aplicativos e à nuvem.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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. Nesse padrão, AWS Lambda executa o código Python em resposta aos eventos do Amazon S3 e gerencia os recursos computacionais automaticamente.
+ O [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) é um serviço de visualização de dados totalmente gerenciado que você pode usar para consultar, correlacionar e visualizar, além de gerar alertas sobre suas métricas, logs e rastreamentos. Este padrão usa o Amazon Managed Grafana para criar um painel para visualização de métricas e alertas.
+ O [Amazon Managed Workflows for Apache Airflow (Amazon MWAA)](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html) é um serviço de orquestração gerenciado para o Apache Airflow que é possível configurar e operar pipelines de dados na nuvem em escala. O [Apache Airflow](https://airflow.apache.org/) é uma ferramenta de código aberto usada para criar, agendar e monitorar programaticamente sequências de processos e tarefas chamadas de fluxos de trabalho. Nesse padrão, a amostra DAGs e um extrator de métricas DAG são implantados no Amazon MWAA.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados. Nesse padrão, o Amazon S3 é usado para armazenar DAGs scripts e métricas personalizadas no formato CSV.
+ [O Amazon Timestream LiveAnalytics](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) for is é um banco de dados de séries temporais rápido, escalável, totalmente gerenciado e criado especificamente para facilitar o armazenamento e a análise de trilhões de pontos de dados de séries temporais por dia. O Timestream for LiveAnalytics também se integra aos serviços comumente usados para coleta de dados, visualização e aprendizado de máquina. Neste padrão, ele é usado para ingerir as métricas personalizadas geradas pelo Amazon MWAA.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código. Este padrão usa um módulo do Terraform para automatizar o provisionamento da infraestrutura na AWS.

**Repositório de código**

O código desse padrão está disponível GitHub no repositório [visualize-amazon-mwaa-custom-metrics-grafana](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana). A pasta `stacks/Infra` contém o seguinte:
+ Arquivos de configuração do Terraform para todos os recursos AWS 
+ O arquivo .json do painel do Grafana na pasta `grafana`
+ Fluxos de trabalho gerenciados da Amazon para Apache DAGs Airflow na pasta `mwaa/dags`
+ O código do Lambda para analisar o arquivo.csv e armazenar métricas no banco de dados do Timestream na pasta `src`
+ Arquivos.json da política do IAM na pasta `templates`

## Práticas recomendadas
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

O Terraform deve armazenar o estado sobre sua infraestrutura gerenciada e configuração para que possa mapear recursos do mundo real para sua configuração. Por padrão, o Terraform armazena o estado localmente em um arquivo chamado `terraform.tfstate`. É crucial garantir a segurança e a integridade do seu arquivo de estado do Terraform, pois ele mantém o estado atual da sua infraestrutura. Para obter mais informações, consulte [Remote State](https://developer.hashicorp.com/terraform/language/state/remote) na documentação do Terraform. 

## Épicos
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### Implantar a infraestrutura usando o Terraform
<a name="deploy-the-infrastructure-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar a infraestrutura. | Para implantar a infraestrutura da solução, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### Validar os recursos de infraestrutura implantados
<a name="validate-the-deployed-infrastructure-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide o ambiente do Amazon MWAA. | Para validar o ambiente do Amazon MWAA, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, engenheiro de dados | 
| Verifique as programações dos DAGs. | Para ver cada programação de DAG, acesse a guia **Programar** na **IU do Airflow**.Cada um dos itens a seguir DAGs tem uma programação pré-configurada, que é executada no ambiente Amazon MWAA e gera métricas personalizadas: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Você também pode ver as execuções bem-sucedidas de cada DAG na coluna **Execuções**.  | Engenheiro de dados, AWS DevOps | 

### Configurar o ambiente do Amazon Managed Grafana
<a name="configure-the-gra-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o acesso ao espaço de trabalho do Amazon Managed Grafana. | Os scripts do Terraform criaram o espaço de trabalho, os painéis e a página de métricas necessários do Amazon Managed Grafana. Para configurar o acesso de modo que você possa exibi-los, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Instale o plug-in do Amazon Timestream.  | As métricas personalizadas do Amazon MWAA são carregadas no banco de dados do Timestream. Você usa o plug-in do Timestream para visualizar as métricas com os painéis do Amazon Managed Grafana.Para instalar o plug-in do Timestream, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Para obter mais informações, consulte [Ampliar o espaço de trabalho com plug-ins](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins) na documentação do Amazon Managed Grafana. | AWS DevOps, DevOps engenheiro | 

### Visualizar as métricas personalizadas no painel do Amazon Managed Grafana
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Veja o painel do Amazon Managed Grafana. | Para visualizar as métricas que foram ingeridas no espaço de trabalho do Amazon Managed Grafana, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)A página de métricas do painel exibirá as seguintes informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Personalize o painel do Amazon Managed Grafana. | Para personalizar os painéis para futuros aprimoramentos, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Como alternativa, o código-fonte desse painel está disponível no `dashboard.json` arquivo na `stacks/infra/grafana` pasta no [GitHub repositório](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json). | AWS DevOps | 

### Limpe AWS os recursos
<a name="clean-up-aws-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Pausa as execuções de DAGs no Amazon MWAA. | Para pausar as execuções de DAGs, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, engenheiro de dados | 
| Exclua os objetos nos buckets do Amazon S3. | Para excluir os buckets **mwaa-events-bucket-\$1 e **mwaa-metrics-bucket-\$1**** do Amazon S3, siga as instruções para usar o console do Amazon S3 em Excluindo [um bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) na documentação do Amazon S3. | AWS DevOps | 
| Destrua os recursos criados pelo Terraform. | Para destruir os recursos criados pelo Terraform e o arquivo local de estado do Terraform associado, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## Solução de problemas
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` | Atualize seu AWS CLI para a [versão mais recente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | 
| Erro ao carregar fontes de dados: `Fetch error: 404 Not Found Instantiating…` | O erro é intermitente. Aguarde alguns minutos e atualize as fontes de dados para visualizar a fonte de dados do Timestream listada.  | 

## Recursos relacionados
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS documentação**
+ [Amazon Managed Grafana for dashboarding and visualization](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [Configurar o Amazon Managed Grafana para usar o Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [Use Centro de Identidade do AWS IAM com seu espaço de trabalho Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [Trabalhando com o DAGs Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS vídeos**
+ Configurar o Centro de Identidade do IAM com o Amazon Managed Grafana para autenticação, conforme mostrado neste [vídeo](https://www.youtube.com/watch?v=XX2Xcz-Ps9U).




[https://www.youtube-nocookie.com/embed/XX2Xcz-PS9U? controles = 0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ Se o Centro de Identidade do IAM não estiver disponível, você também pode integrar a autenticação do Amazon Managed Grafana usando um provedor de identidade (IdP) externo, como o Okta, conforme mostrado neste [vídeo](https://www.youtube.com/watch?v=Z4JHxl2xpOg).




[https://www.youtube-nocookie.com/embed/A4 OuJHxl2xp? controles = 0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## Mais informações
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

Você pode criar uma solução abrangente de monitoramento e alerta para seu ambiente do Amazon MWAA, permitindo gerenciamento proativo e resposta rápida a possíveis problemas ou anomalias. O Amazon Managed Grafana inclui os seguintes recursos:

**Alertas**: você pode configurar alertas no Amazon Managed Grafana com base em limites ou condições predefinidos. Configure notificações por e-mail para alertar as partes interessadas relevantes quando determinadas métricas excederem ou ficarem abaixo dos limites especificados. Para obter mais informações, consulte [Grafana Alerting](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html) na documentação do Amazon Managed Grafana.

**Integração** — Você pode integrar o Amazon Managed Grafana com várias ferramentas de terceiros OpsGenie, como, PagerDuty, ou o Slack para melhorar os recursos de notificação. Por exemplo, você pode configurar webhooks ou integrá-los APIs para acionar incidentes e notificações nessas plataformas com base nos alertas gerados no Amazon Managed Grafana. Além disso, esse padrão fornece um [GitHub repositório](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) para criar AWS recursos. Você pode integrar ainda mais esse código aos seus fluxos de trabalho de implantação de infraestrutura.

# Automatize a implantação de conjuntos de pilhas usando a AWS e a AWS CodePipeline CodeBuild
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild"></a>

*Thiyagarajan Mani, Mihir Borkar e Raghu Gowda, Amazon Web Services*

## Resumo
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-summary"></a>

Em sua integração e entrega contínuas (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsolução para esse requisito), a capacidade de [administrador delegado do conjunto de pilhas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) da AWS CloudFormation é útil porque permite uma camada de segurança ao restringir o acesso à conta de gerenciamento. No entanto, a AWS CodePipeline usa o modelo de permissões gerenciadas por serviços para implantar aplicativos em várias contas e regiões. Você deve usar a conta de gerenciamento do AWS Organizations para implantar com conjuntos de pilhas, porque a AWS CodePipeline não oferece suporte ao recurso de administrador delegado de conjuntos de pilhas.

Este padrão descreve como você pode contornar essa limitação. O padrão usa a AWS CodeBuild e um script personalizado para automatizar a implantação de conjuntos de pilhas com a AWS. CodePipeline Ele automatiza essas atividades de implantação de aplicativos:
+ Implemente um aplicativo como conjuntos de pilhas em unidades organizacionais existentes () OUs
+ Estenda a implantação de um aplicativo em regiões adicionais OUs  
+ Remover um aplicativo implantado de todas ou de regiões específicas OUs 

## Pré-requisitos e limitações
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-prereqs"></a>

**Pré-requisitos **

Antes de seguir as etapas deste padrão:
+ Criar organizações na sua conta de gerenciamento do AWS Organizations. Para obter instruções, consulte a [documentação do AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Habilite o acesso confiável entre AWS Organizations e CloudFormation use permissões gerenciadas por serviços. Para obter instruções, consulte [Habilitar acesso confiável com AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) na CloudFormation documentação.

**Limitações**

O código fornecido com esse padrão tem as seguintes limitações: 
+ Você pode implantar somente um único CloudFormation modelo para um aplicativo; atualmente, a implantação de vários modelos não é suportada.
+ A personalização da implementação atual exige DevOps experiência.
+ Esse padrão não usa chaves do AWS Key Management System (AWS KMS). No entanto, você pode ativar essa funcionalidade reconfigurando o CloudFormation modelo incluído nesse padrão.

## Arquitetura
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-architecture"></a>

![\[Arquitetura de automação de pipeline de CI/CD\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/2dbca422-7f32-4f9c-a4aa-1f95b484b772.png)


Essa arquitetura para o pipeline CI/CD de implantação trata do seguinte:
+ Restringe o acesso direto à conta de gerenciamento delegando a responsabilidade de implantação do conjunto de pilhas a uma CI/CD conta dedicada como administrador do conjunto de pilhas para implantações de aplicativos.
+ Usa o modelo de permissão gerenciado por serviços para implantar o aplicativo automaticamente sempre que uma nova conta é criada e mapeada em uma UO.
+ Garante a consistência da versão do aplicativo em todas as contas no nível do ambiente.
+ Usa vários estágios de aprovação nos níveis do repositório e do pipeline para fornecer camadas adicionais de segurança e governança para o aplicativo implantado.
+ Supera a limitação atual de usar um script CodePipeline de implantação personalizado para implantar ou CodeBuild remover automaticamente conjuntos de pilhas e instâncias de pilha. Para ver uma ilustração do controle de fluxo e da hierarquia das chamadas de API implementadas pelo script personalizado, consulte a seção [Informações adicionais](#automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional).
+ Cria conjuntos de pilhas individuais para ambientes de desenvolvimento, teste e produção. Além disso, você pode criar conjuntos de pilhas que OUs combinam várias regiões em cada estágio. Por exemplo, você pode combinar sandbox e desenvolvimento OUs em um estágio de implantação de desenvolvimento.
+ Oferece suporte à implantação ou exclusão de aplicativos em um subconjunto de contas ou lista de. OUs

**Automação e escala**

Você pode usar o código fornecido com esse padrão para criar um CodeCommit repositório da AWS e um pipeline de código para seu aplicativo. Em seguida, você pode implantá-los como conjuntos de pilhas em várias contas no nível da UO. O código também automatiza componentes como tópicos do Amazon Simple Notiﬁcation Service (Amazon SNS) para notificar aprovadores, os perfis necessários do AWS Identity and Access Management (IAM) e a política de controle de serviços (SCP) a ser aplicada na conta de gerenciamento.

## Ferramentas
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-tools"></a>

**Serviços da AWS**
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é 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.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+ A [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias locais, funções do AWS Lambda ou serviços Amazon Elastic Container Service (Amazon ECS).
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ O [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) é um serviço de gerenciamento de contas que permite consolidar várias contas AWS em uma organização que você cria e gerencia de maneira centralizada.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [automated-code-pipeline-stackset-deployment](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment). Para ver a estrutura de pastas e outros detalhes, consulte o [arquivo readme](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment/blob/main/README.md) do repositório.

## Práticas recomendadas
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-best-practices"></a>

Este padrão restringe o acesso direto à conta de gerenciamento durante a implantação do aplicativo no nível da UO. Adicionar vários estágios de aprovação ao processo de pipeline e repositório ajuda a fornecer segurança e governança adicionais para os aplicativos e componentes que você implanta usando essa abordagem.

## Épicos
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-epics"></a>

### Configure contas no AWS Organizations
<a name="configure-accounts-in-aws-organizations"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite o recurso de gerenciamento entre contas. | Ative todos os atributos na conta de gerenciamento da sua organização seguindo as instruções na [documentação do AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html). | Administrador da AWS, administrador da plataforma | 
| Crie uma CI/CD conta. | No AWS Organizations, em sua organização, crie uma CI/CD conta dedicada e designe uma equipe para possuir e controlar o acesso à conta. | Administrador da AWS | 
| Adicionar um administrador delegado. | Na conta de gerenciamento, registre a CI/CD conta que você criou na etapa anterior como administrador delegado do conjunto de pilhas. Para obter instruções, consulte a [ CloudFormation documentação da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). | Administrador da AWS, administrador da plataforma | 

### Crie um repositório e CI/CD um pipeline de aplicativos
<a name="create-an-application-repository-and-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crie tópicos do SNS. | Você pode usar o `sns-template.yaml` modelo fornecido no GitHub repositório para criar tópicos do SNS e configurar assinaturas para solicitações de aprovação.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crie funções do IAM para CI/CD componentes. | Você pode usar o `cicd-role-template.yaml` modelo fornecido no GitHub repositório para criar funções e políticas do IAM exigidas pelos CI/CD componentes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Crie um CodeCommit repositório e um pipeline de código para seu aplicativo. | Você pode usar o `cicd-pipeline-template.yaml` modelo fornecido no GitHub repositório para criar um CodeCommit repositório e um pipeline de código para seu aplicativo.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 

### Implantar um conjunto de pilhas
<a name="deploy-a-stack-set"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do aplicativo. | O modelo de CI/CD pipeline usado anteriormente cria um exemplo de repositório de aplicativos e pipeline de código. Para clonar e verificar o repositório:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desenvolvedor de aplicativos, Engenheiro de dados | 
| Adicione artefatos do aplicativo. | Atualize o repositório do aplicativo usando um CloudFormation modelo.Essa solução oferece suporte à implantação de apenas um único CloudFormation modelo.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desenvolvedor de aplicativos, Engenheiro de dados | 
| Atualize o arquivo de configuração de implantação. | Atualize o arquivo `deployment_config.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html)Esse padrão cria conjuntos de pilhas individuais para cada ambiente adicionando o nome do ambiente ao nome do conjunto de pilhas que você fornece no arquivo de configuração de implantação. | Desenvolvedor de aplicativos, Engenheiro de dados | 
| Confirme as alterações e implante o conjunto de pilhas. | Confirme as alterações que você especificou em seu modelo de aplicativo e mescle e implante o conjunto de pilhas em vários ambientes, etapa por etapa:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Desenvolvedor de aplicativos, Engenheiro de dados | 

## Solução de problemas
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A implantação falha com a exceção:*Altere o nome do arquivo de parâmetros do modelo como -parameter- .json com, nomes padrão não são permitidos* <application name><evn>  | Os arquivos CloudFormation de parâmetros do modelo devem seguir a convenção de nomenclatura especificada. Atualize os nomes dos arquivos de parâmetros e tente novamente. | 
| A implantação falha com a exceção:*Altere o nome do CloudFormation modelo como .yml; o padrão template.yml ou template.yaml não são permitidos* <application name> | O nome do CloudFormation modelo deve seguir a convenção de nomenclatura especificada. Atualize o nome do arquivo e tente novamente. | 
| A implantação falha com a exceção:*Nenhum CloudFormation modelo válido e seu arquivo de parâmetros foram encontrados para o ambiente \$1nome do ambiente\$1* | Verifique as convenções de nomenclatura do arquivo para o CloudFormation modelo e seu arquivo de parâmetros para o ambiente especificado. | 
| A implantação falha com a exceção:*Ação de implantação inválida fornecida no arquivo de configuração de implantação. As opções válidas são 'implantar' e 'excluir'.*  | Você especificou um valor inválido para o parâmetro `deployment_action` no arquivo de configuração de implantação. O parâmetro tem dois valores válidos: `deploy` e `delete`. Use `deploy` para criar e atualizar os conjuntos de pilhas e as instâncias da pilha associadas deles. Use `delete` somente quando quiser remover todo o conjunto de pilhas e instâncias de pilha associadas. | 

## Recursos relacionados
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-resources"></a>
+ GitHub [automated-code-pipeline-stackset-repositório de implantação](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment)
+ [Habilitar todos os atributos na organização](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) (documentação do AWS Organizations)
+ [Registre um administrador delegado](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) ( CloudFormation documentação da AWS)
+ [Metas em nível de conta para conjuntos de pilhas gerenciados por serviços (documentação da AWS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/account-level-targets.html) CloudFormation 

## Mais informações
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional"></a>

**Fluxograma**

O fluxograma a seguir mostra o controle de fluxo e a hierarquia das chamadas de API implementadas pelo script personalizado para automatizar a implantação do conjunto de pilhas.

![\[Controle de fluxo e chamadas de API implementados pelo script Python\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/1898883a-62b7-40c2-8f08-9f2a9dda8404.png)


**Exemplos de arquivos de configuração de implantação**

**Criação de um novo conjunto de pilhas**

O arquivo de configuração de implantação a seguir cria um novo conjunto de pilhas chamado `sample-stack-set` na região da AWS `us-east-1` em três OUs.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implantação de um conjunto de pilhas existente em outra UO**

Se você implantar a configuração mostrada no exemplo anterior e quiser implantar o conjunto de pilhas em uma UO adicional chamada `dev-org-unit-2` no ambiente de desenvolvimento, o arquivo de configuração de implantação poderá ter a seguinte aparência.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implantação de um conjunto de pilhas existente em outra região da AWS**

Se você implantar a configuração mostrada no exemplo anterior e quiser implantar o conjunto de pilhas em uma região adicional da AWS (`us-east-2`) no ambiente de desenvolvimento para dois OUs (`dev-org-unit-1`e`dev-org-unit-2`), o arquivo de configuração de implantação pode ter a seguinte aparência. 

**nota**  
Os recursos no CloudFormation modelo devem ser válidos e específicos da região.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Remover uma instância de pilha de uma UO ou região da AWS**

Digamos que a configuração de implantação mostrada no exemplo anterior tenha sido implantada. O arquivo de configuração a seguir remove as instâncias da pilha das duas regiões da UO `dev-org-unit-2`.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"],
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

O arquivo de configuração a seguir remove a instância de pilha da região da AWS `us-east-1` para ambas OUs no ambiente de desenvolvimento.    

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Apagamento de todo o conjunto de pilhas**

O arquivo de configuração de implantação a seguir apaga todo o conjunto de pilhas e todas as instâncias de pilha associadas.

```
{
     "deployment_action": "delete",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

* ***Exclusão de uma conta da implantação**

 O arquivo de configuração de implantação a seguir exclui a conta `111122223333`, que faz parte da UO `dev-org-unit-1`, da implantação.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333"],
                                        "filter_type": "DIFFERENCE"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Implantando o aplicativo em um subconjunto de contas em uma UO**

O arquivo de configuração de implantação a seguir implanta o aplicativo em apenas três contas (`111122223333`, `444455556666` e`777788889999`) na UO `dev-org-unit-1`.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333", "444455556666", "777788889999"],
                                        "filter_type": "INTERSECTION"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

# Anexe automaticamente uma política gerenciada da AWS para Systems Manager aos perfis de EC2 instância usando o Cloud Custodian e o AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour e Aaron Lennon, Amazon Web Services*

## Resumo
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Você pode integrar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) com o AWS Systems Manager para automatizar tarefas operacionais e fornecer mais visibilidade e controle. Para se integrarem ao Systems Manager, EC2 as instâncias devem ter um [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) instalado e uma política do `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) anexada aos seus perfis de instância. 

No entanto, se você quiser garantir que todos os perfis de EC2 instância tenham a `AmazonSSMManagedInstanceCore` política anexada, você pode enfrentar desafios para atualizar novas EC2 instâncias que não tenham perfis de instância ou EC2 instâncias que tenham um perfil de instância, mas não tenham a `AmazonSSMManagedInstanceCore` política. Também pode ser difícil adicionar essa política em várias contas da Amazon Web Services (AWS) e regiões da AWS.

Esse padrão ajuda a resolver esses desafios implantando três políticas de [Cloud Custodian](https://cloudcustodian.io/) em suas contas da AWS:
+ A primeira política do Cloud Custodian verifica as EC2 instâncias existentes que têm um perfil de instância, mas não têm a `AmazonSSMManagedInstanceCore` política. A política `AmazonSSMManagedInstanceCore` é então anexada. 
+ A segunda política do Cloud Custodian verifica as EC2 instâncias existentes sem um perfil de instância e adiciona um perfil de instância padrão que tem a `AmazonSSMManagedInstanceCore` política anexada.
+ A terceira política do Cloud Custodian cria funções do [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) em suas contas para monitorar a criação de instâncias e perfis EC2 de instância. Isso garante que a `AmazonSSMManagedInstanceCore` política seja anexada automaticamente quando uma EC2 instância é criada.

Esse padrão usa [as DevOps ferramentas da AWS](https://aws.amazon.com/devops/) para obter uma implantação contínua e em grande escala das políticas do Cloud Custodian em um ambiente de várias contas, sem provisionar um ambiente computacional separado. 

## Pré-requisitos e limitações
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Pré-requisitos **
+ Duas ou mais contas ativas da AWS. Uma conta é a *conta de segurança* e as outras são *contas de membros*.
+ Permissões para provisionar recursos na conta de segurança. Esse padrão usa [permissões de administrador](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), mas você deve conceder permissões de acordo com os requisitos e as políticas da sua organização.
+ Capacidade de assumir um perfil do IAM da conta de segurança até as contas dos membros e criar os perfis do IAM necessários. Para obter mais informações, consulte [Delegar acesso entre contas da AWS usando perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) na documentação do IAM.
+ 
**Importante**  
AWS Command Line Interface (AWS CLI), instalada e configurada. Para fins de teste, você pode configurar a AWS CLI usando o comando `aws configure` ou definindo variáveis de ambiente. : Isso não é recomendado para ambientes de produção, e recomendamos que esta conta receba somente acesso com privilégio mínimo. Para obter mais informações, consulte [Conceder privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) na documentação do IAM.
+ O arquivo `devops-cdk-cloudcustodian.zip` (anexado), transferido por download para o computador local.
+ Familiaridade com o Python.
+ As ferramentas necessárias (Node.js, AWS Cloud Development Kit (AWS CDK) e Git), instaladas e configuradas. Você pode usar o arquivo `install-prerequisites.sh` no arquivo `devops-cdk-cloudcustodian.zip` para** **instalar essas ferramentas.** **Certifique-se de executar esse arquivo com privilégios de raiz. 

**Limitações**
+ Embora esse padrão possa ser usado em um ambiente de produção, certifique-se de que todas as políticas e perfis do IAM atendam aos requisitos e políticas da sua organização. 

**Versões do pacote**
+ Cloud Custodian versão 0.9 ou mais recente
+ TypeScript versão 3.9.7 ou posterior
+ Node.js versão 14.15.4 ou superior
+ `npm` versão 7.6.1 ou mais recente
+ AWS CDK versão 1.96.0 ou superior

## Arquitetura
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

O diagrama mostra o seguinte fluxo de trabalho:

1. As políticas do Cloud Custodian são enviadas para um CodeCommit repositório da AWS na conta de segurança. Uma regra da Amazon CloudWatch Events inicia automaticamente o CodePipeline pipeline da AWS.

1. O pipeline busca o código mais recente CodeCommit e o envia para a parte de integração contínua do pipeline de integração contínua e entrega contínua (CI/CD) gerenciado pela AWS. CodeBuild

1. CodeBuild executa as DevSecOps ações completas, incluindo a validação da sintaxe da política nas políticas do Cloud Custodian, e executa essas políticas no `--dryrun` modo de verificar quais recursos foram identificados.

1. Se não houver erros, a próxima tarefa alertará o administrador para revisar as alterações e aprovar a implantação nas contas dos membros.

**Pilha de tecnologia**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automação e escala**

O módulo de pipelines do AWS CDK provisiona um CI/CD pipeline que é usado CodePipeline para orquestrar a criação e o teste do código-fonte CodeBuild, além da implantação de recursos da AWS com pilhas da AWS. CloudFormation É possível usar esse padrão para todas as contas-membro e regiões da organização. Você também pode estender a pilha `Roles creation` para implantar outros perfis do IAM em suas contas de membros. 

## Ferramentas
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [O AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio da AWS. CloudFormation
+ O [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de construção totalmente gerenciado na nuvem.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que você pode usar para armazenar e gerenciar ativos de forma privada.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software.
+ O [AWS Identity and Access Management  ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)é um serviço da web que ajuda você a controlar o acesso aos recursos da AWS com segurança.
+ O [Cloud Custodian](https://cloudcustodian.io/) é uma ferramenta que unifica dezenas de ferramentas e os scripts que muitas organizações usam para gerenciar suas contas de nuvem pública em uma ferramenta de código aberto.
+ [O Node.js](https://nodejs.org/en/) é um JavaScript tempo de execução criado no JavaScript motor V8 do Google Chrome.

**Código **

Para obter uma lista detalhada dos módulos, perfis da conta, arquivos e comandos de implantação usados nesse padrão, consulte o arquivo `README` no arquivo `devops-cdk-cloudcustodian.zip` (em anexo).

## Épicos
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configure o pipeline com o AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o CodeCommit repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Para obter mais informações sobre isso, consulte [Criação de um CodeCommit repositório](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) na CodeCommit documentação da AWS. | Desenvolvedor | 
| Instale as ferramentas necessárias | Use o arquivo `install-prerequisites.sh` para instalar todas as ferramentas necessárias no Amazon Linux. Não inclui a AWS CLI porque ela vem pré-instalada.Para obter mais informações, consulte [Pré-requisitos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) na seção de [Conceitos básicos do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) na documentação do AWS CDK. | Desenvolvedor | 
| Instale os pacotes AWS CDK obrigatórios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Os pacotes a seguir são exigidos pelo AWS CDK e estão incluídos no arquivo `requirements.txt`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desenvolvedor | 

### Configure o ambiente
<a name="configure-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize as variáveis necessárias. | Abra o `vars.py` arquivo na pasta raiz do seu CodeCommit repositório e atualize as seguintes variáveis:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desenvolvedor | 
| Atualize o arquivo account.yml com as informações da conta do membro. | Para executar a ferramenta [c7n-org Cloud Custodian](https://cloudcustodian.io/docs/tools/c7n-org.html) em várias contas, você deve colocar o arquivo de configuração `accounts.yml` na raiz do repositório. Veja a seguir um exemplo de arquivo de configuração do Cloud Custodian para AWS:<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Desenvolvedor | 

### Inicialize as contas da AWS
<a name="bootstrap-the-aws-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize a conta de segurança. | Inicialize `deploy_account` com o aplicativo `cloudcustodian_stack` executando o seguinte comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Desenvolvedor | 
| Opção 1: inicialize automaticamente as contas dos membros. | Se a variável `cdk_bootstrap_member_accounts` for definida como para `True` no arquivo `vars.py`, as contas especificadas na variável `member_accounts` serão automaticamente inicializadas pelo pipeline.Se necessário, é possível atualizar `*cdk_bootstrap_role*` com um perfil do IAM que você pode assumir a partir da conta de segurança e que tem as permissões necessárias para inicializar o AWS CDK.Novas contas adicionadas à variável `member_accounts ` são inicializadas automaticamente pelo pipeline para que os perfis necessários possam ser implantados. | Desenvolvedor | 
| Opção 2: inicialize manualmente as contas dos membros.  | Embora não seja recomendável usar essa abordagem, você pode definir o valor de `cdk_bootstrap_member_accounts` para `False` e executar essa etapa manualmente executando o seguinte comando:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Certifique-se de que os valores de `{security_account_id}` e `{role_name}` sejam atualizados com o nome de um perfil do IAM que possa ser assumido usando a conta de segurança e que tenha as permissões exigidas para inicializar o AWS CDK.Você também pode usar outras abordagens para inicializar as contas dos membros, por exemplo, com a AWS CloudFormation. Para obter mais informações, consulte [Inicialização](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) na documentação do AWS CDK. | Desenvolvedor | 

### Implante as pilhas de AWS CDK
<a name="deploy-the-aws-cdk-stacks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os perfis do IAM nas contas dos membros. | Execute o seguinte comando para implantar a pilha `member_account_roles_stack` e criar os perfis do IAM nas contas-membro:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Desenvolvedor | 
| Implante a pilha de pipeline do Cloud Custodian. | Execute o seguinte comando para criar o pipeline `cloudcustodian_stack.py` do Cloud Custodian que é implantado na conta de segurança:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Desenvolvedor | 

## Recursos relacionados
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Conceitos básicos do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Anexos
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)

# Crie CI/CD pipelines e clusters do Amazon ECS automaticamente para microsserviços usando o AWS CDK
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk"></a>

*Varsha Raju, Amazon Web Services*

## Resumo
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-summary"></a>

Esse padrão descreve como criar automaticamente a integração contínua e a entrega contínua (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipelines) que você pode personalizar ou alterar de acordo com os requisitos da sua organização. 

A abordagem do padrão cria um ambiente de produção e um ambiente de não produção, cada um com uma nuvem privada virtual (VPC) e um cluster do Amazon ECS configurado para ser executado em duas zonas de disponibilidade. Esses ambientes são compartilhados por todos os seus microsserviços e, em seguida, você cria um CI/CD pipeline para cada microsserviço. Esses CI/CD pipelines extraem alterações de um repositório de origem na AWS CodeCommit, criam automaticamente as alterações e, em seguida, as implantam em seus ambientes de produção e não produção. Quando um pipeline conclui com êxito todas as suas etapas, você pode usá-lo URLs para acessar o microsserviço nos ambientes de produção e não produção.

## Pré-requisitos e limitações
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da Amazon Web Services (AWS).
+ Um bucket do Amazon Simple Storage Service (Amazon S3) existente que contém o arquivo `starter-code.zip` (anexado)
+ AWS Cloud Development Kit (AWS CDK), instalado e configurado. Para obter mais informações, consulte [Conceitos básicos do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) na documentação do AWS CDK.
+ Python 3 e `pip` instalado e configurado Para obter mais informações, consulte a [documentação do Phyton](https://www.python.org/).
+ Familiaridade com o AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS e AWS Fargate.
+ Familiaridade com o Docker.
+ Uma compreensão de CI/CD DevOps e.

**Limitações**
+ Os limites gerais da conta da AWS se aplicam. Para obter mais informações, consulte [Service Quotas da AWS](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html), na documentação de Referência geral da AWS.

**Versões do produto**
+ Esse código foi testado usando o Nose.js versão 16.13.0 e o AWS CDK versão 1.132.0.

## Arquitetura
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-architecture"></a>

![\[Nuvem AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/05ac2cad-408e-433f-8150-0a2b71f63cfd/images/6fa3dbef-88de-4b3f-ae41-dfa90256a058.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Um desenvolvedor de aplicativos confirma o código em um CodeCommit repositório.

1. Um pipeline é inicializado.

1. CodeBuild cria e envia a imagem do Docker para um repositório Amazon ECR

1. CodePipeline implanta uma nova imagem em um serviço Fargate existente em um cluster Amazon ECS não produtivo.

1. O Amazon ECS extrai a imagem do repositório Amazon ECR para um serviço Fargate que não é de produção.

1. O teste é realizado usando um URL que não é de produção.

1. O gerente de lançamento aprova a implantação de produção.

1. CodePipeline implanta a nova imagem em um serviço Fargate existente em um cluster Amazon ECS de produção

1. O Amazon ECS extrai a imagem do repositório Amazon ECR para um serviço Fargate de produção.

1. Os usuários de produção acessam seu atributo usando uma URL de produção.

**Pilha de tecnologia**
+ AWS CDK
+ CodeBuild
+ CodeCommit 
+ CodePipeline
+ Amazon ECR 
+ Amazon ECS 
+ Amazon VPC

**Automação e escala**

Você pode usar a abordagem desse padrão para criar pipelines para microsserviços implantados em uma pilha compartilhada da AWS. CloudFormation A automação pode criar mais de um cluster do Amazon ECS em cada VPC e também criar pipelines para microsserviços implantados em um cluster compartilhado do Amazon ECS. No entanto, isso exige que você forneça novas informações de recursos como entradas para a pilha do pipeline.

## Ferramentas
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-tools"></a>
+ [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html) — O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio da AWS. CloudFormation
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — CodeBuild A AWS é um serviço de construção totalmente gerenciado na nuvem. CodeBuild compila seu código-fonte, executa testes de unidade e produz artefatos prontos para serem implantados.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — CodeCommit A AWS é um serviço de controle de versão que permite que você armazene e gerencie de forma privada repositórios Git na nuvem da AWS. CodeCommit elimina a necessidade de você gerenciar seu próprio sistema de controle de origem ou se preocupar com a escalabilidade de sua infraestrutura.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — CodePipeline A AWS é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software. Você pode modelar e configurar rapidamente os diferentes estágios de um processo de lançamento de software. CodePipeline automatiza as etapas necessárias para liberar suas alterações de software continuamente.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido que é usado na execução, interrupção e gerenciamento de contêineres em um cluster. Você pode executar tarefas e serviços em uma infraestrutura com tecnologia sem servidor gerenciada pelo AWS Fargate. Como alternativa, para ter mais controle da infraestrutura, é possível executar tarefas e serviços em um cluster de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que você gerencia.
+ [Docker](https://www.docker.com/): o Docker ajuda os desenvolvedores a empacotar, enviar e executar facilmente qualquer aplicativo como um contêiner leve, portátil e autossuficiente.

**Código**

O código desse padrão está disponível nos arquivos `cicdstarter.zip` e `starter-code.zip` (anexado).

## Épicos
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o diretório de trabalho para o AWS CDK.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestrutura de nuvem | 

### Crie a infraestrutura compartilhada
<a name="create-the-shared-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a infraestrutura compartilhada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestrutura de nuvem | 
| Monitore a CloudFormation pilha da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestrutura de nuvem | 
| Teste a CloudFormation pilha da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Certifique-se de registrar o IDs para os dois VPCs e o grupo de segurança IDs para os grupos de segurança padrão em ambos VPCs. | AWS DevOps, infraestrutura de nuvem | 

### Crie um CI/CD pipeline para um microsserviço
<a name="create-a-ci-cd-pipeline-for-a-microservice"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a infraestrutura para o microsserviço. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Além disso, é possível fornecer os valores para os dois comandos por meio do arquivo `cdk.json` presente no diretório. | AWS DevOps, infraestrutura de nuvem | 
| Monitore a CloudFormation pilha da AWS. | Abra o CloudFormation console da AWS e monitore o progresso da `myservice1-cicd-stack` pilha. Eventualmente, o status muda para `CREATE_COMPLETE`*.* | AWS DevOps, infraestrutura de nuvem | 
| Teste a CloudFormation pilha da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) |  | 
| Use o pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infraestrutura de nuvem | 
| Repita esse épico para cada microsserviço. | Repita as tarefas neste épico para criar um CI/CD pipeline para cada um dos seus microsserviços. | AWS DevOps, infraestrutura de nuvem | 

## Recursos relacionados
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-resources"></a>
+ [Usando Python com o AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-python.html) 
+ [Referência do AWS CDK em Python](https://docs.aws.amazon.com/cdk/api/latest/python/index.html)
+ [Criação de um serviço AWS Fargate usando o AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html)

## Mais informações
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-additional"></a>

**Comando da `cdk synth`**

```
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
```

**`cdk deploy `command**

```
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice> 
```

## Anexos
<a name="attachments-05ac2cad-408e-433f-8150-0a2b71f63cfd"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/05ac2cad-408e-433f-8150-0a2b71f63cfd/attachments/attachment.zip)

# Crie e envie imagens do Docker para o Amazon ECR usando GitHub Actions e Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Resumo
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Esse padrão explica como você pode criar GitHub fluxos de trabalho reutilizáveis para criar seu Dockerfile e enviar a imagem resultante para o Amazon Elastic Container Registry (Amazon ECR). O padrão automatiza o processo de criação de seus Dockerfiles usando o Terraform e o Actions. GitHub Isso minimiza a possibilidade de erros humanos e reduz consideravelmente o tempo de implantação.

Uma ação GitHub push para a ramificação principal do seu GitHub repositório inicia a implantação dos recursos. O fluxo de trabalho cria um repositório Amazon ECR exclusivo com base na combinação da GitHub organização e do nome do repositório. Em seguida, o fluxo envia a imagem do Dockerfile para o repositório do Amazon ECR.

## Pré-requisitos e limitações
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma GitHub conta ativa.
+ Um [GitHub repositório.](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ O Terraform, na versão 1 ou em versões posteriores, [instalado e configurado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Um bucket do Amazon Simple Storage Service (Amazon S3) para o [backend do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3).
+ Uma tabela do [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) para controle de bloqueio e consistência do estado do Terraform. A tabela deve ter uma chave de partição chamada `LockID`, do tipo `String`. Se isso não for configurado, o bloqueio de estado será desabilitado.
+ Um perfil do AWS Identity and Access Management (IAM) com permissões para configurar o backend do Amazon S3 para o Terraform. Para obter instruções de configuração, consulte a [documentação do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limitações**

Esse código reutilizável foi testado somente com GitHub Actions.

## Arquitetura
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Pilha de tecnologias de destino**
+ Repositório do Amazon ECR
+ GitHub Ações
+ Terraform

**Arquitetura de destino**

![\[Fluxo de trabalho para criar GitHub fluxos de trabalho reutilizáveis para criar Dockerfile e enviar imagens para o Amazon ECR.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


O diagrama ilustra o seguinte:

1. Um usuário adiciona modelos do Dockerfile e do Terraform ao repositório. GitHub 

2. Essas adições iniciam um fluxo de trabalho de GitHub ações.

3. O fluxo de trabalho verifica a existência de um repositório do Amazon ECR. Caso contrário, ele cria o repositório com base na GitHub organização e no nome do repositório.

4. O fluxo de trabalho cria o Dockerfile e envia a imagem para o repositório do Amazon ECR.

## Ferramentas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Serviço da Amazon**
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de contêiner, que é seguro, escalável e confiável.

**Outras ferramentas**
+ GitHub O [Actions](https://docs.github.com/en/actions) é integrado à GitHub plataforma para ajudar você a criar, compartilhar e executar fluxos de trabalho em seus GitHub repositórios. Você pode usar o GitHub Actions para automatizar tarefas como criar, testar e implantar seu código.
+ [O Terraform](https://developer.hashicorp.com/terraform/intro) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar a infraestrutura na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Quando você cria GitHub ações, os arquivos do fluxo de trabalho do Docker são salvos na `/.github/workflows/` pasta desse repositório. O fluxo de trabalho desta solução encontra-se no arquivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ A pasta `e2e-test` disponibiliza um Dockerfile de amostra para referência e testes.

## Práticas recomendadas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Para obter as práticas recomendadas para a escrita de Dockerfiles, consulte a [documentação do Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Use um [endpoint da VPC para o Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Os VPC endpoints são desenvolvidos pela AWS PrivateLink, uma tecnologia que permite que você acesse o Amazon APIs ECR de forma privada por meio de endereços IP privados. Para as tarefas do Amazon ECS que usam o tipo de execução do Fargate, o endpoint da VPC permite que a tarefa realize a extração de imagens privadas do Amazon ECR sem atribuir um endereço IP público à tarefa.

## Épicos
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configurar o provedor e o repositório do OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o OpenID Connect. | Crie um provedor de OpenID Connect (OIDC) Você usará o provedor na política de confiança para o perfil do IAM usado nesta ação. Para obter instruções, consulte [Configuração do OpenID Connect na Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub na documentação. | Administrador da AWS, AWS DevOps, AWS geral | 
| Clone o GitHub repositório. | Clone o repositório GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) em sua pasta local:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps engenheiro | 

### Personalize o fluxo de trabalho GitHub reutilizável e implante a imagem do Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize o evento que inicia o fluxo de trabalho do Docker. | O fluxo de trabalho desta solução encontra-se em [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). No momento, este script está configurado para implantar recursos quando recebe o evento `workflow_dispatch`. É possível personalizar esta configuração alterando o evento para `workflow_call` e chamando o fluxo de trabalho usando outro fluxo de trabalho principal. | DevOps engenheiro | 
| Personalize o fluxo de trabalho. | O arquivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) está configurado para criar um fluxo de trabalho dinâmico e reutilizável. GitHub Você pode editar esse arquivo para personalizar a configuração padrão ou pode passar os valores de entrada do console GitHub Actions se estiver usando o `workflow_dispatch` evento para iniciar a implantação manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps engenheiro | 
| Implante os modelos do Terraform. | O fluxo de trabalho implanta automaticamente os modelos do Terraform que criam o repositório Amazon ECR, com base no evento que você configurou. GitHub Estes modelos estão disponíveis como arquivos `.tf` no [diretório raiz do repositório do GitHub](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps engenheiro | 

## Solução de problemas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Problemas ou erros ao configurar o Amazon S3 e o DynamoDB como o backend remoto do Terraform. | Siga as instruções apresentadas na [documentação do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) para configurar as permissões necessárias nos recursos do Amazon S3 e do DynamoDB para a configuração do backend remoto. | 
| Não é possível executar ou iniciar o fluxo de trabalho com o evento `workflow_dispatch`. | O fluxo de trabalho que está configurado para realizar a implantação usando o evento `workflow_dispatch` funcionará apenas se o fluxo de trabalho também estiver configurado na ramificação principal. | 

## Recursos relacionados
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Reutilização de fluxos de trabalho (documentação](https://docs.github.com/en/actions/using-workflows/reusing-workflows)) GitHub 
+ [Acionando um fluxo de trabalho (documentação](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 

# Crie e teste aplicativos iOS com AWS CodeCommit CodePipeline, AWS e AWS Device Farm
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Resumo
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-summary"></a>

Esse padrão descreve as etapas para criar um pipeline de integração contínua e entrega contínua (CI/CD) que usa CodePipeline a AWS para criar e testar aplicativos iOS em dispositivos reais na AWS. O padrão usa CodeCommit a AWS para armazenar o código do aplicativo, a ferramenta de código aberto Jenkins para criar o aplicativo iOS e o AWS Device Farm para testar o aplicativo criado em dispositivos reais. Essas três fases são orquestradas juntas em um pipeline usando a AWS. CodePipeline

Esse padrão é baseado na postagem [Criando e testando aplicativos iOS e iPadOS com a AWS DevOps e serviços móveis](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) no DevOps blog da AWS. Para obter instruções detalhadas, consulte a postagem do blog.

## Pré-requisitos e limitações
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma conta de desenvolvedor da Apple
+ Servidor de compilação (macOS)
+ [Xcode](https://developer.apple.com/xcode/) versão 11.3 (instalado e configurado no servidor de compilação)
+ AWS Command Line Interface (AWS CLI), [instalada](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) e [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) na estação de trabalho
+ Conhecimento básico do [Git](https://git-scm.com/docs)

**Limitações **
+ O servidor de compilação do aplicativo deve estar executando o macOS. 
+ O servidor de compilação deve ter um endereço IP público, para que CodePipeline possa se conectar a ele remotamente para iniciar as compilações.

## Arquitetura
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-architecture"></a>

**Pilha de tecnologia de origem**
+ Um processo de criação de aplicativo iOS on-premises que envolve o uso de um simulador ou teste manual em dispositivos físicos

**Pilha de tecnologias de destino**
+ Um CodeCommit repositório da AWS para armazenar o código-fonte do aplicativo
+ Um servidor Jenkins para compilações de aplicativos usando o Xcode
+ Um pool de dispositivos do AWS Device Farm para testar aplicativos em dispositivos reais

**Arquitetura de destino**

Quando um usuário confirma alterações no repositório de origem, o pipeline CodePipeline (AWS) busca o código do repositório de origem, inicia uma compilação do Jenkins e passa o código do aplicativo para o Jenkins. Após a construção, o pipeline recupera o artefato de construção e inicia um trabalho do AWS Device Farm para testar o aplicativo em um pool de dispositivos.

 

![\[O pipeline de CI/CD usa CodePipeline a AWS para criar e testar aplicativos iOS em dispositivos reais.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/06fbd82f-4aed-441c-818c-5f89f56af78e/images/0ae3d7b6-b40c-44ef-9580-8c8266c3d841.png)


## Ferramentas
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-tools"></a>
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) é um serviço de entrega contínua totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. CodePipeline automatiza as fases de criação, teste e implantação do seu processo de lançamento sempre que houver uma alteração no código, com base no modelo de lançamento que você define.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de origem totalmente gerenciado que hospeda repositórios seguros baseados em Git. Isso facilita a colaboração das equipes no código em um ecossistema seguro e altamente escalável. CodeCommit elimina a necessidade de operar seu próprio sistema de controle de origem ou a preocupação com a escalabilidade de sua infraestrutura.
+ O [AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) é um serviço de teste de aplicações que permite melhorar a qualidade dos aplicativos web e móveis, testando-os em uma ampla variedade de navegadores com área de trabalho e dispositivos móveis reais, sem a necessidade de provisionar e gerenciar qualquer infraestrutura de teste.
+ [Jenkins](https://www.jenkins.io/): é um servidor de automação de código aberto que permite aos desenvolvedores construir, testar e implantar seu software.

## Épicos
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-epics"></a>

### Configurar o ambiente de construção
<a name="set-up-the-build-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o Jenkins no servidor de compilação que está executando o macOS. | O Jenkins será usado para criar o aplicativo, portanto, primeiro você deve instalá-lo no servidor de compilação. Para obter instruções detalhadas para essa tarefa e para as tarefas subsequentes, consulte a postagem do blog da AWS [Criando e testando aplicativos iOS DevOps e iPadOS com a AWS e serviços móveis](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) e outros [recursos na seção Recursos relacionados](#build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources) no final desse padrão. | DevOps | 
| Configure o Jenkins. | Siga as instruções da tela para configurar o Jenkins. | DevOps | 
| Instale o CodePipeline plug-in da AWS para Jenkins. | Esse plug-in deve ser instalado no servidor Jenkins para que o Jenkins interaja com o serviço da AWS CodePipeline . | DevOps | 
| Crie um projeto de estilo livre no Jenkins. | No Jerkins, crie um projeto de estilo livre. Configure o projeto para especificar acionadores e outras opções de configuração de compilação. | DevOps | 

### Configurar o AWS Device Farm
<a name="configure-aws-device-farm"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um projeto Device Farm. | Abra o console do AWS Device Farm. Crie um projeto e um pool de dispositivos para testes. Para obter instruções, consulte a publicação do blog. | Desenvolvedor | 

### Configurar o repositório de origem
<a name="configure-the-source-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um CodeCommit repositório. | Crie um repositório onde o código-fonte será armazenado. | DevOps | 
| Confirma o código do seu aplicativo para o repositório. | Conecte-se ao CodeCommit repositório que você criou. Enviar o código de sua máquina local para o repositório. | DevOps | 

### Configure o pipeline
<a name="configure-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um pipeline na AWS CodePipeline. | Abra o CodePipeline console da AWS e crie um pipeline. O pipeline orquestra todas as fases do CI/CD processo. Para obter instruções, consulte a postagem do blog da AWS [Criando e testando aplicativos iOS e iPadOS com a AWS DevOps e serviços móveis](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/). | DevOps | 
| Adicionar um estágio de teste ao pipeline. | Para adicionar uma etapa de teste e integrá-la ao AWS Device Farm, edite o pipeline. | DevOps | 
| Inicie o pipeline. | Para iniciar o pipeline e o CI/CD processo, escolha **Release change**. | DevOps | 

### Veja os resultados dos testes de aplicativos
<a name="view-application-test-results"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Revisar os resultados do teste. | No console do AWS Device Farm, selecione o projeto que você criou e analise os resultados dos testes. O console mostrará os detalhes de cada teste. | Desenvolvedor | 

## Recursos relacionados
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources"></a>

**Step-by-step instruções para esse padrão**
+ [Criação e teste de aplicativos iOS e iPadOS com a AWS DevOps e serviços móveis](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) (publicação DevOps no blog da AWS)

**Configurar o AWS Device Farm**
+ [Console AWS Device Farm](https://console.aws.amazon.com/devicefarm)

**Configurar o repositório de origem**
+ [Crie um CodeCommit repositório da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)
+ [Conecte-se a um CodeCommit repositório da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)

**Configurar o pipeline**
+ [ CodePipeline Console AWS](https://console.aws.amazon.com/codesuite/codepipeline/home)

**Recursos adicionais**
+ [ CodePipeline Documentação da AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [ CodeCommit Documentação da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)
+ [Documentação do AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html)
+ [Documentação do Jenkins](https://www.jenkins.io/doc/)
+ [Instalação do Jenkins no macOS](https://www.jenkins.io/download/weekly/macos/)
+ [ CodePipeline Plug-in AWS para Jenkins](https://plugins.jenkins.io/aws-codepipeline/)
+ [Instalação do Xcode](https://developer.apple.com/xcode/)
+ [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) e [configuração](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) da AWS CLI
+ [Documentação do Git](https://git-scm.com/docs)

# Configurar a autenticação de TLS mútuo para aplicativos em execução no Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumo
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

O Transport Layer Security (TLS) mútuo baseado em certificado é um componente opcional do TLS que fornece autenticação bidirecional entre servidores e clientes. Com o TLS mútuo, os clientes devem fornecer um certificado X.509 durante o processo de negociação da sessão. O servidor usa esse certificado para identificar e autenticar o cliente.

O TLS mútuo é um requisito comum para aplicativos da Internet das Coisas (IoT) e pode ser usado business-to-business para aplicativos ou padrões [como](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html) o Open Banking.

Esse padrão descreve como configurar o TLS mútuo para aplicativos em execução em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) usando um controlador de entrada NGINX. Você pode habilitar atributos de TLS mútuos integrados para o controlador de entrada NGINX anotando o recurso de entrada. Para obter mais informações sobre anotações de TLS mútuas em controladores NGINX, consulte [Autenticação de certificado de cliente](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) na documentação do Kubernetes.

**Importante**  
Esse padrão usa certificados autoassinados. Recomendamos que você use esse padrão apenas com clusters de teste e não em ambientes de produção. Se quiser usar esse padrão em um ambiente de produção, você pode usar a [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) ou seu padrão existente de infraestrutura de chave pública (PKI) para emitir certificados privados.

## Pré-requisitos e limitações
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da Amazon Web Services (AWS).
+ Um cluster do Amazon EKS existente.
+ AWS Command Line Interface (AWS CLI) versão 1.7 ou superior, instalada e configurada no macOS, Linux ou Windows.
+ O utilitário de linha de comando kubectl, instalado e configurado para acessar o cluster do Amazon EKS. Para obter mais informações , consulte [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS.
+ Um nome de Sistema de Nomes de Domínio (DNS) existente para testar o aplicativo.

**Limitações**
+ Esse padrão usa certificados autoassinados. Recomendamos que você use esse padrão apenas com clusters de teste e não em ambientes de produção.

## Arquitetura
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![\[Configurar a autenticação de TLS mútuo para aplicativos em execução no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Pilha de tecnologia**
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Ferramentas
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) é um utilitário de linha de comando que você usa para interagir com um cluster do Amazon EKS.

## Épicos
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Gerar os certificados autoassinados
<a name="generate-the-self-signed-certificates"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Gerar o certificado e a chave de CA. | Gere a chave e o certificado da autoridade de certificação (CA) executando o comando a seguir.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps engenheiro | 
| Gerar a chave e o certificado do servidor e assinar com o certificado CA. | Gerar a chave e o certificado do servidor e assinar com o certificado CA, executando o seguinte comando.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Certifique-se de substituir `<your_domain_name>` pelo seu nome de domínio existente. | DevOps engenheiro | 
|  Gerar a chave e o certificado de cliente e assinar com o certificado CA. | Gere a chave e o certificado do cliente e assine com o certificado CA, executando os seguintes comandos.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps engenheiro | 

### Implementar o controlador de entrada NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar o controlador de entrada do NGINX no seu cluster do Amazon EKS. | Implante o controlador de entrada do NGINX com o comando a seguir.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps engenheiro | 
|  Verificar se o serviço do controlador de entrada do NGINX está em execução. | Verifique se o serviço do controlador de entrada do NGINX está em execução.<pre>kubectl get svc -n ingress-nginx</pre>Certifique-se de que o campo do endereço de serviço contenha o nome de domínio do Network Load Balancer. | DevOps engenheiro | 

### Criar um namespace no cluster do Amazon EKS para testar o TLS mútuo
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um namespace no cluster do Amazon EKS.  | Crie um namespace chamado `mtls` no seu cluster do Amazon EKS, executando o comando a seguir. <pre>kubectl create ns mtls</pre>Isso implanta o aplicativo de exemplo para testar o TLS mútuo. | DevOps engenheiro | 

### Criar a implantação e o serviço para o aplicativo de exemplo
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar a implantação e o serviço do Kubernetes no namespace mtls. | Crie um arquivo chamado `mtls.yaml`. Cole o seguinte código no arquivo. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre> Crie a implantação e o serviço do Kubernetes no `mtls` namespace, executando o comando a seguir.<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps engenheiro | 
| Verificar se a implantação do Kubernetes foi criada. | Execute o comando a seguir para verificar se a implantação foi criada e se tem um pod no status disponível.<pre>kubectl get deploy -n mtls</pre> | DevOps engenheiro | 
| Verificar se o serviço Kubernetes foi criado. | Verifique se o serviço do Kubernetes foi criado, executando o comando a seguir.<pre>kubectl get service -n mtls</pre> | DevOps engenheiro | 

### Criar um segredo no namespace mtls
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um segredo para o recurso de entrada. | Execute o comando a seguir para criar um segredo para o controlador de entrada NGINX usando os certificados que você criou anteriormente.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre>Seu segredo tem um certificado de servidor para o cliente identificar o servidor e um certificado CA para o servidor verificar os certificados do cliente. | DevOps engenheiro | 

### Criar o recurso de entrada no namespace mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar o recurso de ingresso no namespace mtls. | Crie um arquivo chamado `ingress.yaml`. Cole o código a seguir no arquivo (substitua `<your_domain_name>` pelo nome de domínio existente).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre>Crie o recurso de entrada no namespace `mtls` executando o comando a seguir.<pre>kubectl create -f ingress.yaml -n mtls</pre>Isso significa que o controlador de ingresso NGINX pode rotear o tráfego para seu aplicativo de exemplo. | DevOps engenheiro | 
| Verificar se o recurso de ingresso foi criado. | Verifique se o recurso de ingresso foi criado, executando o comando a seguir.<pre>kubectl get ing -n mtls</pre>Certifique-se de que o endereço do recurso de entrada exiba o balanceador de carga criado para o controlador de entrada NGINX. | DevOps engenheiro | 

### Configurar o DNS para apontar o nome do host para o balanceador de carga
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um registro CNAME que aponte para o balanceador de carga do controlador de entrada NGINX. | Faça login no Console de Gerenciamento da AWS, abra o console do Amazon Route 53 e crie um registro de nome canônico (CNAME) que aponta `mtls.<your_domain_name>` para o balanceador de carga do controlador de entrada NGINX.Para obter informações, consulte [Criar registros usando o console do Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) no Guia do desenvolvedor do Amazon Route 53. | DevOps engenheiro | 

### Teste a aplicação
<a name="test-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Testar a configuração de TLS mútuo sem certificados. | Execute o comando a seguir.<pre>curl -k https://mtls.<your_domain_name> </pre>Você deve receber a resposta de erro “400 Nenhum certificado SSL obrigatório foi enviado”. | DevOps engenheiro | 
| Testar a configuração de TS mútuo com certificados. | Execute o comando a seguir.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre>Você deve receber a resposta “O mTLS está processando”. | DevOps engenheiro | 

## Recursos relacionados
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Criar registros usando o console do Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Usar um Network Load Balancer com o controlador de entrada NGINX no Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Autenticação de certificado de cliente](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)

# Automatize a criação de recursos da Amazon WorkSpaces Applications usando AWS CloudFormation
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumo
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-summary"></a>

Esse padrão fornece exemplos de código e etapas para automatizar a criação de recursos da [Amazon WorkSpaces Applications](https://aws.amazon.com/workspaces/applications/) no Nuvem AWS usando um [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)modelo. O padrão mostra como usar uma CloudFormation pilha para automatizar a criação dos recursos do aplicativo WorkSpaces Applications, incluindo um construtor de imagens, imagem, instância de frota e pilha. Você pode transmitir seu aplicativo de WorkSpaces aplicativos para usuários finais em um navegador HTML5 compatível usando o modo de entrega de aplicativos ou desktop.

## Pré-requisitos e limitações
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Uma aceitação dos termos e condições das WorkSpaces inscrições
+ [Conhecimento básico de recursos de WorkSpaces aplicativos, como [frotas e pilhas e criadores](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html) de imagens](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-image-builders.html)

**Limitações**
+ Você não pode modificar a função [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) associada a uma instância de WorkSpaces aplicativos após a criação dessa instância.
+ Você não pode modificar propriedades (como a [sub-rede](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics) ou o [grupo de segurança](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)) na instância do construtor de imagens do WorkSpaces Applications após a criação desse criador de imagens.

## Arquitetura
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-architecture"></a>

O diagrama a seguir mostra como automatizar a criação de recursos de WorkSpaces aplicativos usando um CloudFormation modelo.

![\[Fluxo de trabalho para criar automaticamente recursos de WorkSpaces aplicativos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4f0205f5-5b91-4832-9f0f-2135ae866226/images/cb578939-d9af-4f60-93c9-286881df4c3a.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Você cria um CloudFormation modelo com base no código YAML na seção [Informações adicionais](#automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional) desse padrão.

1. O CloudFormation modelo cria uma pilha CloudFormation de testes.

   1. (Opcional) Você cria uma instância do construtor de imagens usando WorkSpaces aplicativos.

   1. (Opcional) Você cria uma imagem do Windows usando seu software personalizado.

1. A CloudFormation pilha cria uma instância e uma pilha da frota de WorkSpaces aplicativos.

1. Você implanta seus recursos de WorkSpaces aplicativos para usuários finais em um HTML5 navegador compatível.

## Ferramentas
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-tools"></a>
+ O [Amazon WorkSpaces Applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/what-is-appstream.html) é um serviço de streaming de aplicativos totalmente gerenciado que fornece acesso instantâneo aos seus aplicativos de desktop de qualquer lugar. WorkSpaces Os aplicativos gerenciam AWS os recursos necessários para hospedar e executar seus aplicativos, escalam automaticamente e fornecem acesso aos usuários sob demanda.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a modelar e configurar seus AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida. Você pode usar um modelo para descrever seus recursos e as dependências deles, além de inicializá-los e configurá-los juntos como uma pilha, em vez de gerenciar recursos individualmente. Você pode gerenciar e provisionar pilhas em vários Contas da AWS e. Regiões da AWS

## Práticas recomendadas
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-best-practices"></a>
+ **Configure o acesso à rede para criadores de imagens corretamente** — Inicie os criadores de imagens em sub-redes de nuvem privada virtual (VPC) com acesso adequado à Internet usando um gateway NAT para acesso somente de saída à Internet.

  Teste a conectividade da rede com os recursos necessários (como servidores de aplicativos, bancos de dados e servidores de licenciamento) antes de criar imagens. Verifique se as tabelas de rotas da VPC permitem conexões com todos os recursos de rede necessários. Para obter mais informações, consulte [Acesso à Internet](https://docs.aws.amazon.com/appstream2/latest/developerguide/internet-access.html) na documentação de WorkSpaces aplicativos.
+ **Monitore a capacidade da frota em relação às cotas de serviço de forma proativa** — WorkSpaces as cotas de tipo e tamanho de instância de aplicativos são por, por Conta da AWS. Região da AWS Se você tiver várias frotas na mesma região que usam o mesmo tipo e tamanho de instância, o número total de instâncias em todas as frotas dessa região deverá ser menor ou igual à cota aplicável. Para obter mais informações, consulte [Solução de problemas de frotas](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-fleets.html) na documentação de WorkSpaces aplicativos.
+ **Teste aplicativos no modo de teste do Image Builder antes da implantação da frota** — Sempre valide os aplicativos no modo de teste do Image Builder antes de criar imagens e implantá-las em frotas. O modo de teste simula as permissões limitadas que os usuários finais têm nas instâncias da frota. Para obter mais informações, consulte [Solução de problemas de criadores de imagens](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-image-builder.html#troubleshooting-07) na documentação de WorkSpaces aplicativos.

## Épicos
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-epics"></a>

### (Opcional) Crie uma imagem de WorkSpaces aplicativos
<a name="optional-create-a-aas2-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale um software personalizado e crie uma imagem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html)Considere usar o AppLocker recurso do Windows para bloquear ainda mais a imagem. | AWS DevOps, arquiteto de nuvem | 

### Implante o CloudFormation modelo
<a name="deploy-the-cfn-template"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize o CloudFormation modelo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Administrador de sistemas da AWS, administrador de nuvem, arquiteto de nuvem, AWS geral, administrador da AWS | 
| Crie uma CloudFormation pilha usando o modelo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Proprietário do aplicativo, administrador de sistemas da AWS, engenheiro do Windows | 

## Solução de problemas
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Vários problemas | Para obter mais informações, consulte [Solução de problemas](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting.html) na documentação de WorkSpaces aplicativos. | 

## Recursos relacionados
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-resources"></a>

**Referências**
+ [Comece a usar os WorkSpaces aplicativos da Amazon: configure com aplicativos de amostra](https://docs.aws.amazon.com/appstream2/latest/developerguide/getting-started.html)
+ [Crie uma frota e uma pilha de WorkSpaces aplicativos da Amazon](https://docs.aws.amazon.com/appstream2/latest/developerguide/set-up-stacks-fleets.html)

**Tutoriais e vídeos**
+ [Fluxo de trabalho do usuário do Amazon WorkSpaces Applications](https://www.youtube.com/watch?v=hVGQ87-Uhrc)
+ [Como migrar um aplicativo Windows Forms antigo para aplicativos da Amazon WorkSpaces ](https://www.youtube.com/watch?v=CIImtS2iVbg)
+ [AWS re:Invent 2018: entregue aplicativos de desktop com segurança com os aplicativos da Amazon (01) WorkSpaces BAP2](https://www.youtube.com/watch?v=xNIyc_inOhM)

## Mais informações
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional"></a>

O código a seguir é um exemplo de um CloudFormation modelo que você pode usar para criar automaticamente recursos de WorkSpaces aplicativos.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubnetIds:
    Type: 'List<AWS::EC2::Subnet::Id>'
  testSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup::Id'
  ImageName:
    Type: String
Resources:
  
  AppStreamFleet:
    Type: 'AWS::AppStream::Fleet'
    Properties:
      ComputeCapacity:
        DesiredInstances: 5
      InstanceType: stream.standard.medium
      Name: appstream-test-fleet
      DisconnectTimeoutInSeconds: 1200
      FleetType: ON_DEMAND
      IdleDisconnectTimeoutInSeconds: 1200
      ImageName: !Ref ImageName
      MaxUserDurationInSeconds: 345600
      VpcConfig:
        SecurityGroupIds:
          - !Ref testSecurityGroup
        SubnetIds: !Ref SubnetIds
  AppStreamStack:
    Type: 'AWS::AppStream::Stack'
    Properties:
      Description: AppStream stack for test
      DisplayName: AppStream test Stack
      Name: appstream-test-stack
      StorageConnectors:
        - ConnectorType: HOMEFOLDERS
      UserSettings:
        - Action: CLIPBOARD_COPY_FROM_LOCAL_DEVICE
          Permission: ENABLED
        - Action: CLIPBOARD_COPY_TO_LOCAL_DEVICE
          Permission: ENABLED
        - Action: FILE_DOWNLOAD
          Permission: ENABLED
        - Action: PRINTING_TO_LOCAL_DEVICE
          Permission: ENABLED
  AppStreamFleetAssociation:
    Type: 'AWS::AppStream::StackFleetAssociation'
    Properties:
      FleetName: appstream-test-fleet
      StackName: appstream-test-stack
    DependsOn:
      - AppStreamFleet
      - AppStreamStack
```

# Crie um analisador de log personalizado para o Amazon ECS usando um roteador de log Firelens
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router"></a>

*Varun Sharma, Amazon Web Services*

## Resumo
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-summary"></a>

O Firelens é um roteador de log do Amazon Elastic Container Service (Amazon ECS) e do AWS Fargate. [Você pode usar o Firelens para rotear registros de contêineres do Amazon ECS para a Amazon CloudWatch e outros destinos (por exemplo, [Splunk](https://www.splunk.com/) ou Sumo Logic).](https://www.sumologic.com/) O Firelens funciona com o [Fluentd](https://www.fluentd.org/) ou o [Fluent Bit](https://fluentbit.io/) como agente de registro, o que significa que você pode usar os [ parâmetros de definição de tarefas do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) para rotear logs.

Ao optar por analisar os logs no nível da fonte, você pode analisar seus dados de registro e realizar consultas para responder de forma mais eficiente e eficaz aos problemas operacionais. Como aplicativos diferentes têm padrões de log diferentes, você precisa usar um analisador personalizado que estruture os logs e facilite a pesquisa em seu destino final.

Esse padrão usa um roteador de log Firelens com um analisador personalizado para enviar registros de um aplicativo Spring Boot CloudWatch de amostra executado no Amazon ECS. Em seguida, você pode usar o Amazon CloudWatch Logs Insights para filtrar os registros com base nos campos personalizados gerados pelo analisador personalizado. 

## Pré-requisitos e limitações
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da Amazon Web Services (AWS).
+ AWS Command Line Interface (AWS CLI), instalada e configurada na sua máquina local.
+ Docker, instalado e configurado em sua máquina local.
+ Um aplicativo em contêineres existente baseado no Spring Boot no Amazon Elastic Container Registry (Amazon ECR). 

## Arquitetura
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-architecture"></a>

![\[Usando um roteador de log Firelens para enviar registros CloudWatch de um aplicativo executado no Amazon ECS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/images/ef60e087-965a-40e9-9f80-35edbda2befe.png)


**Pilha de tecnologia**
+ CloudWatch
+ Amazon ECR
+ Amazon ECS
+ Fargate
+ Docker
+ Fluent Bit

## Ferramentas
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-tools"></a>
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html): o Amazon Elastic Container Registry (Amazon ECR) é um serviço de registro de imagem de contêiner, seguro, escalável e confiável.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): o IAM é um serviço web que ajuda você a controlar, com segurança, o acesso a serviços da AWS.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): a AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ [Docker](https://www.docker.com/): o Docker é uma plataforma aberta para desenvolvimento, envio e execução de aplicativos.

**Código **

Os arquivos a seguir estão anexados a esse padrão:
+ `customFluentBit.zip`: contém os arquivos para adicionar a análise e as configurações personalizadas.
+ `firelens_policy.json`: contém o documento de política para criar uma política do IAM.
+ `Task.json`: contém um exemplo de definição de tarefa para o Amazon.

## Épicos
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-epics"></a>

### Crie uma imagem personalizada do Fluent Bit
<a name="create-a-custom-fluent-bit-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | Cadastre-se no Console de Gerenciamento da AWS, abra o console do Amazon ECR e crie um repositório chamado `fluentbit_custom`.Para obter mais informações sobre isso, consulte [Criação de um repositório](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) na documentação do Amazon ECR. | Administrador de sistemas, Desenvolvedor | 
| Descompacte o customFluentBit pacote.zip. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) |  | 
| Crie a imagem do Docker personalizada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Para obter mais informações, consulte [Envio de uma imagem do Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) na documentação do Amazon ECR.  | Administrador de sistemas, Desenvolvedor | 

### Configure o cluster do Amazon ECS
<a name="set-up-the-amazon-ecs-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do Amazon ECS. | Crie um cluster do Amazon ECS seguindo as instruções da seção de *Modelos somente para redes* em [Criação de um cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) na documentação do Amazon ECS.Certifique-se de selecionar **Criar VPC** para criar uma nova nuvem privada virtual (VPC) para o cluster do Amazon ECS. | Administrador de sistemas, Desenvolvedor | 

### Configurar a tarefa do Amazon ECS
<a name="set-up-the-amazon-ecs-task"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Configure o perfil do IAM de execução de tarefas do Amazon ECS. | Crie um perfil do IAM de execução de tarefas do Amazon ECS usando a `AmazonECSTaskExecutionRolePolicy` política gerenciada. Para obter mais informações sobre isso, consulte [Perfil do IAM para execução de tarefas do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) na documentação do Amazon ECS.Certifique-se de registrar o nome do recurso da Amazon (ARN) do perfil do IAM. | Administrador de sistemas, Desenvolvedor | 
|  Anexe a política do IAM ao perfil do IAM de execução de tarefas do Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrador de sistemas, Desenvolvedor | 
| Configuração da definição de tarefa do Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Para obter mais informações sobre isso, consulte [Criação de uma definição de tarefa](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) na documentação do Amazon ECR. | Administrador de sistemas, Desenvolvedor | 

### Execute uma tarefa do Amazon ECS.
<a name="run-the-amazon-ecs-task"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute uma tarefa do Amazon ECS.  | No console do Amazon ECS, escolha **Clusters**, escolha o cluster que você criou anteriormente e, em seguida, execute a tarefa autônoma.Para obter mais informações sobre isso, consulte [Executar uma tarefa independente](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html) na documentação do Amazon ECR. | Administrador de sistemas, Desenvolvedor | 

### Verifique os CloudWatch registros
<a name="verify-the-cloudwatch-logs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verificar os logs.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrador de sistemas, Desenvolvedor | 

## Recursos relacionados
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-resources"></a>
+ [Noções básicas do Docker para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) 
+ [Amazon ECS no AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 
+ [Configuração de parâmetros básicos de serviço](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) 

## Anexos
<a name="attachments-e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/attachments/attachment.zip)

# Crie uma estrutura de orquestração de recursos baseada em API usando Actions e Terragrunt GitHub
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande e Akash Kumar, Amazon Web Services*

## Resumo
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Esse padrão aproveita os fluxos de trabalho do GitHub Actions para automatizar o provisionamento de recursos por meio de cargas JSON padronizadas, eliminando a necessidade de configuração manual. Esse pipeline automatizado gerencia o ciclo de vida completo da implantação e pode se integrar perfeitamente a vários sistemas de front-end, desde componentes de interface de usuário personalizados até. ServiceNow Graças à flexibilidade da solução, os usuários podem interagir com o sistema por meio das interfaces de sua preferência, enquanto os processos permanecem padronizados.

A arquitetura de pipeline configurável pode ser adaptada para atender a diferentes requisitos organizacionais. Esta implementação de exemplo tem como foco o provisionamento da Amazon Virtual Private Cloud (Amazon VPC) e do Amazon Simple Storage Service (Amazon S3). O padrão aborda de forma eficaz os desafios comuns de gerenciamento de recursos em nuvem, padronizando solicitações em toda a organização e fornecendo pontos de integração consistentes. Com esta abordagem, as equipes conseguem solicitar e gerenciar recursos com mais facilidade, mantendo a padronização.

## Pré-requisitos e limitações
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Uma GitHub conta ativa com acesso ao repositório configurado

**Limitações**
+ A inclusão de novos recursos requer a adição manual de arquivos `terragrunt.hcl` na configuração do repositório.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

O diagrama apresentado a seguir ilustra os componentes e o fluxo de trabalho deste padrão.

![\[Fluxo de trabalho para automatizar o provisionamento de recursos com GitHub Actions e Terraform.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


O diagrama da arquitetura ilustra as seguintes ações:

1. O usuário envia uma carga JSON para GitHub Actions, acionando o pipeline de automação.

1. O pipeline de GitHub ações recupera o código dos recursos necessários dos repositórios Terragrunt e Terraform, com base nas especificações da carga útil.

1. O pipeline assume a função apropriada AWS Identity and Access Management (IAM) usando o Conta da AWS ID especificado. Em seguida, o pipeline implanta os recursos no destino Conta da AWS e gerencia o estado do Terraform usando o bucket Amazon S3 específico da conta e a tabela do Amazon DynamoDB.

Cada um Conta da AWS contém funções do IAM para acesso seguro, um bucket Amazon S3 para armazenamento de estado do Terraform e uma tabela do DynamoDB para bloqueio de estado. Esse design possibilita a implantação automatizada e controlada de recursos entre Contas da AWS. O processo de implantação mantém o gerenciamento adequado do estado e o controle de acesso por meio de buckets do Amazon S3 e de perfis do IAM dedicados em cada conta.

## Ferramentas
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Serviços da AWS**
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ GitHub O [Actions](https://docs.github.com/en/actions) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.
+ O [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) é uma ferramenta de orquestração que amplia os recursos dos dois e do Terraform. OpenTofu Ele gerencia como padrões genéricos de infraestrutura são aplicados, facilitando a escalabilidade e a manutenção de grandes ambientes de infraestrutura.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Práticas recomendadas
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Armazene AWS credenciais e dados confidenciais usando segredos GitHub do repositório para acesso seguro.
+ Configure o provedor OpenID Connect (OIDC) para que o GitHub Actions assuma a função do IAM, evitando credenciais estáticas.
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Criação e configuração do repositório
<a name="create-and-configure-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize o GitHub repositório. | Para inicializar o GitHub repositório, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps engenheiro | 
| Configure as permissões e os perfis do IAM. | Para realizar a configuração das permissões e dos perfis do IAM, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps engenheiro | 
| Configure GitHub segredos e variáveis. | Para obter instruções sobre como configurar segredos e variáveis do repositório no GitHub repositório, consulte [Criação de variáveis de configuração para um repositório na documentação](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository). GitHub Configure as seguintes variáveis:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps engenheiro | 
| Crie a estrutura do repositório. | Para criar a estrutura do repositório, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps engenheiro | 

### Acionamento do pipeline e validação dos resultados
<a name="trigger-the-pipeline-and-validate-results"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o pipeline usando curl.  | Para executar o pipeline por meio do [curl](https://curl.se/), use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Para obter mais informações sobre o processo de execução do pipeline, consulte [Informações adicionais](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps engenheiro | 
| Validação dos resultados referentes à execução do pipeline | Para validar os resultados, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Você também pode verificar novamente os recursos criados usando o arquivo `output.json`, gerado no repositório que está localizado no mesmo recurso que o arquivo `terragrunt.hcl`. | DevOps engenheiro | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envie uma solicitação de limpeza. | Para excluir recursos que não são mais necessários, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps engenheiro | 

## Recursos relacionados
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blogs**
+ [Use funções do IAM para conectar GitHub ações a ações no AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**AWS service (Serviço da AWS) documentação**
+ [Criação de função do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Monitoramento CloudTrail de arquivos de log com o Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Melhores práticas de segurança para o Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub recursos**
+ [Create a repository dispatch event](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Criação de webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implemente controles de acesso robustos no GitHub repositório](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Regularly audit repository access](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Verificações de segurança em CI/CD andamento](https://github.com/marketplace/actions/checkov-github-action)
+ [Use a autenticação multifatorial para contas GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Mais informações
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Processo de execução do pipeline**

A seguir, apresentamos as etapas do processo de execução do pipeline:

1. **Validação do formato da carga útil em JSON**: garante que a configuração JSON recebida está estruturada de forma adequada e contém todos os parâmetros necessários

1. **Assume a função do IAM especificada** - autentica e assume a função do IAM necessária para as operações AWS 

1. **Download do código necessário do Terraform e do Terragrunt**: recupera a versão especificada do código do recurso e suas dependências

1. **Executa a implantação de recursos** - aplica a configuração para implantar ou atualizar AWS recursos no ambiente de destino

**Exemplo de carga útil usada para a criação de uma VPC**

A seguir, apresentamos um exemplo de código para a criação do bucket de estado do backend do Terraform:

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Confira a seguir um exemplo de carga útil para criar uma VPC com a Amazon VPC, na qual o parâmetro `vpc_cidr` define as especificações do [bloco CIDR](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) para a VPC. O bucket de estado do Terraform é mapeado para uma variável definida nos arquivos `terraform`. O parâmetro `ref` contém o nome da ramificação do código a ser executado.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

Os `RequestParameters` são usados para acompanhar o status da solicitação na seção do pipeline, e o `tfstate` é criado com base nessas informações. Os seguintes parâmetros contêm metadados e informações de controle:
+ `RequestId`: identificador exclusivo da solicitação
+ `RequestType`: tipo de operação (criação, atualização ou exclusão)
+ `ResourceType`: tipo de recurso a ser provisionado
+ `AccountId`— Alvo Conta da AWS para implantação
+ `AccountAlias`— Nome amigável para o Conta da AWS
+ `RegionId`— Região da AWS para implantação de recursos
+ `ApplicationName`: nome da aplicação
+ `DivisionName`: divisão da organização
+ `EnvironmentId`: ambiente (por exemplo, desenvolvimento e produção)
+ `Suffix`: identificador adicional para os recursos

Os `ResourceParameters` contêm a configuração específica do recurso, que mapeia para variáveis definidas nos arquivos do Terraform Quaisquer variáveis personalizadas que precisem ser transferidas para os módulos do Terraform devem ser incluídas nos `ResourceParameters`. O parâmetro `vpc_cidr` é obrigatório para a Amazon VPC.

# Crie pull requests automatizados para a AWS infraestrutura gerenciada pelo Terraform usando Actions GitHub
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

*Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay e Prafful Gupta, Amazon Web Services*

## Resumo
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

Este padrão apresenta um utilitário de automação projetado para eliminar o trabalho manual e repetitivo envolvido no gerenciamento de alterações em diversos repositórios do Terraform. Várias organizações usam repositórios do Terraform para gerenciar a infraestrutura como código (IaC) que, frequentemente, conta com centenas de repositórios distintos que representam variados ambientes, serviços ou equipes. O gerenciamento desses repositórios em grande escala representa um desafio operacional significativo. Tarefas rotineiras, como atualizar um parâmetro, atualizar versões de módulos ou aplicar alterações na configuração, geralmente exigem a criação e o gerenciamento de pull requests (PRs) em vários repositórios várias vezes ao dia.

Até mesmo para pequenas alterações, esse processo manual e repetitivo é demorado e sujeito a erros. É necessário que os engenheiros apliquem de forma consistente a mesma alteração em todos os repositórios de destino e elaborem títulos e descrições de PR relevantes. Além disso, esses profissionais frequentemente precisam interagir com ferramentas externas, como o Jira, para buscar ou incluir referências de rastreamento de problemas. Embora necessárias, essas tarefas são trabalhos pesados e padronizados que ocupam tempo valioso dos engenheiros e comprometem a eficiência geral. A ausência de automação neste fluxo de trabalho cria problemas, diminui a velocidade de entrega e eleva a sobrecarga mental das equipes encarregadas da manutenção de infraestruturas do Terraform em grande escala.

**Visão geral da solução**

Para enfrentar esse desafio, este padrão oferece um utilitário totalmente orientado por configuração, permitindo que os usuários definam as alterações desejadas em um arquivo de configuração estruturado. Neste arquivo, os repositórios de destino, módulos, parâmetros e valores são especificados com base em um esquema claramente definido.

Uma vez configurado, o utilitário executa as seguintes etapas automatizadas:

1. **Realiza a leitura da configuração definida pelo usuário** para determinar o escopo e a natureza das alterações

1. **Cria uma nova ramificação** em cada repositório de destino com as atualizações necessárias aplicadas

1. **Gera uma PR** para cada alteração, garantindo consistência entre todos os repositórios

1. **Envia notificações do Slack** (opcional) para alertar as partes interessadas com links diretos para o criado PRs

Ao automatizar essas tarefas repetitivas, o utilitário reduz significativamente o tempo, o esforço e o risco associados ao gerenciamento de atualizações de infraestrutura em grande escala. O utilitário permite que as equipes se concentrem em trabalhos de engenharia de maior valor, ao mesmo tempo em que ajuda a garantir que as alterações sejam aplicadas de forma consistente e possam ser rastreadas em todos os repositórios.

## Pré-requisitos e limitações
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Python versão 3.8 ou posterior.
+ Um token de acesso GitHub pessoal (PAT). Para obter mais informações, consulte [Criação de um token de acesso pessoal (clássico)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) na GitHub documentação.
+ O GitHub PAT pode acessar seus repositórios de destino para que o utilitário possa realizar operações como criar ramificações e pull requests. Para obter mais informações, consulte o [repositório de GitHub código](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) desse padrão.

**Limitações**
+ A **complexidade da configuração** representa o principal desafio. A eficácia da automação é limitada pelas funcionalidades presentes no arquivo de configuração. Enquanto alterações padrão são tratadas de forma eficiente pelo sistema, modificações complexas na infraestrutura podem exigir intervenção manual, e alguns casos específicos permanecem fora do escopo da automação.
+ A **segurança e o acesso** apresentam considerações significativas, especialmente no gerenciamento de tokens de GitHub acesso e limites de taxa de API. É fundamental que as organizações conciliem cuidadosamente a necessidade de automação com o armazenamento e o gerenciamento seguros de credenciais, garantindo controles de acesso adequados sem comprometer a eficiência operacional.
+ As **restrições de validação** representam outra limitação significativa, pois o sistema automatizado tem capacidade limitada para validar a lógica de negócio e os requisitos específicos de cada ambiente. As dependências complexas e as interações entre serviços frequentemente requerem supervisão humana, já que a validação automatizada não consegue capturar integralmente todas as nuances contextuais e as regras de negócios.
+ Problemas de **escala e de performance** surgem ao lidar com alterações em infraestrutura de grande escala. O sistema deve operar dentro dos limites GitHub da API enquanto gerencia vários repositórios simultaneamente. As operações intensivas em recursos que são realizadas em uma infraestrutura extensa podem causar gargalos de performance, requerendo gerenciamento cuidadoso.
+ **Os limites de integração** restringem a flexibilidade do sistema porque ele foi projetado principalmente para funcionar com ferramentas específicas, como GitHub o Slack. As organizações que usam ferramentas distintas podem precisar de soluções customizadas, e as possibilidades de customização do fluxo de trabalho deste padrão estão limitadas aos pontos de integração compatíveis.

## Arquitetura
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

O diagrama apresentado a seguir ilustra o fluxo de trabalho e os componentes para esta solução.

![\[Fluxo de trabalho para criar pull requests automatizados usando GitHub Ações.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


O fluxo de trabalho consiste nas seguintes etapas:

1. O desenvolvedor aciona GitHub ações especificando o repositório do Terraform.

1. O utilitário de automação lê as configurações que foram definidas.

1. O utilitário de automação também extrai o repositório do Terraform fornecido.

1. O utilitário de automação cria uma nova ramificação e realiza atualizações nos modelos do Terraform localmente.

1. O utilitário de automação envia a nova ramificação ao repositório e cria uma nova PR. 

1. O utilitário de automação usa notificações do Slack que incluem links de relações públicas para notificar os desenvolvedores e habilita a implantação de modelos do Terraform. Nuvem AWS 

## Ferramentas
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)é uma plataforma para desenvolvedores que os desenvolvedores podem usar para criar, armazenar, gerenciar e compartilhar seu código.
+ GitHub O [Actions](https://docs.github.com/en/actions) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.
+ [HashiCorp O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) que ajuda você a criar e gerenciar recursos na nuvem e no local.
+ O [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), uma solução da Salesforce, consiste em uma plataforma de conversação com tecnologia de IA que oferece colaboração por chat e vídeo, automatiza processos no-code e facilita o compartilhamento de informações.

**Repositório de código**

O código desse padrão está disponível no [fluxo de trabalho GitHub automatizado de atualização da infraestrutura do Terraform usando o repositório GitHub Actions](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file).

## Práticas recomendadas
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ O **gerenciamento eficaz de alterações** é essencial para uma implementação com êxito. As organizações devem adotar uma estratégia de implementação gradual para mudanças em grande escala. Mantenha convenções consistentes de nomenclatura para as ramificações e descrições de PRs, e assegure que todas as alterações estejam devidamente documentadas.
+ Os **controles de segurança** devem ser implementados rigorosamente, com foco nos princípios de acesso com privilégios mínimos e no gerenciamento seguro de credenciais. Habilite regras de proteção para ramificações com a finalidade de impedir alterações não autorizadas. Realize auditorias de segurança regularmente para manter a integridade do sistema.
+ Um **protocolo de testes** robusto deve incluir a execução automatizada do `terraform plan` em pipelines de integração e de implantação contínuas (CI/CD). Além disso, o protocolo deve contemplar verificações de validação anteriores à confirmação e ambientes de análise dedicados a alterações críticas. Essa abordagem de testes em várias camadas contribui para a identificação antecipada de problemas e assegura a estabilidade da infraestrutura.
+ A **estratégia de monitoramento** precisa abranger mecanismos de alerta abrangentes, rastreamento detalhado de success/failure métricas e mecanismos automatizados de repetição para operações com falha. Essa estratégia ajuda a garantir visibilidade operacional e permite uma resposta rápida a quaisquer problemas que surgirem.
+ Os **padrões de configuração** devem enfatizar o controle de versão de todas as configurações, mantendo a modularidade para reutilização e escalabilidade. A documentação clara do esquema e a inclusão de exemplos ajudam as equipes a compreender e aplicar corretamente o sistema de automação.

## Épicos
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Instalação e configuração
<a name="installation-and-setup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o repositório. | Para configurar o repositório, execute os seguintes comandos:<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | AWS DevOps | 
| Instale as dependências. | Para instalar e verificar as dependências do Python, execute os seguintes comandos:<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | AWS DevOps | 
| Configure o GitHub token. | Para configurar o GitHub token e verificar se ele funciona, execute os seguintes comandos:<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Definição do arquivo de configuração para as alterações no Terraform
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o arquivo `config.yaml`. | Para definir os repositórios de destino e as alterações desejadas, edite o arquivo `config.yam`l conforme mostrado a seguir:<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Teste e validação
<a name="test-and-validate"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Realize testes preliminares. | Sempre teste sua configuração antes de executá-la em repositórios de produção. Use os seguintes comandos:<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | AWS DevOps | 
| Verifique o acesso ao repositório. | Para verificar se o GitHub token pode acessar o repositório, execute o seguinte comando:<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Execução do utilitário de automação
<a name="run-the-automation-utility"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o utilitário de automação usando a interface de usuário do GitHub Actions. | Para executar o utilitário de automação usando a interface de usuário do GitHub Actions, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 
| (Como alternativa) Execute o utilitário de automação usando a linha de comando. | Se preferir, você pode executar o utilitário de automação na linha de comando em vez de usar a interface do usuário do GitHub Actions. Use o seguinte comando:<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Validação PRs e alterações
<a name="validate-prs-and-changes"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Revise o criado PRs e as alterações. | Para monitorar os resultados da execução do GitHub fluxo de trabalho, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| (Opcional) Limpe PRs. | Feche abandonado ou desnecessário PRs. | AWS DevOps | 

## Recursos relacionados
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Orientação prescritiva**
+ [Usando o Terraform como uma ferramenta IaC para o Nuvem AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub documentação**
+ [About pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [Entendendo GitHub as ações](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Guia de início rápido para ações GitHub ](https://docs.github.com/en/actions/get-started/quickstart)

# Criar pipelines dinâmicos de CI para projetos Java e Python automaticamente
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically"></a>

*Aromal Raj Jayarajan, Vijesh Vijayakumaran Nair, MAHESH RAGHUNANDANAN e Amarnath Reddy, Amazon Web Services*

## Resumo
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-summary"></a>

Este padrão mostra como criar pipelines dinâmicos de integração contínua (CI) para projetos Java e Python automaticamente usando as ferramentas de desenvolvedor da AWS.

À medida que as pilhas de tecnologia se diversificam e as atividades de desenvolvimento aumentam, pode se tornar difícil criar e manter pipelines de CI consistentes em toda a organização. Ao automatizar o processo no AWS Step Functions, você pode garantir que o uso e a abordagem de seus pipelines de CI sejam consistentes.

Para automatizar a criação de pipelines dinâmicos de CI, esse padrão usa as seguintes entradas variáveis:
+ Linguagem de programação (somente Java ou Python)
+ Nome do pipeline
+ Etapas necessárias do pipeline

**nota**  
O Step Functions orquestra a criação do pipeline usando vários serviços da AWS. Para obter mais informações sobre os serviços da AWS usados nesta solução, consulte a seção **Ferramentas** deste padrão.

## Pré-requisitos e limitações
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um bucket do Amazon S3 na mesma região da AWS em que essa solução está sendo implantada
+ Um [diretor](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) do AWS Identity and Access Management (IAM) que tem as CloudFormation permissões da AWS necessárias para criar os recursos necessários para essa solução

**Limitações**
+ Este padrão é compatível somente com projetos Java e Python.
+ Os perfis do IAM provisionados neste padrão seguem o princípio do privilégio mínimo. As permissões deste perfil do IAM devem ser atualizadas com base nos recursos específicos que seu pipeline precisa criar.

## Arquitetura
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Systems Manager
+ AWS Step Functions
+ AWS Lambda
+ Amazon DynamoDB

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de fluxo de trabalho para criar automaticamente pipelines dinâmicos de CI para projetos Java e Python usando ferramentas de desenvolvedor da AWS.

![\[Fluxo de trabalho para criar automaticamente pipelines dinâmicos de CI para projetos Java e Python usando ferramentas da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/bef2ccb8-68b3-4c0f-9ee7-4b93e9422d9c/images/b5ed003f-cf16-4130-8bfb-2bc2cb9a0d33.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Um usuário da AWS fornece os parâmetros de entrada para a criação do pipeline de CI no formato JSON. Esta entrada inicia um fluxo de trabalho do Step Functions (*máquina de estado*) que cria um pipeline de CI usando as ferramentas de desenvolvedor da AWS.

1. Uma função do Lambda lê uma pasta chamada **input-reference**, que é armazenada em um bucket do Amazon S3 e, em seguida, gera um arquivo** buildspec.yml**. Esse arquivo gerado define os estágios do pipeline de CI e é armazenado novamente no mesmo bucket do Amazon S3 que armazena as referências de parâmetros.

1. O Step Functions verifica se há alterações nas dependências do fluxo de trabalho de criação do pipeline de CI e atualiza a pilha de dependências conforme necessário.

1. O Step Functions cria os recursos do pipeline de CI em uma CloudFormation pilha, incluindo um CodeCommit repositório, um CodeBuild projeto e um CodePipeline pipeline.

1. A CloudFormation pilha copia o código-fonte de amostra para a pilha de tecnologia selecionada (Java ou Python) e o arquivo **buildspec.yml para o repositório**. CodeCommit 

1. Os detalhes do runtime do pipeline de CI são armazenados em uma tabela do DynamoDB.

**Automação e escala**
+ Este padrão deve ser usado somente em um único ambiente de desenvolvimento. As alterações de configuração são necessárias para uso em vários ambientes de desenvolvimento.
+ Para adicionar suporte para mais de uma CloudFormation pilha, você pode criar CloudFormation modelos adicionais. Para obter mais informações, consulte [Conceitos básicos da AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html) na CloudFormation documentação.

## Ferramentas
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-tools"></a>

**Ferramentas**
+ O [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) é um serviço de orquestração de 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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é 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.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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 Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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 [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ O [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) oferece armazenamento hierárquico seguro para o gerenciamento de dados de configuração e gerenciamento de segredos.

**Código **

O código desse padrão está disponível no GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositório. O repositório contém os CloudFormation modelos necessários para criar a arquitetura de destino descrita nesse padrão.

## Práticas recomendadas
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-best-practices"></a>
+ Não insira credenciais (*segredos*), como tokens ou senhas, diretamente nos CloudFormation modelos ou nas configurações de ação do Step Functions. Se você fizer isso, as informações serão exibidas nos logs do DynamoDB. Em vez disso, use o AWS Secrets Manager para configurar e armazenar segredos. Em seguida, faça referência aos segredos armazenados no Secrets Manager nos CloudFormation modelos e nas configurações de ação do Step Functions, conforme necessário. Para obter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) na documentação do Secrets Manager.
+ Configure a criptografia do lado do servidor para CodePipeline artefatos armazenados no Amazon S3. Para obter mais informações, consulte [Configurar a criptografia do lado do servidor para artefatos armazenados no Amazon S3 na documentação](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html). CodePipeline CodePipeline 
+ Aplique permissões de privilégio mínimo ao configurar perfis do IAM. Para obter mais informações, consulte [Aplicar permissões de privilégios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) na documentação do IAM.
+ Certifique-se de que seu bucket do Amazon S3 não esteja acessível publicamente. Para obter mais informações, consulte [Configuração da definição de bloqueio de acesso público para seus buckets do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) na documentação do Amazon S3.
+ Certifique-se de ativar o versionamento do seu bucket do Amazon S3. Para obter mais informações, consulte [Usar o versionamento em buckets do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) na documentação do Amazon S3.
+ Use o IAM Access Analyzer ao configurar políticas do IAM. A ferramenta fornece recomendações práticas para ajudar você a criar políticas do IAM seguras e funcionais. Para obter mais informações, consulte [Usar o AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) na documentação do IAM.
+ Quando possível, defina condições de acesso específicas ao configurar as políticas do IAM.
+ Ative o CloudWatch registro na Amazon para fins de monitoramento e auditoria. Para obter mais informações, consulte [O que é o Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) na CloudWatch documentação.

## Épicos
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-epics"></a>

### Configurar os pré-requisitos
<a name="configure-the-prerequisites"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um bucket do Amazon S3. | Crie um bucket do Amazon S3 (ou use um bucket existente) para armazenar os CloudFormation modelos, o código-fonte e os arquivos de entrada necessários para a solução.Para obter mais informações, consulte [Etapa 1: Criar o seu primeiro bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) na documentação do Amazon S3.O bucket do Amazon S3 deve estar na mesma região da AWS na qual você está implantando a solução. | AWS DevOps | 
| Clone o GitHub repositório. | Clone o GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositório executando o seguinte comando em uma janela de terminal:<pre>git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git</pre>Para obter mais informações, consulte [Clonar um repositório](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) na GitHub documentação. | AWS DevOps | 
| Faça o upload da pasta Solution Templates do GitHub repositório clonado para seu bucket do Amazon S3.  | Copie o conteúdo da pasta **Solution-Templates** clonada e faça o upload no bucket do Amazon S3 que você criou.Para obter mais informações, consulte [Fazendo upload de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) na documentação do Amazon S3.Certifique-se de fazer o upload somente do conteúdo da pasta **Solution-Templates**. Você pode fazer upload dos arquivos somente no nível raiz do bucket do Amazon S3. | AWS DevOps | 

### Implante a solução
<a name="deploy-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma CloudFormation pilha para implantar a solução usando o arquivo template.yml no repositório clonado. GitHub  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Durante a criação da pilha, ela estará listada na página **Pilhas** com um status de **CREATE\$1IN\$1PROGRESS**. Certifique-se de esperar que o status da pilha mude para **CREATE\$1COMPLETE** antes de concluir as etapas restantes desse padrão. | Administrador da AWS, AWS DevOps | 

### Testar a configuração
<a name="test-the-setup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Selecione a função que você criou.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Formatação JSON**<pre>{<br />  "details": {<br />    "tech_stack": "Name of the Tech Stack (python/java)",<br />    "project_name": "Name of the Project that you want to create with",<br />    "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />  }<br />}</pre>**Exemplo de entrada em Java JSON**<pre>{<br />  "details": {<br />    "tech_stack": "java",<br />    "project_name": "pipeline-java-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre>**Exemplo de entrada em Python JSON**<pre>{<br />  "details": {<br />    "tech_stack": "python",<br />    "project_name": "pipeline-python-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre> | Administrador da AWS, AWS DevOps | 
| Confirme se o CodeCommit repositório do pipeline de CI foi criado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Verifique os recursos CodeBuild do projeto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Valide os CodePipeline estágios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Confirme se o pipeline de CI foi executado com êxito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 

### Limpe os seus recursos
<a name="clean-up-your-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a pilha de recursos. CloudFormation | Exclua a pilha de recursos do pipeline de CI. CloudFormationPara obter mais informações, consulte [Excluir uma pilha no CloudFormation console da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) na CloudFormation documentação.Certifique-se de excluir a pilha chamada **<project\$1name>-stack**. | AWS DevOps | 
| Exclua as dependências do pipeline de CI no Amazon S3 e. CloudFormation | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Certifique-se de excluir a pilha chamada **pipeline-creation-dependencies-stack**. | AWS DevOps | 
| Consulte Excluir o bucket do modelo do Amazon S3. | Exclua o bucket do Amazon S3 que você criou na seção **Configurar os pré-requisitos** deste padrão, que armazena os modelos para esta solução.Para obter mais informações, consulte [Excluir o bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) na documentação do Amazon S3. | AWS DevOps | 

## Recursos relacionados
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-resources"></a>
+ [Creating a Step Functions state machine that uses Lambda](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) (documentação do AWS Step Functions)
+ [AWS Step Functions WorkFlow Studio](https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html) (documentação do AWS Step Functions)
+ [DevOps e AWS](https://aws.amazon.com/devops/)
+ [Como a AWS CloudFormation funciona?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html) ( CloudFormation Documentação da AWS)
+ [Completo CI/CD com AWS CodeCommit, AWS CodeBuild CodeDeploy, AWS e AWS CodePipeline](https://aws.amazon.com/blogs/devops/complete-ci-cd-with-aws-codecommit-aws-codebuild-aws-codedeploy-and-aws-codepipeline/) (publicação no blog da AWS)
+ [Cotas, requisitos de nome e limites de caracteres do IAM e AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) (documentação do IAM)

# Implante canários CloudWatch Synthetics usando o Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjee e Jean-Francois Landreau, Amazon Web Services*

## Resumo
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

É importante validar a integridade de um sistema do ponto de vista do cliente e confirmar se os clientes conseguem se conectar. Isso é mais difícil quando os clientes não chamam constantemente o endpoint. [A Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) apoia a criação de canários, que podem testar endpoints públicos e privados. Ao usar canários, você pode saber o status de um sistema mesmo que ele não esteja em uso. Esses canários são scripts Node.js Puppeteer ou scripts Python Selenium.

Esse padrão descreve como usar o HashiCorp Terraform para implantar canários que testam endpoints privados. Incorpora um script do Puppeteer que testa se um URL retorna. `200-OK` O script do Terraform pode então ser integrado ao script que implanta o endpoint privado. Também é possível modificar a solução para monitorar endpoints públicos.

## Pré-requisitos e limitações
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Pré-requisitos**
+ Uma conta ativa da Amazon Web Services (AWS) com uma nuvem privada virtual (VPC) e sub-redes privadas
+ O URL do endpoint que pode ser acessado a partir das sub-redes privadas
+ Terraform instalado no ambiente de implantação

**Limitações**

A solução atual funciona para as seguintes versões de tempo de execução do CloudWatch Synthetics:
+ syn-nodejs-puppeteer-3,4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

À medida que novas versões de runtime forem lançadas, talvez você precise atualizar a solução atual. Você também precisará modificar a solução para acompanhar as atualizações de segurança.

**Versões do produto**
+ Terraform 1.3.0

## Arquitetura
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

O Amazon CloudWatch Synthetics é baseado no CloudWatch Lambda e no Amazon Simple Storage Service (Amazon S3). A Amazon CloudWatch oferece um assistente para criar os canários e um painel que exibe o status das corridas de canários. A função do Lambda executa o script. O Amazon S3 armazena os logs e as capturas de tela das execuções canárias.

Esse padrão simula um endpoint privado por meio de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) implantada nas sub-redes de destino. A função do Lambda requer interfaces de rede elásticas na VPC em que o endpoint privado é implantado.

![\[A descrição segue o diagrama.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


O diagrama mostra o seguinte:

1. O canário Synthetics inicializa a função do Lambda do canário.

1. A função do Lambda canário se conecta à interface de rede elástica.

1. A função do Lambda canário monitora o status do endpoint.

1. O canário Synthetics envia os dados de execução para o bucket e as métricas do S3. CloudWatch 

1. Um CloudWatch alarme é iniciado com base nas métricas.

1. O CloudWatch alarme inicia o tópico Amazon Simple Notification Service (Amazon SNS).

## Ferramentas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Serviços da AWS**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus recursos da AWS e dos aplicativos que você executa na AWS em tempo real.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ A [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. Esse padrão usa endpoints da VPC e interfaces de rede elástica.

**Outros serviços**
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) de código aberto que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem. Esse padrão usa o Terraform para implantar a infraestrutura.
+ O [Puppeteer](https://pptr.dev/) é uma biblioteca Node.js. O tempo de execução do CloudWatch Synthetics usa a estrutura do Puppeteer.

**Código **

A solução está disponível no watch-synthetics-canary-terraform repositório na GitHub [nuvem](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform). Para obter mais informações, consulte a seção *Informações adicionais*.

## Épicos
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Implemente a solução para monitorar um URL privado
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Reúna os requisitos para monitorar o URL privado. | Reúna a definição completa do URL: domínio, parâmetros e cabeçalhos. Para se comunicar de forma privada com o Amazon S3 e a CloudWatch Amazon, use endpoints VPC. Observe como a VPC e as sub-redes são acessíveis ao endpoint. Considere a frequência das corridas de canários. | Arquiteto de nuvem, administrador de rede | 
| Modificar a solução existente para monitorar o URL privado. | Modificar o arquivo `terraform.tfvars`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquiteto de nuvem | 
| Implanta e opera a solução. | Para implantar a solução, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquiteto de nuvem, DevOps engenheiro | 

## Solução de problemas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A exclusão dos recursos provisionados é interrompida. | Exclua manualmente a função do Lambda canário, a interface de rede elástica correspondente e o grupo de segurança, nessa ordem. | 

## Recursos relacionados
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Usar monitoramento sintético](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Monitore os endpoints do API Gateway com o Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (publicação no blog)

## Mais informações
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefatos do repositório**

Os artefatos do repositório estão na seguinte estrutura.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

O arquivo `main.tf` contém o módulo principal e implanta dois submódulos:
+ `canary-infra` implanta a infraestrutura necessária para as canárias.
+ `canary` implanta os canários.

Os parâmetros de entrada da solução estão localizados no arquivo `terraform.tfvars`. Você pode usar o exemplo de código a seguir para criar um canário.

```
module "canary" {
    source = "./modules/canary"
    name   = var.name
    runtime_version = var.runtime_version
    take_screenshot = var.take_screenshot
    api_hostname = var.api_hostname
    api_path = var.api_path
    reports-bucket = module.canary_infra.reports-bucket
    role = module.canary_infra.role
    security_group_id = module.canary_infra.security_group_id
    subnet_ids = var.subnet_ids
    frequency = var.frequency
    alert_sns_topic = var.alert_sns_topic
}
```

O arquivo .var correspondente segue.

```
name   = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
```

**Como limpar a solução**

Se você estiver testando em um ambiente de desenvolvimento, poderá limpar a solução para evitar custos acumulados.

1. No Console de Gerenciamento da AWS, navegue até o console do Amazon S3. Esvazie o bucket do Amazon S3 que a solução criou. Certifique-se de fazer um backup dos dados, se necessário.

1. No seu ambiente de desenvolvimento, a partir do diretório `cloudwatch-synthetics-canary-terraform`, execute o comando `destroy`.

   ```
   terraform destroy
   ```

# Implemente uma ChatOps solução para gerenciar os resultados do escaneamento SAST usando o Amazon Q Developer em aplicativos de bate-papo, ações personalizadas e CloudFormation
<a name="deploy-chatops-solution-to-manage-sast-scan-results"></a>

*Anand Bukkapatnam Tirumala, Amazon Web Services*

## Resumo
<a name="deploy-chatops-solution-to-manage-sast-scan-results-summary"></a>

Esse padrão apresenta uma solução abrangente que usa o Amazon Q Developer em aplicativos de bate-papo para agilizar o gerenciamento de falhas de verificação de testes estáticos de segurança de aplicativos (SAST) relatadas. SonarQube Essa abordagem inovadora integra ações e notificações personalizadas em uma interface conversacional, permitindo processos eficientes de colaboração e tomada de decisão nas equipes de desenvolvimento.

No ambiente de desenvolvimento de software acelerado de hoje, gerenciar os resultados de verificação de SAST com eficiência é crucial para manter a qualidade e a segurança do código. No entanto, muitas organizações enfrentam os seguintes desafios significativos:
+ Atraso na conscientização de vulnerabilidades críticas devido a sistemas de notificação ineficientes
+ Processos lentos de tomada de decisão causados por fluxos de trabalho de aprovação desconectados
+ Falta de respostas imediatas e acionáveis às falhas de verificação de SAST
+ Comunicação e colaboração fragmentadas em torno das descobertas de segurança
+ Configuração manual de infraestrutura demorada e propensa a erros para ferramentas de segurança

Esses problemas geralmente levam ao aumento dos riscos de segurança, atrasos nos lançamentos e à redução da produtividade da equipe. Para enfrentar esses desafios de forma eficaz, é necessária uma solução que possa agilizar o gerenciamento de resultados de SAST, aprimorar a colaboração das equipes e automatizar o provisionamento da infraestrutura.

Os principais recursos da solução incluem:
+ **Notificações personalizadas**: alertas e notificações em tempo real são enviados diretamente aos canais de chat da equipe, garantindo o conhecimento e a ação de maneira rápida para as vulnerabilidades ou falhas da verificação de SAST.
+ **Aprovações conversacionais**: as partes interessadas podem iniciar e concluir fluxos de trabalho de aprovação dos resultados de verificação de SAST facilmente na interface de chat, acelerando os processos de tomada de decisão.
+ **Ações personalizadas**: as equipes podem definir e executar ações personalizadas com base nos resultados da verificação de SAST, como acionar automaticamente mensagens de e-mail em caso de falhas no quality gate, melhorando a capacidade de resposta aos problemas de segurança.
+ **Colaboração centralizada**: todas as discussões, decisões e ações relacionadas à verificação de SAST são mantidas em um ambiente de chat unificado, promovendo melhor colaboração e compartilhamento de conhecimento entre os membros da equipe.
+ **Infraestrutura como código (IaC)** — Toda a solução está repleta de AWS CloudFormation modelos, permitindo um provisionamento de infraestrutura mais rápido e confiável, ao mesmo tempo que reduz os erros de configuração manual.

## Pré-requisitos e limitações
<a name="deploy-chatops-solution-to-manage-sast-scan-results-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Uma função AWS Identity and Access Management (IAM) com permissões para criar e gerenciar recursos associados aos Serviços da AWS listados em [Ferramentas](#deploy-chatops-solution-to-manage-sast-scan-results-tools).
+ Um espaço de trabalho do Slack.
+ O Amazon Q Developer em aplicações de chat foi adicionado ao espaço de trabalho do Slack necessário como um plug-in. Para obter mais informações, consulte [Add apps to your Slack workspace](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) na documentação do Slack. Anote o ID do espaço de trabalho do Slack, conforme mostrado Console de gerenciamento da AWS após o registro bem-sucedido.
+ Um Amazon Q Developer configurado no cliente de aplicativos de bate-papo, com o ID do espaço de trabalho prontamente disponível para entrada no CloudFormation console. Para obter instruções, consulte [Configure a Slack client](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup) no *Guia do administrador do Amazon Q Developer em aplicações de chat*.
+ Uma conta de e-mail de origem criada e verificada no Amazon Simple Email Service (Amazon SES) para enviar mensagens de aprovação por e-mail. Para obter instruções de configuração, consulte [Creating and verifying email identities](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) no *Guia do desenvolvedor do Amazon Simple Email Service*.
+ Um endereço de e-mail de destino para receber notificações de aprovação. Esse endereço pode ser uma caixa de entrada compartilhada ou uma lista específica de distribuição da equipe.
+ Uma SonarQube instância operacional que pode ser acessada a partir do seu Conta da AWS. Para obter mais informações, consulte as [instruções SonarQube de instalação](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/).
+ Um [token de SonarQube usuário](https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) com permissões para acionar e criar projetos por meio do pipeline.

**Limitações**
+ A criação de botões de ação personalizados é um processo manual nessa solução. 
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="deploy-chatops-solution-to-manage-sast-scan-results-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho para implantar a garantia de qualidade de código automatizada para gerenciamento de versões usando o Amazon Q Developer.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/a977924c-957e-4f91-99d6-ed790e343ea6.png)


O diagrama mostra o fluxo de trabalho da garantia de qualidade do código automatizada:

1. Preparação e upload do código:
   + O desenvolvedor compacta a base do código em um arquivo .zip.
   + O desenvolvedor carrega manualmente o arquivo .zip em um bucket designado do Amazon Simple Storage Service (Amazon S3).

1. Gatilho e orquestração de eventos do Amazon S3: AWS Step Functions 
   + O evento de upload do Amazon S3 aciona um fluxo de trabalho do Step Functions.
   + Step Functions orquestra uma verificação SAST usando. SonarQube
   + O fluxo de trabalho monitora o status do AWS CodeBuild trabalho para determinar as próximas ações. Se for CodeBuild bem-sucedido (Quality Gate Pass), o fluxo de trabalho será encerrado. Se CodeBuild falhar, uma AWS Lambda função será invocada para diagnóstico. Para obter mais detalhes, consulte **Lógica do AWS Step Functions ** mais adiante nesta seção.

1. AWS CodeBuild execução:
   + O CodeBuild trabalho executa uma SonarQube varredura na base de código carregada.
   + Os artefatos da verificação são armazenados em um bucket separado do Amazon S3 para auditoria e análise.

1. Análise de falhas (função do Lambda):
   + Em CodeBuild caso de falha, a função `CheckBuildStatus` Lambda é acionada.
   + Em CodeBuild caso de sucesso, o processo é encerrado e nenhuma ação adicional é necessária.

1. A função do Lambda analisa a causa da falha (falha no quality gate ou outros problemas)
   + A função `CheckBuildStatus` cria uma carga útil personalizada com informações detalhadas sobre falhas.
   + A função `CheckBuildStatus` publica a carga útil personalizada em um tópico do Amazon Simple Notiﬁcation Service (Amazon SNS).

1. Sistema de notificações:
   + O Amazon SNS encaminha a carga útil ao Amazon Q Developer em aplicações de chat para integração com o Slack.

1. Integração do Slack:
   + O Amazon Q Developer em aplicações de chat publica uma notificação no canal designado do Slack.

1. Processo de aprovação:
   + Os aprovadores analisam os detalhes da falha na notificação do Slack.
   + Os aprovadores podem iniciar a aprovação usando o botão **Aprovar** no Slack.

1. Manipulador de aprovação:
   + Uma função do Lambda de aprovação processa a ação de aprovação do Slack.
   + A função de aprovação publica a mensagem personalizada no Amazon SES.

1. Mensagem gerada:
   + A função de aprovação gera uma mensagem personalizada para notificação ao desenvolvedor.

1. Notificação ao desenvolvedor:
   + O Amazon SES envia uma mensagem de e-mail ao desenvolvedor com as próximas etapas ou ações necessárias.

Esse fluxo de trabalho combina o upload manual de código com verificações de qualidade automatizadas, fornece feedback imediato por meio do Slack e permite a intervenção humana quando necessário, garantindo um processo robusto e flexível de revisão de código.

Lógica **AWS Step Functions  **

Conforme mostrado no diagrama de arquitetura anterior, se a passagem do portal de qualidade SonarQube falhar, o fluxo de trabalho vai para a função `CheckBuildStatus` Lambda. A função `CheckBuildStatus` aciona uma notificação no canal do Slack. Cada notificação inclui informações com as próximas etapas sugeridas. Seguem abaixo os tipos de notificações:
+ **O aplicativo falhou na verificação de segurança do código** — O usuário recebe essa notificação quando o código carregado não passou pela verificação SonarQube de segurança. O usuário pode escolher **APROVAR** para aceitar a compilação. No entanto, a notificação informa ao usuário sobre possíveis riscos de segurança e baixa qualidade do código. A notificação inclui os seguintes detalhes:
  + Próximas etapas: Erro: Status do quality gate: FALHOU \$1 Veja os detalhes no URL fornecido.
  + Faça a triagem das vulnerabilidades conforme mencionado no documento no URL fornecido.
  + CodeBuild os detalhes estão disponíveis no local no URL fornecido.
+ **O pipeline de verificação da aplicação falhou por algum outro motivo**: o usuário recebe essa notificação quando o pipeline falhou por algum motivo que não seja a falha na verificação de segurança do código. A notificação inclui os seguintes detalhes:
  + Para ver as próximas etapas, acesse o link fornecido para obter mais informações sobre a solução de problemas.

Para ver as capturas de tela das notificações conforme elas aparecem em um canal do Slack, acesse a [pasta de ativos no repositório](https://github.com/aws-samples/chatops-slack/tree/main/assets) GitHub chatops-slack.

O diagrama a seguir mostra um exemplo do status da etapa do Step Functions após a falha na aprovação do quality gate.

![\[Fluxo de trabalho do status da etapa do AWS Step Functions após a falha de aprovação no quality gate.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/40b7ebf0-2518-4413-9717-0bfb7559adde.png)


## Ferramentas
<a name="deploy-chatops-solution-to-manage-sast-scan-results-tools"></a>

**Serviços da AWS**
+ [O Amazon Q Developer em aplicativos de bate-papo](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) permite que você use os canais de bate-papo Amazon Chime, Microsoft Teams e Slack para monitorar e responder a eventos operacionais em seus aplicativos. AWS *Aviso de fim do suporte:* em 20 de fevereiro de 2026, AWS encerrará o suporte para o serviço Amazon Chime. Após 20 de fevereiro de 2026, não será mais possível acessar o console do Amazon Chime ou os recursos de aplicação do Amazon Chime. Para obter mais informações, acesse esta [publicação no blog](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/). Isso não afeta a disponibilidade do [serviço do SDK do Amazon Chime](https://aws.amazon.com/chime/chime-sdk/).
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) ajuda a substituir credenciais codificadas, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo por programação.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html): ajuda você a enviar e receber mensagens de e-mail usando seus próprios endereços de e-mail e domínios.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.

**Outras ferramentas**
+ O [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), uma solução da Salesforce, consiste em uma plataforma de conversação com tecnologia de IA que oferece colaboração por chat e vídeo, automatiza processos no-code e facilita o compartilhamento de informações.
+ [SonarQube](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/)é uma ferramenta de análise local projetada para detectar problemas de codificação em mais de 30 linguagens, estruturas e plataformas de IaC.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [chatops-slack](https://github.com/aws-samples/chatops-slack).

## Práticas recomendadas
<a name="deploy-chatops-solution-to-manage-sast-scan-results-best-practices"></a>
+ **CloudFormation gerenciamento de pilha** — Se você encontrar alguma falha durante a execução da CloudFormation pilha, recomendamos que você exclua a pilha com falha. Em seguida, recrie-a com os valores corretos dos parâmetros. Essa abordagem oferece suporte a uma implantação limpa e ajuda a evitar possíveis conflitos ou implementações parciais.
+ **Configuração de e-mail de caixa de entrada compartilhada**: ao configurar o parâmetro `SharedInboxEmail`, use uma lista de distribuição comum que seja acessível a todos os desenvolvedores relevantes. Essa abordagem promove transparência e ajuda notificações importantes a chegarem aos membros relevantes da equipe.
+ **Fluxo de trabalho de aprovação de produção**: para ambientes de produção, restrinja o acesso ao canal do Slack usado para aprovações de compilação. Somente aprovadores designados devem ser membros desse canal. Essa prática mantém uma cadeia clara de responsabilidade e aumenta a segurança ao limitar quem pode aprovar mudanças críticas.
+ **Permissões do IAM**: siga o princípio do privilégio mínimo e forneça o mínimo de permissões para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) na documentação do IAM.

## Épicos
<a name="deploy-chatops-solution-to-manage-sast-scan-results-epics"></a>

### Execute a configuração inicial
<a name="perform-initial-setup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório [chatops-slack](https://github.com/aws-samples/chatops-slack) deste padrão, use o seguinte comando:`git clone "git@github.com:aws-samples/chatops-slack.git"` | AWS DevOps, líder de construção, DevOps engenheiro, administrador de nuvem | 
| Crie os arquivos .zip que contêm o código do Lambda. | Crie os arquivos.zip para o código da AWS Lambda função para a `ApprovalEmail` funcionalidade `CheckBuildStatus` e. Para criar `notification.zip` e `approval.zip`, use os comandos a seguir.<pre>cd chatops-slack/src</pre><pre>chmod -R 775 *</pre><pre>zip -r approval.zip approval</pre><pre>zip -r notification.zip notification</pre> | AWS DevOps, líder de construção, DevOps engenheiro, administrador de nuvem | 

### Implantar o arquivo de pilha pre-requisite.yml
<a name="deploy-the-pre-requisite-yml-stack-file"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o arquivo de pilha `pre-requisite.yml`. | O arquivo de `pre-requisite.yml` CloudFormation pilha implanta os recursos iniciais necessários antes de você executar o arquivo de `app-security.yml` pilha. Para executar o arquivo `pre-requisite.yml`, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrador da AWS, AWS DevOps, líder de construção, DevOps engenheiro | 
| Faça upload dos arquivos .zip no bucket do Amazon S3. | Faça upload dos arquivos `notification.zip` e `approval.zip` que você criou anteriormente para o bucket do Amazon S3 chamado `S3LambdaBucket`. O arquivo `app-security.yml` CloudFormation de pilha é usado `S3LambdaBucket` para provisionar a função Lambda. | AWS DevOps, líder de construção, DevOps engenheiro, administrador de sistemas da AWS | 

### Executar o arquivo de app-security.yml
<a name="execute-the-app-security-yml-stack-file"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o arquivo de pilha `app-security.yml`. | Os arquivos de pilha `app-security.yml` implantam a infraestrutura restante para o sistema de notificação e aprovação. Para executar o arquivo `app-security.yml`, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | AWS DevOps, administrador de sistemas da AWS, DevOps engenheiro, líder de criação | 
| Teste a configuração das notificações. | Para testar a configuração de notificações, faça o seguinte.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html)Depois que a mensagem de teste for entregue com sucesso, você verá uma notificação no canal do Slack. Para obter mais informações, consulte [Notificações de teste do Serviços da AWS Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#test-notifications-slack) no *Guia do administrador do Amazon Q Developer em aplicativos de bate-papo*. | AWS DevOps, administrador de sistemas da AWS, DevOps engenheiro, líder de criação | 

### Configurar o fluxo de aprovação
<a name="set-up-approval-flow"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a ação personalizada do Lambda. | Para configurar a AWS Lambda ação personalizada, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrador da AWS, AWS DevOps, líder de construção, DevOps engenheiro, administrador do Slack | 
| Valide o fluxo de aprovação. | Para validar se o fluxo de aprovação funciona conforme o esperado, escolha o botão **Aprovar** no Slack.O Slackbot deve enviar uma notificação no tópico da mensagem com a string de confirmação **E-mail de aprovação enviado com sucesso**. | Administrador da AWS, AWS DevOps, DevOps engenheiro, administrador do Slack | 

## Solução de problemas
<a name="deploy-chatops-solution-to-manage-sast-scan-results-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Configurações incorretas do Slack | Para obter informações sobre como solucionar problemas relacionados a configurações incorretas do Slack, consulte a solução de problemas no Amazon Q Developer no *Guia do administrador do Amazon Q Developer em aplicações de chat*. | 
| A verificação falhou devido a algum outro motivo | Esse erro significa que a tarefa de criação do código falhou. Para solucionar o problema, acesse o link que está na mensagem. A falha na tarefa de criação de código pode ter as seguintes causas possíveis:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | 

## Recursos relacionados
<a name="deploy-chatops-solution-to-manage-sast-scan-results-resources"></a>

**AWS documentação**
+ [Configure a Slack client](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup)
+ [Criação de uma ação personalizada](https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-actions.html#creating-custom-actions)
+ [Creating an email address identity](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) [procedure](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure)
+ [Tutorial: Comece a usar o Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html)

**Outros recursos**
+ [Add apps to your Slack workspace](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) (documentação do Slack)
+ [Geração e uso de tokens](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/) (SonarQube documentação)
+ [Introdução à instalação do servidor](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/) (SonarQube documentação)

## Mais informações
<a name="deploy-chatops-solution-to-manage-sast-scan-results-additional"></a>

Esta solução enfatiza as soluções personalizadas do Amazon Q Developer em aplicações de chat para fins de gerenciamento de versão. No entanto, você pode reutilizar a solução modificando o código do Lambda para seu caso de uso específico e construindo com base nela.

**Parâmetros dos arquivos de CloudFormation pilha**

A tabela a seguir mostra os parâmetros e suas descrições para o arquivo `pre-requisite.yml` de CloudFormation pilha.


| 
| 
| **Chave** | **Descrição** | 
| --- |--- |
| `StackName` | O nome da CloudFormation pilha. | 
| `S3LambdaBucket` | O nome do bucket do Amazon S3 onde você carregou o código do Lambda. O nome precisa ser globalmente exclusivo. | 
| `SonarToken` | O token SonarQube do usuário, conforme descrito em [Pré-requisitos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). | 

A tabela a seguir mostra os parâmetros e suas descrições para o arquivo `app-security.yml` de CloudFormation pilha.


| 
| 
| **Chave** | **Descrição** | 
| --- |--- |
| `CKMSKeyArn` | O AWS KMS key Amazon Resource Name (ARN) usado nas funções do IAM e nas funções do Lambda criadas nessa pilha. | 
| `CKMSKeyId` | O AWS KMS key ID usado no tópico do Amazon SNS criado nessa pilha. | 
| `EnvironmentType` | O nome do ambiente de cliente para implantação do pipeline de verificação de aplicações. Selecione o nome do ambiente na lista suspensa de valores permitidos. | 
| `S3LambdaBucket` | O nome do bucket do Amazon S3 que contém os arquivos `approval.zip` e `notification.zip`. | 
| `SESEmail` | O nome da identidade de e-mail registrada no Amazon SES, conforme descrito em [Pré-requisitos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). Essa identidade é o endereço de e-mail de origem. | 
| `SharedInboxMail` | O endereço de e-mail de destino para o qual as notificações de verificação são enviadas. | 
| `SlackChannelId` | O ID do canal do Slack para o qual você deseja que as notificações sejam enviadas. Para encontrar o ID do canal, clique com o botão direito do mouse no nome do canal em **Detalhes do canal** na aplicação do Slack. O ID do canal está na parte inferior. | 
| `SlackWorkspaceId` | O ID do espaço de trabalho do Slack, conforme descrito em [Pré-requisitos](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). **Para encontrar o ID do espaço de trabalho do Slack, faça login no Console de gerenciamento da AWS, abra o Amazon Q Developer no console de aplicativos de bate-papo e escolha **Clientes configurados**, **Slack**, WorkspaceID.** | 
| `StackName` | O nome da CloudFormation pilha. | 
| `SonarFileDirectory` | O diretório que contém o arquivo `sonar.project.<env>.properties`. | 
| `SonarFileName` | O nome do arquivo `sonar.project.<env>properties`. | 
| `SourceCodeZip` | O nome do arquivo .zip que contém o arquivo `sonar.project.<env>properties` e o código-fonte. | 

# Implantação de sistemas agênticos no Amazon Bedrock com a estrutura do CrewAI usando o Terraform
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework"></a>

*Vanitha Dontireddy, Amazon Web Services*

## Resumo
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-summary"></a>

Este padrão demonstra como implementar sistemas escaláveis multiagente de IA usando a estrutura do [CrewAI](https://www.crewai.com/) integrada ao [Amazon Bedrock](https://aws.amazon.com/bedrock/?nc1=h_ls) e ao [Terraform](https://registry.terraform.io/). A solução permite que as organizações criem, implantem e gerenciem fluxos de trabalho sofisticados de agentes de IA por meio da infraestrutura como código (IaC). Neste padrão, os recursos de orquestração multiagente da CrewAI se combinam com os modelos de base do Amazon Bedrock e a automação da infraestrutura do Terraform. Como resultado, as equipes podem criar sistemas de IA prontos para produção que lidam com tarefas complexas com o mínimo de supervisão humana. O padrão implementa as práticas recomendadas operacionais, de escalabilidade e de segurança de nível corporativo. 

## Pré-requisitos e limitações
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS com permissões apropriadas para [acessar os modelos da Amazon Bedrock Foundation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Terraform versão 1.5 ou posterior [instalada](https://developer.hashicorp.com/terraform/install)
+ [Python versão 3.9 ou posterior instalado](https://www.python.org/downloads/)
+ Estrutura do CrewAI [instalada](https://docs.crewai.com/installation)

**Limitações**
+ As interações de agentes são limitadas pelas janelas de contexto do modelo.
+ As considerações de gerenciamento de estado do Terraform para implantações em grande escala se aplicam a este padrão.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture"></a>

Neste padrão, as seguintes interações ocorrem:
+ O Amazon Bedrock fornece a base para a inteligência de agentes por meio de seu conjunto de modelos básicos (FMs). Ele permite recursos de processamento de linguagem natural (PLN), raciocínio e tomada de decisão para os agentes de IA, mantendo alta disponibilidade e escalabilidade.
+ A estrutura do CrewAI serve como a principal camada de orquestração para criar e gerenciar agentes de IA. Ela lida com protocolos de comunicação de agentes, delegação de tarefas e gerenciamento de fluxo de trabalho enquanto se integra ao Amazon Bedrock.
+ O Terraform gerencia toda a pilha de infraestrutura por meio de código, incluindo recursos computacionais, redes, grupos de segurança e funções AWS Identity and Access Management (IAM). Ele garante implantações consistentes e com controle de versão em todos os ambientes. A implantação do Terraform cria o seguinte:
  + AWS Lambda função para executar o aplicativo CrewAI
  + Buckets do Amazon Simple Storage Service (Amazon S3) para código e relatórios
  + Perfis do IAM com as permissões apropriadas
  +  CloudWatch Registro na Amazon
  + Execução programada pela Amazon EventBridge

O diagrama a seguir ilustra a arquitetura para implantar sistemas multiagente do CrewAI usando o Amazon Bedrock e o Terraform.

![\[Fluxo de trabalho para implantar sistemas multiagente do CrewAI usando o Terraform e o Amazon Bedrock.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b46069e9-4c38-405f-b0f0-310eabb06b06/images/b3296b17-e388-46ba-8d71-2ec7ce3ed3e0.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O usuário clona o repositório.

1. O usuário executa o comando `terraform apply` para implantar os AWS recursos.

1. A configuração do modelo do Amazon Bedrock inclui a especificação do modelo de base (FM) a ser usado para configurar os agentes do CrewAI.

1. Uma EventBridge regra é estabelecida para acionar a função Lambda de acordo com o cronograma definido.

1. Quando acionada (por agendamento ou manualmente), a função Lambda inicializa e assume a função do IAM com permissões de acesso ao Amazon Bedrock. Serviços da AWS 

1. A estrutura do CrewAI carrega configurações de agentes por meio de arquivos YAML e cria agentes de IA especializados (a equipe de *auditoria de segurança da infraestrutura da AWS *). A função Lambda executa sequencialmente esses agentes para verificar AWS recursos, analisar vulnerabilidades de segurança e gerar relatórios de auditoria abrangentes.

1. CloudWatch Os registros capturam informações detalhadas de execução da função Lambda com um período de retenção de 365 dias AWS Key Management Service e AWS KMS() criptografia para requisitos de conformidade. Os logs fornecem visibilidade das atividades de agentes, do rastreamento de erros e das métricas de performance, permitindo o monitoramento e a solução de problemas eficazes do processo de auditoria de segurança.

1. O relatório de auditoria de segurança é gerado e armazenado automaticamente no bucket do Amazon S3 designado. A configuração automatizada ajuda a manter um monitoramento de segurança consistente com o mínimo de sobrecarga operacional.

Após a implantação inicial, o fluxo de trabalho fornece auditoria e relatórios de segurança contínuos para sua AWS infraestrutura sem intervenção manual.

**Visão geral dos agentes de IA**

Este padrão cria vários agentes de IA, cada um com funções, metas e ferramentas exclusivas:
+ O **agente do analista de segurança** coleta e analisa as informações AWS dos recursos.
+ O **agente testador de penetração** identifica vulnerabilidades nos recursos. AWS 
+ O **agente especialista em conformidade** verifica as configurações em relação aos padrões de conformidade.
+ O **agente redator de relatórios** compila as descobertas em relatórios abrangentes.

Esses agentes colaboram em uma série de tarefas, aproveitando suas habilidades coletivas para realizar auditorias de segurança e gerar relatórios abrangentes. (O arquivo `config/agents.yaml` descreve os recursos e configurações de cada agente dessa equipe.)

O processamento da análise de segurança consiste nas seguintes ações:

1. O agente analista de segurança examina os dados coletados sobre AWS recursos, como os seguintes:
   + Instâncias e grupos de segurança do Amazon Elastic Compute Cloud (Amazon EC2)
   + Configurações e buckets do Amazon S3
   + Políticas, permissões e perfis do IAM
   + Definições de rede e configurações de rede da nuvem privada virtual (VPC)
   + Bancos de dados e configurações de segurança do Amazon RDS
   + Configurações e funções do Lambda
   + Outros Serviços da AWS dentro do escopo da auditoria

1. O agente testador de penetração identifica possíveis vulnerabilidades.

1. Os agentes colaboram por meio da estrutura do CrewAI para compartilhar descobertas.

A geração de relatórios consiste nas seguintes ações:

1. O agente redator do relatório compila as descobertas de todos os outros agentes.

1. Os problemas de segurança são organizados por serviço, gravidade e impacto na conformidade.

1. Recomendações de remediação são geradas para cada problema identificado.

1. Um relatório abrangente de auditoria de segurança é criado em formato markdown e carregado no bucket do Amazon S3 designado. Os relatórios históricos são preservados para rastreamento de conformidade e melhoria da postura de segurança.

As atividades de registro em log e monitoramento incluem:
+ CloudWatch os registros capturam detalhes da execução e quaisquer erros.
+ As métricas de execução do Lambda são registradas para monitoramento.

**nota**  
O código para `aws-security-auditor-crew` é originado do repositório GitHub [3P-Agentic\$1Frameworks](https://github.com/aws-samples/3P-Agentic-Frameworks/blob/main/crewai/aws-security-auditor-crew/README.md), disponível na coleção Samples. AWS 

**Disponibilidade e escala**

Você pode expandir os agentes disponíveis para mais do que os quatro agentes principais. Para escalar com agentes especializados adicionais, considere os seguintes novos tipos de agentes:
+ Um agente *especialista em inteligência de ameaças* pode fazer o seguinte:
  + Monitorar os feeds de ameaças externos e correlacionar com as descobertas internas
  + Fornecer contexto sobre ameaças emergentes relevantes para sua infraestrutura
  + Priorizar vulnerabilidades com base na exploração ativa de casos reais
+ Os agentes da *estrutura de conformidade* podem se concentrar em áreas regulatórias específicas, como as seguintes:
  + Agente de conformidade com o padrão de segurança de dados do setor de cartões de pagamento (PCI DSS)
  + Agente de conformidade com a Lei de Portabilidade e Responsabilidade de Provedores de Saúde de 1996 (HIPAA)
  + Agente de conformidade com Controles de Sistema e Organização 2 (SOC 2)
  + Agente de conformidade do Regulamento Geral de Proteção de Dados (RGDP)

Ao expandir cuidadosamente os agentes disponíveis, essa solução pode fornecer insights de segurança mais profundos e especializados, mantendo a escalabilidade em grandes ambientes. AWS Para obter mais informações sobre uma abordagem de implementação, desenvolvimento de ferramentas e considerações de escalabilidade, consulte [Informações adicionais](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional).

## Ferramentas
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-tools"></a>

**Serviços da AWS**
+ [O Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é um serviço de IA totalmente gerenciado que disponibiliza modelos básicos de alto desempenho (FMs) para uso por meio de uma API unificada.
+ O [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ajuda você a centralizar os registros de todos os seus sistemas e aplicativos, Serviços da AWS para que você possa monitorá-los e arquivá-los com segurança.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS Neste padrão, ele é usado para agendar e orquestrar fluxos de trabalho de agentes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados. Neste padrão, ele fornece armazenamento de objetos para artefatos de agentes e gerenciamento de estado.

**Outras ferramentas**
+ O [CrewAI](https://www.crewai.com/open-source) é uma estrutura de código aberto baseada em Python para criar sistemas de IA multiagente.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no GitHub [deploy-crewai-agents-terraform](https://github.com/aws-samples/deploy-crewai-agents-terraform.git)repositório.

## Práticas recomendadas
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-best-practices"></a>
+ Implemente o gerenciamento de estado adequado para o Terraform usando um backend do Amazon S3 com bloqueio do Amazon DynamoDB. Para obter mais informações, consulte [Práticas recomendadas de back-end](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/backend.html) em *Melhores práticas para usar o Terraform AWS Provider*.
+ Use espaços de trabalho para separar ambientes de desenvolvimento, preparação e produção.
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [nas melhores práticas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.
+ Ative o registro e o monitoramento detalhados por meio do CloudWatch Logs.
+ Implemente mecanismos de repetição e tratamento de erros para operações de agentes.

## Épicos
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-epics"></a>

### Implantar a estrutura do CrewAI
<a name="deploy-crewai-framework"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório correspondente a este padrão em sua máquina local, execute o seguinte comando:<pre>git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git"<br />cd deploy-crewai-agents-terraform</pre> | DevOps engenheiro | 
| Edite as variáveis de ambiente. | Para editar as variáveis de ambiente, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps engenheiro | 
| Crie a infraestrutura. | Para criar a infraestrutura, execute os seguintes comandos:<pre>cd terraform</pre><pre>terraform init</pre><pre>terraform plan</pre>Analise cuidadosamente o plano de execução. Se as alterações propostas estiverem adequadas, execute o seguinte comando:<pre>terraform apply --auto-approve</pre> | DevOps engenheiro | 

### Acessar os agentes do CrewAI
<a name="access-crewai-agents"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Acesse os agentes. | Os agentes da equipe de Auditoria e Relatórios de Segurança da AWS Infraestrutura são implantados como uma função Lambda. Para acessar os agentes, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps engenheiro | 
| (Opcional) Configure a execução manual dos agentes. | Os agentes são configurados para serem executados automaticamente em uma programação diária (meia-noite UTC). No entanto, é possível acioná-los manualmente usando as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Para obter mais detalhes, consulte [Como testar funções do Lambda no console](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) na documentação do Lambda. | DevOps engenheiro | 
| Acesse os logs do agente para depuração. | Os agentes do CrewAI são executados em um ambiente do Lambda com as permissões necessárias para realizar auditorias de segurança e armazenar relatórios no Amazon S3. O resultado é um relatório de redução que fornece uma análise de segurança abrangente da sua AWS infraestrutura.Para ajudar na depuração detalhada do comportamento do agente, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps engenheiro | 
| Veja os resultados da execução do agente. | Para visualizar os resultados da execução de um agente, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Os relatórios são armazenados com nomes de arquivo baseados em carimbo de data/hora da seguinte forma: `security-audit-report-YYYY-MM-DD-HH-MM-SS.md)` | DevOps engenheiro | 
| Monitore a execução do agente. | Para monitorar a execução dos agentes por meio de CloudWatch registros, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps engenheiro | 
|  Personalize o comportamento do agente. | Para modificar os agentes ou suas tarefas, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)<pre>cd terraform </pre><pre>terraform apply</pre> | DevOps engenheiro | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua os recursos criados. | Para excluir toda a infraestrutura criada por este padrão, execute o seguinte comando:<pre>terraform plan -destroy </pre>O comando a seguir excluirá permanentemente todos os recursos criados por este padrão. O comando solicitará confirmação antes de remover quaisquer recursos.Analise cuidadosamente o plano de exclusão. Se as exclusões propostas estiverem adequadas, execute o seguinte comando:<pre>terraform destroy</pre> | DevOps engenheiro | 

## Solução de problemas
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Comportamento do agente | Para obter informações sobre este problema, consulte [Test and troubleshoot agent behavior](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) na documentação do Amazon Bedrock. | 
| Problemas de rede relacionados ao Lambda | Para obter informações sobre estes problemas, consulte [Solucionar problemas de redes no Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) na documentação do Lambda. | 
| permissões do IAM | Para obter informações sobre estes problemas, consulte [Solucionar problemas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html) na documentação do IAM. | 

## Recursos relacionados
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-resources"></a>

**AWS Blogs**
+ [Build agentic systems with CrewAI and Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/build-agentic-systems-with-crewai-and-amazon-bedrock/)

**AWS documentação**
+ [Documentação do Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+ [Como o Amazon Bedrock Agents funciona](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [AWS Well-Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)

**Outros recursos**
+ [Documentação do CrewAI](https://docs.crewai.com/introduction)
+ [Documentação do Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Mais informações
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional"></a>

Esta seção contém informações sobre uma abordagem de implementação, desenvolvimento de ferramentas e considerações de escalabilidade relacionadas à discussão anterior em [Automação e escala](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture).

**Abordagem da implementação**

Considere a seguinte abordagem para adicionar agentes:

1. Configuração do agente:
   + Adicione novas definições de agente ao arquivo `config/agents.yaml`.
   + Defina histórias de fundo, metas e ferramentas especializadas para cada agente.
   + Configure os recursos de memória e análise com base na especialidade do agente.

1. Orquestração de tarefas
   + Atualize o arquivo `config/tasks.yaml` para incluir novas tarefas específicas de agente.
   + Crie dependências entre as tarefas para ajudar a garantir o fluxo adequado de informações.
   + Implemente a execução paralela de tarefas quando apropriado.

**Implementação técnica**

Segue abaixo uma adição ao arquivo `agents.yaml` de uma sugestão de agente especialista em inteligência de ameaças:

```
Example new agent configuration in agents.yaml
threat_intelligence_agent:
 name: "Threat Intelligence Specialist"
 role: "Cybersecurity Threat Intelligence Analyst"
 goal: "Correlate AWS security findings with external threat intelligence"
 backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." 
verbose: true 
allow_delegation: true 
tools: 
- "ThreatIntelligenceTool" 
- "AWSResourceAnalyzer"
```

**Desenvolvimento de ferramentas**

Com a estrutura do CrewAI, você pode realizar as seguintes ações para melhorar a eficácia da sua equipe de auditoria de segurança:
+ Crie ferramentas personalizadas para novos agentes.
+ Integre-se com o externo APIs para obter inteligência contra ameaças.
+ Desenvolva analisadores especializados para diferentes. Serviços da AWS

**Considerações sobre escalabilidade**

Ao expandir seu sistema de auditoria e emissão de relatórios de segurança de AWS infraestrutura para lidar com ambientes maiores ou auditorias mais abrangentes, considere os seguintes fatores de escalabilidade:
+ **Recursos computacionais**
  + Aumente a alocação de memória do Lambda para lidar com agentes adicionais.
  + Considere dividir as workloads de agentes em várias funções do Lambda.
+ **Gerenciamento de custos**
  + Monitore o uso da API do Amazon Bedrock à medida que o número de agentes aumenta.
  + Implemente a ativação seletiva de agentes com base no escopo da auditoria.
+ **Eficiência da colaboração**
  + Otimize o compartilhamento de informações entre agentes.
  + Implemente estruturas hierárquicas de agentes para ambientes complexos.
+ **Aprimoramento da base de conhecimento**
  + Forneça aos agentes bases de conhecimento especializadas para seus domínios.
  + Atualize regularmente o conhecimento dos agentes com as novas práticas recomendadas de segurança.

# Implante um trabalho do AWS Glue com um pipeline de CodePipeline CI/CD da AWS
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein e Luis Henrique Massao Yamada, Amazon Web Services*

## Resumo
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

Esse padrão demonstra como você pode integrar a AWS CodeCommit e a AWS CodePipeline com o AWS Glue e usar o AWS Lambda para iniciar trabalhos assim que um desenvolvedor envia suas alterações para um repositório remoto da AWS. CodeCommit  

Quando um desenvolvedor envia uma alteração para um repositório de extração, transformação e carregamento (ETL) e envia as alterações para a AWS CodeCommit, um novo pipeline é invocado. O pipeline inicia uma função do Lambda que inicia um trabalho do AWS Glue com essas alterações. O trabalho do AWS Glue executa a tarefa de ETL.

Essa solução é útil na situação em que empresas, desenvolvedores e engenheiros de dados desejam iniciar tarefas assim que as alterações forem confirmadas e enviadas aos repositórios de destino. Isso ajuda a alcançar um nível mais alto de automação e reprodutibilidade, evitando erros durante o lançamento e o ciclo de vida do trabalho.

## Pré-requisitos e limitações
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [Git](https://git-scm.com/) instalado na máquina local
+ [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) instalado na máquina local
+ [Python](https://www.python.org/) instalado na máquina local
+ O código na seção *Anexos*

**Limitações**
+ O pipeline é concluído assim que o trabalho do AWS Glue for lançado com sucesso. Ele não vai esperar chegar ao fim do trabalho.
+ O código fornecido no anexo é destinado apenas para fins de demonstração.

## Arquitetura
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**Arquitetura de destino**

![\[Usar o Lambda para iniciar uma tarefa do Glue assim que um desenvolvedor envia as alterações para um repositório. CodeCommit\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

O processo consiste nestas etapas:

1. O desenvolvedor ou engenheiro de dados faz uma modificação no código ETL, confirma e envia a alteração para a AWS. CodeCommit

1. O push inicia o pipeline.

1. O pipeline inicia uma função do Lambda, que chama `codecommit:GetFile` no repositório e faz upload do arquivo para o Amazon Simple Storage Service (Amazon S3).

1. A função do Lambda lança um novo trabalho do AWS Glue com o código ETL.

1. A função do Lambda finaliza o pipeline.

**Automação e escala**

O exemplo de anexo demonstra como você pode integrar o AWS Glue com a AWS CodePipeline. Ele fornece um exemplo básico que você pode personalizar ou estender para seu próprio uso. Consulte a seção *Épicos * para obter detalhes.

## Ferramentas
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — CodePipeline A AWS é um serviço de [entrega contínua](https://aws.amazon.com/devops/continuous-delivery/) totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura.
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/) — CodeCommit A AWS é um serviço de [controle de origem](https://aws.amazon.com/devops/source-control/) totalmente gerenciado que hospeda repositórios seguros baseados em Git.
+ [AWS Lambda](https://aws.amazon.com/lambda/): o AWS Lambda é um serviço de computação com tecnologia sem servidor que pode ser usado para executar código sem provisionamento ou gerenciamento de servidores.
+ [AWS Glue](https://aws.amazon.com/glue): o AWS Glue é um serviço de integração de dados com tecnologia sem servidor que facilita a descoberta, preparação e combinação de dados para análise, machine learning e desenvolvimento de aplicações.
+ [Cliente Git](https://git-scm.com/downloads) — O Git fornece ferramentas de GUI, ou você pode usar a linha de comando ou uma ferramenta de desktop para verificar os artefatos necessários. GitHub 
+ [CDK da AWS](https://aws.amazon.com/cdk/): o CDK da AWS é um framework de desenvolvimento de software de código aberto que ajuda a definir recursos de aplicativos em nuvem usando linguagens de programação familiares.

## Épicos
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### Implantar o código de exemplo
<a name="deploy-the-sample-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a AWS CLI. | Configure a AWS Command Line Interface (AWS CLI) para direcionar e autenticar com sua conta da AWS atual. Para obter instruções, consulte a [documentação da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). | Desenvolvedor, DevOps engenheiro | 
| Extraia os arquivos de exemplo do projeto. | Extraia os arquivos do anexo para criar uma pasta que contém os arquivos de exemplo do projeto. | Desenvolvedor, DevOps engenheiro | 
| Implantar o código de exemplo. | Depois de extrair os arquivos, execute os seguintes comandos no local da extração para criar um exemplo básico:<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>Depois do último comando, é possível monitorar o status do pipeline e do trabalho do AWS Glue. | Desenvolvedor, DevOps engenheiro | 
| Personalize o código. | Personalize o código do arquivo etl.py de acordo com seus requisitos comerciais. Você pode revisar o código ETL, modificar os estágios do pipeline ou estender a solução. | Engenheiro de dados | 

## Recursos relacionados
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [Conceitos básicos dos AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [Adicionar trabalhos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [Integrações de ações de origem em CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [Invoque uma função do AWS Lambda em um pipeline no CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [Programação do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [ CodeCommit GetFile API DA AWS](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## Anexos
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)

# Implemente código em várias regiões da AWS usando AWS CodePipeline CodeCommit, AWS e AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Resumo
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Esse padrão demonstra como criar infraestrutura ou arquitetura em várias regiões da Amazon Web Services (AWS) usando a AWS CloudFormation. Inclui integração contínua (CI) /implantação contínua (CD) em várias regiões da AWS para implantações mais rápidas. ****As etapas desse padrão foram testadas para a criação de um CodePipeline trabalho da AWS para implantação em três regiões da AWS, como exemplo. Você pode alterar o número de regiões com base no caso de uso.

## Pré-requisitos e limitações
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ 
  + Uma CodeBuild função com o *AmazonS3 FullAccess* e as políticas. *CloudWatchFullAccess* Essas políticas dão CodeBuild acesso para assistir eventos da AWS CodeCommit por meio da Amazon CloudWatch e usar o Amazon Simple Storage Service (Amazon S3) como um armazenamento de artefatos.
  + Uma CloudFormation função da AWS com as seguintes políticas, que dão à AWS CloudFormation, no estágio final de criação, a capacidade de criar ou atualizar funções do AWS Lambda, enviar ou observar CloudWatch registros da Amazon e criar e atualizar conjuntos de alterações. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**nota**  
Duas funções do AWS Identity and Access Management (IAM) para a AWS CodeBuild e a AWS CloudFormation com políticas adequadas CodeBuild para realizar as tarefas de CI de testar, agrupar, empacotar os artefatos e implantá-los em várias regiões da AWS em paralelo.  Verifique as políticas criadas por CodePipeline para verificar se a CodeBuild AWS CloudFormation tem as permissões adequadas nas fases de CI e CD.

## Arquitetura
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![\[Um CodePipeline trabalho da AWS que é implantado em três regiões da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


A arquitetura e o fluxo de trabalho de várias regiões deste padrão abrangem as etapas a seguir.

1. Você envia seu código para um CodeCommit repositório.

1. Ao receber qualquer atualização ou confirmação de código, CodeCommit invoca um CloudWatch evento que, por sua vez, inicia um CodePipeline trabalho.

1. CodePipeline engaja o CI que é tratado por. CodeBuild As tarefas a seguir são executadas.
   + Teste dos CloudFormation modelos da AWS (opcional)
   + Empacotamento dos CloudFormation modelos da AWS para cada região incluída na implantação. Por exemplo, esse padrão é implantado paralelamente em três regiões da AWS, então CodeBuild empacota os CloudFormation modelos da AWS em três buckets S3, um em cada região especificada. Os buckets do S3 são usados somente CodeBuild como repositórios de artefatos.

1. CodeBuild empacota os artefatos como entrada para a próxima fase de implantação, que é executada paralelamente nas três regiões da AWS. Se você especificar um número diferente de regiões, CodePipeline será implantado nessas regiões.

## Ferramentas
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Ferramentas**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — CodePipeline é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para liberar suas alterações de software continuamente.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — CodeBuild é um serviço de construção totalmente gerenciado que compila seu código-fonte, executa testes unitários e produz artefatos prontos para implantação.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — CodeCommit é um serviço de controle de versão hospedado pela Amazon Web Services que você pode usar para armazenar e gerenciar de forma privada ativos (como código-fonte e arquivos binários) na nuvem.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — CloudFormation A AWS é um serviço que ajuda você a modelar e configurar seus recursos da Amazon Web Services para que você possa passar menos tempo gerenciando esses recursos e mais tempo se concentrando em seus aplicativos que são executados na AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): o AWS Identity and Access Management (IAM) é um serviço da web que ajuda você a controlar o acesso aos recursos da AWS com segurança.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html): o Amazon Simple Storage Service (Amazon S3) serve como armazenamento para a internet. Ele foi projetado para facilitar a computação de escala na web para os desenvolvedores.

**Código**

O código de exemplo a seguir é para o arquivo `BuildSpec.yaml` (fase de compilação).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Épicos
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Prepare o código e o CodeCommit repositório
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Selecione a principal região da AWS para a implantação. | Faça login em sua conta da AWS e escolha a região principal para a implantação. O CodeCommit repositório estará na região principal. | DevOps | 
| Crie o CodeCommit repositório. | Crie o CodeCommit repositório e insira o código necessário nele. O código geralmente inclui os modelos da AWS CloudFormation ou do AWS SAM, o código Lambda, se houver, e os CodeBuild `buildspec.yaml` arquivos como entrada para a AWS. CodePipeline | DevOps | 
| Envie o código para o CodeCommit repositório. | Na seção *Anexos*, baixe o código desse exemplo e, em seguida, insira o código necessário nele. Geralmente, o código pode incluir modelos AWS CloudFormation ou AWS SAM, código Lambda e os CodeBuild `buildspec.yaml` arquivos como entrada para o pipeline. | DevOps | 

### Fase de origem: criar o pipeline
<a name="source-phase-create-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o CodePipeline trabalho. | No CodePipeline console, escolha **Criar pipeline**. | DevOps | 
| Dê um nome ao CodePipeline trabalho e escolha a configuração da função de serviço. | Insira um nome para o trabalho e mantenha a configuração padrão da função de serviço para CodePipeline criar a função com as políticas necessárias anexadas. | DevOps | 
| Especifique a localização do armazenamento de artefatos. | Em **Configurações avançadas**, mantenha a opção padrão para CodePipeline criar um bucket S3 a ser usado para armazenamento de artefatos de código. Se você usar um bucket S3 existente em vez disso, o bucket deverá estar na região principal que você especificou no primeiro épico. | DevOps | 
| Especifique a chave de criptografia. | Mantenha a opção padrão, **Chave gerenciada pela AWS padrão**, ou opte por usar sua própria chave gerenciada pelo cliente do AWS Key Management Service (AWS KMS). | DevOps | 
| Especificar o provedor de origem. | Em **Provedor de origem**, escolha **AWS CodeCommit**. | DevOps | 
| Especificar o repositório. | Escolha o CodeCommit repositório que você criou no primeiro épico. Se você inseriu o código em uma ramificação, escolha a ramificação. | DevOps | 
| Especifique como as alterações no código são detectadas. | Mantenha o padrão, **Amazon CloudWatch Events**, como o gatilho de mudança CodeCommit para iniciar o CodePipeline trabalho. | DevOps | 

### Fase de compilação: configurar o pipeline
<a name="build-phase-configure-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Especifique o provedor de compilação. | Para o provedor de compilação, escolha **AWS CodeBuild**. | DevOps | 
| Especifique a região da AWS. | Escolha a região principal, que você especificou no primeiro épico. | DevOps | 

### Fase de compilação: criar e configurar o projeto
<a name="build-phase-create-and-configure-the-project"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar o projeto | Escolha **Criar projeto** e insira um nome para o projeto. | DevOps | 
| Especifique a imagem do ambiente. | Para essa demonstração de padrão, use a imagem CodeBuild gerenciada padrão. Também há a opção de usar uma imagem do Docker personalizada, se tiver uma. | DevOps | 
| Especifique o sistema operacional. | Escolha Amazon Linux 2 ou Ubuntu.O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Especifique o perfil de serviço. | Escolha a função para a qual você criou CodeBuild antes de começar a criar a CodePipeline tarefa. (Consulte a seção *Pré-requisitos*.) | DevOps | 
| Configure opções adicionais. | Para **Tempo limite** e **Tempo limite em fila**, mantenha os valores padrão. Para ter um certificado, mantenha a configuração padrão, a menos que você tenha um certificado personalizado que queira usar. | DevOps | 
| Crie as variáveis de ambiente. | Para cada região da AWS na qual você deseja implantar, crie variáveis de ambiente fornecendo o nome do bucket do S3 e o nome da região (por exemplo, us-east-1). | DevOps | 
| Forneça o nome do arquivo buildspec, se não for buildspec.yml. | Mantenha esse campo em branco se o nome do arquivo for o padrão, `buildspec.yaml`. Se você renomeou o arquivo buildspec, insira o nome aqui. Verifique se ele corresponde ao nome do arquivo que está no CodeCommit repositório. | DevOps | 
| Especifique o registro. | Para ver os registros do Amazon CloudWatch Events, mantenha a configuração padrão. ou você pode definir qualquer nome específico de grupo ou registrador. | DevOps | 

### Ignore a fase de Implantação
<a name="skip-the-deploy-phase"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Pule a fase de implantação e conclua a criação do pipeline. | Quando você configura o pipeline, CodePipeline permite criar apenas um estágio na fase de implantação. Para implantar em várias regiões da AWS, pule esta fase. Depois que o pipeline for criado, você poderá adicionar vários estágios da fase de Implantação. | DevOps | 

### Fase de Implantação: configurar o pipeline para implantação na primeira região
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione um estágio à fase de Implantação. | Edite o pipeline e escolha **Adicionar estágio** na fase de Implantação. Essa primeira etapa é para a região principal. | DevOps | 
| Forneça um nome de ação para o estágio. | Insira um nome exclusivo que reflita o primeiro estágio (principal) e a região. Por exemplo, insira **primary\$1<region>\$1deploy**. | DevOps | 
| Especificar o provedor de ação.  | Para o **provedor Action**, escolha AWS CloudFormation. | DevOps | 
| Configure a região para o primeiro estágio. | Escolha a primeira região (primária), a mesma região em que CodePipeline CodeBuild estão configurados. Essa é a região principal na qual você deseja implantar a pilha. | DevOps | 
| Especifique o artefato de entrada. | Selecione **BuildArtifact**. Esse é o resultado da fase de compilação. | DevOps | 
| Especifique a ação a ser tomada. | Para o **Modo de ação**, escolha **Criar ou atualizar uma pilha**. | DevOps | 
| Insira um nome para a CloudFormation pilha. |  | DevOps | 
| Especifique o modelo para a primeira região. | Selecione o nome do pacote específico da região que foi empacotado CodeBuild e despejado no bucket do S3 para a primeira região (primária). | DevOps | 
| Especifique os recursos. | Os recursos são necessários se o modelo de pilha incluir recursos do IAM ou se você criar uma pilha diretamente de um modelo que contém macros. Para esse padrão, use CAPABILITY\$1IAM, CAPABILITY\$1NAMED\$1IAM, CAPABILITY\$1AUTO\$1EXPAND. | DevOps | 

### Fase de implantação: configurar o pipeline para implantação na segunda região
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione o segundo estágio à fase de Implantação. | Para adicionar um estágio para a segunda região, edite o pipeline e escolha **Adicionar estágio** na fase de Implantação. Importante: o processo de criação da segunda região é o mesmo da primeira região, exceto pelos valores a seguir. | DevOps | 
| Forneça um nome de ação para o segundo estágio. | Insira um nome exclusivo que reflita o segundo estágio e a segunda região. | DevOps | 
| Configure a região para o segundo estágio. | Selecione a segunda região onde você deseja implantar a pilha. | DevOps | 
| Especifique o modelo para a segunda região. | Selecione o nome do pacote específico da região que foi empacotado CodeBuild e despejado no bucket do S3 para a segunda região. | DevOps | 

### Fase de Implantação: configurar o pipeline para implantação na terceira região
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione o terceiro estágio à fase de Implantação. | Para adicionar um estágio para a terceira região, edite o pipeline e escolha **Adicionar estágio** na fase de Implantação. Importante: o processo de criação da segunda região é o mesmo das duas regiões anteriores, exceto pelos valores a seguir. | DevOps | 
| Forneça um nome de ação para o terceiro estágio. | Insira um nome exclusivo que reflita o terceiro estágio e a terceira região. | DevOps | 
| Configure a região para o terceiro estágio. | Selecione a região onde você deseja implantar a pilha. | DevOps | 
| Especifique o modelo para a terceira região. | Selecione o nome do pacote específico da região que foi empacotado CodeBuild e despejado no bucket do S3 para a terceira região. | DevOps | 

### Limpar a implantação
<a name="clean-up-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Excluir os recursos da AWS. | Para limpar a implantação, exclua as CloudFormation pilhas em cada região. Em seguida CodeCommit CodeBuild, exclua CodePipeline os recursos, e da região primária. | DevOps | 

## Recursos relacionados
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [O que é a AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Modelo de aplicativo sem servidor da AWS](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Referência de estrutura de CloudFormation arquitetura da AWS para AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Anexos
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)

# Implante cargas de trabalho dos DevOps pipelines do Azure em clusters privados do Amazon EKS
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumo
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Esse padrão demonstra como implementar a integração contínua e a entrega contínua (CI/CD) dos DevOps pipelines do Azure para clusters privados do Amazon Elastic Kubernetes Service (Amazon EKS). Ele aborda um desafio crítico enfrentado por organizações que estão aprimorando sua postura de segurança ao fazer a transição para endpoints de servidor de API privados para seus clusters do Amazon EKS.

Um endpoint público expõe o servidor da API do Kubernetes diretamente à Internet, criando uma superfície de ataque maior que agentes mal-intencionados poderiam potencialmente atingir. Ao mudar para um endpoint privado, o acesso ao ambiente de gerenciamento do cluster é restrito à nuvem privada virtual (VPC) do cliente.

Embora a transição de um cluster Amazon EKS para um endpoint de API privado aumente significativamente a segurança, ela introduz desafios de conectividade para plataformas externas, como o Azure. CI/CD DevOps O endpoint privado só pode ser acessado de dentro da VPC ou das redes emparelhadas do cluster. Portanto, os DevOps agentes padrão do Azure hospedados pela Microsoft, operando fora da rede AWS privada, não podem acessar diretamente o servidor da API Kubernetes. Isso interrompe os fluxos de trabalho de implantação típicos que dependem de ferramentas como kubectl ou Helm executadas nesses agentes porque eles não conseguem estabelecer uma conexão com o cluster.

Para superar esse problema, esse padrão mostra uma abordagem eficiente usando DevOps agentes do Azure auto-hospedados em clusters privados do Amazon EKS. Essa solução oferece otimização de custos, eficiência operacional e escalabilidade superiores, preservando os requisitos de segurança. Essa abordagem beneficia particularmente as empresas que buscam otimizar seus DevOps processos multinuvem sem comprometer o desempenho ou a segurança.

## Pré-requisitos e limitações
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Command Line Interface [(AWS CLI) versão 2.13.17 ou posterior, instalada.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ kubectl versão 1.25.1 ou posterior, [instalado](https://kubernetes.io/docs/tasks/tools/).
+ Um cluster privado do Amazon EKS versão 1.24 ou posterior [criado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), com permissões para criar namespaces, segredos e implantações[.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Nós de trabalho em um cluster do Amazon EKS com conectividade de saída à Internet para que o DevOps agente do Azure executado neles possa se conectar ao pool de DevOps agentes do Azure.
+ GitHub conta [criada](https://github.com/signup).
+ [Um DevOps projeto do Azure com acesso para configurar conexões de serviço, que são conexões autenticadas entre o Azure Pipelines e serviços externos ou remotos, criado.](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)
+ A Kit de ferramentas da AWS para Azure DevOps versão 1.15 ou posterior instalada para o DevOps projeto Azure descrito no ponto anterior. Para obter as instruções de instalação, consulte [Kit de ferramentas da AWS para Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools) no Visual Studio Marketplace.

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Este padrão cria o seguinte:
+ Repositório **Amazon ECR — O repositório** Amazon Elastic Container Registry (Amazon ECR) armazena a imagem do Docker com o agente do DevOps Azure e o aplicativo de amostra que é implantado.
+ Pool de ** DevOps agentes do Azure - Um pool** de agentes DevOps auto-hospedado do Azure registra o agente em execução no cluster privado do Amazon EKS.
+ **Função do IAM** - Uma função AWS Identity and Access Management (IAM) da conexão de serviço do Azure para fornecer o acesso necessário ao agente que está sendo executado em um cluster privado do Amazon EKS.
+ **Conexão DevOps de serviço do Azure** - Uma conexão de serviço em uma DevOps conta do Azure para usar a função do IAM que fornece o acesso necessário para que os trabalhos do pipeline acessem Serviços da AWS.

O diagrama a seguir mostra a arquitetura da implantação de um DevOps agente do Azure auto-hospedado em um cluster privado do Amazon EKS e da implantação de um aplicativo de amostra no mesmo cluster.

![\[Implantação do DevOps agente do Azure auto-hospedado e do aplicativo de amostra no cluster privado Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Implante um DevOps agente do Azure auto-hospedado como uma implantação dentro de um cluster Amazon EKS.

1. Um DevOps agente do Azure se conecta ao pool de agentes em uma DevOps conta do Azure usando um token de acesso pessoal (PAT) para autenticação.

1. O Azure Pipelines configura um pipeline para implantação usando o código de um GitHub repositório.

1. O pipeline é executado no agente pelo do pool de agentes que foi configurado na configuração do pipeline. O DevOps agente do Azure obtém as informações do trabalho do pipeline fazendo pesquisas constantes na DevOps conta do Azure.

1. O DevOps agente do Azure cria uma imagem do Docker como parte do trabalho do pipeline e envia a imagem para o repositório Amazon ECR.

1. O DevOps agente do Azure implanta o aplicativo de amostra em um cluster privado do Amazon EKS em um namespace chamado. `webapp` 

## Ferramentas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Ferramentas**
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

**Outras ferramentas**
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.

**Repositório de código**
+ O código desse padrão está disponível no repositório GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Práticas recomendadas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Para o Amazon EKS, consulte o [Amazon EKS Best Practices Guide](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Criar uma conexão de serviço
<a name="create-a-service-connection"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Encontre o GUID da DevOps organização do Azure. | Entre na sua DevOps conta do Azure e use a seguinte URL para encontrar o GUID da organização: `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` Na URL, `{DevOps_org_ID}` substitua pela ID da DevOps organização do Azure. | AWS DevOps | 
| Configure um IdP na Conta da AWS. | Para configurar um provedor de identidade (IdP) no Conta da AWS para uma conexão de serviço do Azure, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obter mais detalhes, consulte [Como federar a AWS partir do Azure DevOps usando o OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Crie uma política do IAM na Conta da AWS. | Para criar uma política do IAM para fornecer as permissões necessárias para a função do IAM usada pelo DevOps pipeline do Azure, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crie um perfil do IAM na Conta da AWS. | Para configurar uma função do IAM na conexão Conta da AWS de serviço do Azure, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>Na política, forneça suas informações para os seguintes espaços reservados:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crie uma conexão de serviço na DevOps conta do Azure. | Para configurar uma conexão de serviço do Azure, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obter mais detalhes, consulte [Create a service connection](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) na documentação da Microsoft. | AWS DevOps | 
| Adicione o perfil do IAM ao arquivo de configuração do Amazon EKS. | O perfil do IAM deve ter permissões necessárias para executar as operações necessárias no cluster do Amazon EKS. Por ser uma função de pipeline, o perfil do IAM deve ser capaz de gerenciar quase todos os tipos de recursos no cluster. Portanto, a permissão do grupo `system:masters` é apropriada para esse perfil.Para adicionar a configuração necessária a `aws-auth ConfigMap` no Kubernetes, use o seguinte código:<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>`{account_id}`Substitua pelo seu Conta da AWS ID.Para obter mais informações, consulte [Como o Amazon EKS funciona com o IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) na documentação do Amazon EKS. | AWS DevOps | 

### Criar um pool de agentes
<a name="create-an-agent-pool"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um pool de agentes auto-hospedado. | Para configurar um pool de agentes auto-hospedado na DevOps conta do Azure, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obter mais detalhes, consulte [Create and manage agent pools](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) na documentação da Microsoft. |  | 

### Crie uma imagem de DevOps agente do Azure e envie para o Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | As imagens do Docker usadas para implantar o DevOps agente do Azure e o aplicativo de amostra (`webapp`) no cluster privado do Amazon EKS devem ser armazenadas em um repositório Amazon ECR. Para criar um repositório do Amazon ECR, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Para obter mais detalhes, consulte [Creating an Amazon ECR private repository to store images](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) na documentação do Amazon ECR. | AWS DevOps | 
| Crie um Dockerfile para criar o agente do Azure DevOps . | Crie um Dockerfile para criar a imagem do Docker que tem o agente do Azure DevOps instalado. Armazene o seguinte conteúdo em um arquivo chamado `Dockerfile`:<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Crie um script para o DevOps agente do Azure. | Para criar o script `start.sh`, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Crie uma imagem do Docker com o DevOps agente do Azure.  | Para criar uma imagem do Docker para instalar o DevOps agente do Azure, use o Dockerfile que você criou anteriormente para criar a imagem. No mesmo diretório em que o Dockerfile está armazenado, execute os seguintes comandos:<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>`region`Substitua `aws_account_id` e por seu Conta da AWS ID Região da AWS e. | AWS DevOps | 

### Implante o DevOps agente do Azure em um cluster privado do Amazon EKS
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Gere um token de acesso pessoal do Azure. | O agente em execução no cluster privado do Amazon EKS requer um token de acesso pessoal (PAT) para que possa se autenticar com a conta do Azure DevOps . Para gerar um PAT, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>Para obter mais detalhes, consulte [Register an agent using a personal access token (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) na documentação da Microsoft. | AWS DevOps | 
| Use o arquivo de manifesto do Kubernetes para a implantação de agentes. | Para implantar o DevOps agente do Azure no cluster privado do Amazon EKS, copie o seguinte arquivo de manifesto e armazene o arquivo como`agent-deployment.yaml`: <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>Substitua `aws_account_id` e `<Azure account URL>` por sua Conta da AWS ID e URL DevOps da conta do Azure. | AWS DevOps | 
| Implante o agente no cluster privado do Amazon EKS. | Para implantar o agente do Azure Devops no cluster privado do Amazon EKS, use o seguinte comando:<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Verifique se o agente está em execução. | Para verificar se o DevOps agente do Azure está em execução, use o seguinte comando:<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>A saída esperada deve ser semelhante ao seguinte:<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>Certifique-se de que a coluna `READY ` mostre `1/1`. | AWS DevOps | 
| Verifique se o agente está registrado no pool de DevOps agentes do Azure. | Para verificar se o agente está implantado no cluster privado do Amazon EKS e está registrado no pool de agentes `eks-agent`, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Você deve ver um agente listado com o **status** **Online** e o nome do agente deve começar com **azure-pipelines-agent-eks-\$1**. | AWS DevOps | 

### Implantar a aplicação de exemplo
<a name="deploy-sample-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Bifurque o repositório de aplicativos de amostra para sua GitHub conta.  | Bifurque o seguinte repositório de AWS amostras para sua GitHub conta:[https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure -DevOps](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Crie um pipeline. | Para criar um pipeline na sua DevOps conta do Azure, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Verifique se a aplicação de exemplo foi implantada. | Após a conclusão do pipeline, verifique se a implantação da aplicação de exemplo foi bem-sucedida conferindo o repositório do Amazon ECR e o cluster do Amazon EKS.Para verificar artefatos no repositório do Amazon ECR, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Por exemplo, `20250501.1-image` e `20250501.1-helm`.Para verificar a implantação no cluster privado do Amazon EKS no namespace `webapp`, use o seguinte comando:<pre>kubectl get deploy -n webapp </pre>A saída esperada é a seguinte:<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>Observação: se essa for sua primeira execução do pipeline, talvez seja necessário autorizar a conexão de serviço e o pool de agentes. Procure solicitações de permissão na interface do DevOps pipeline do Azure e aprove-as para continuar. | AWS DevOps | 

## Solução de problemas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O pipeline falha quando o nome do repositório do Amazon ECR não corresponde a `webapp` | A aplicação de exemplo espera que o nome do repositório do Amazon ECR corresponda ao parâmetro `projectName: webapp` em `azure_pipeline.yml`.Para resolver esse problema, renomeie seu repositório do Amazon ECR para `webapp` ou atualize o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| Erro: cluster do Kubernetes inacessível: o servidor solicitou que o cliente fornecesse credenciais | Se você encontrar esse erro na etapa “Pull and Deploy Helm Chart” no pipeline do Azure, a causa-raiz geralmente decorre de uma configuração incorreta do perfil do IAM no `aws-auth ConfigMap` do cluster do Amazon EKS.Para resolver esse problema, verifique o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## Recursos relacionados
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blogs**
+ [Como se federar a AWS partir do Azure DevOps usando o OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Serviços da AWS documentação**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Documentação da Microsoft**
+ [O que é o Azure DevOps?](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [What is Azure Pipelines?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

# Execução de consultas SQL no Amazon Redshift usando o Terraform
<a name="execute-redshift-sql-queries-using-terraform"></a>

*Sylvia Qi e Aditya Ambati, Amazon Web Services*

## Resumo
<a name="execute-redshift-sql-queries-using-terraform-summary"></a>

Usar a infraestrutura como código (IaC) para a implantação e o gerenciamento do Amazon Redshift é uma prática predominante na empresa. DevOps A IaC facilita a implantação e a configuração de diversos recursos do Amazon Redshift, como clusters, snapshots e grupos de parâmetros. No entanto, a IaC não abrange o gerenciamento de recursos de banco de dados, como tabelas, esquemas, visualizações e procedimentos armazenados. Esses elementos de banco de dados são gerenciados por meio de consultas SQL e não são diretamente compatíveis com as ferramentas de IaC. Embora existam soluções e ferramentas para gerenciar esses recursos, você pode preferir não adicionar ferramentas extras à sua pilha tecnológica.

Este padrão descreve uma metodologia que usa o Terraform para implantar recursos de banco de dados do Amazon Redshift, incluindo tabelas, esquemas, visualizações e procedimentos armazenados. O padrão faz a distinção entre dois tipos de consultas SQL:
+ **Consultas não repetíveis**: essas consultas são executadas uma única vez durante a implantação inicial do Amazon Redshift para estabelecer os componentes essenciais do banco de dados. 
+ **Consultas repetíveis**: essas consultas são imutáveis e podem ser executadas novamente sem impactar o banco de dados. A solução emprega o Terraform para monitorar mudanças nas consultas repetíveis e aplicá-las de forma apropriada.

Para obter mais detalhes, consulte *Explicação passo a passo da solução* em [Informações adicionais](#execute-redshift-sql-queries-using-terraform-additional).

## Pré-requisitos e limitações
<a name="execute-redshift-sql-queries-using-terraform-prereqs"></a>

**Pré-requisitos **

Você deve ter um ativo Conta da AWS e instalar o seguinte em sua máquina de implantação:
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS CLI)
+ Um [AWS CLI perfil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) configurado com permissões do Amazon Redshift read/write 
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versão 1.6.2 ou versões posteriores
+ [Python 3](https://www.python.org/downloads/)
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)

**Limitações**
+ Esta solução fornece suporte para um único banco de dados do Amazon Redshift, pois o Terraform permite a criação de apenas um banco de dados durante a criação do cluster.
+ Este padrão não inclui testes para validar as alterações nas consultas repetíveis antes de aplicá-las. Recomendamos que você incorpore esses testes para aumentar a confiabilidade.
+ Para ilustrar a solução, este padrão fornece um arquivo de amostra `redshift.tf` que usa um arquivo de estado local do Terraform. No entanto, para ambientes de produção, recomendamos que você utilize um arquivo de estado remoto com um mecanismo de bloqueio para maior estabilidade e colaboração.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**

Esta solução foi desenvolvida e testada no [patch 179 do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-179).

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [amazon-redshift-sql-deploy-terraform](https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform).

## Arquitetura
<a name="execute-redshift-sql-queries-using-terraform-architecture"></a>

O diagrama apresentado a seguir ilustra como o Terraform gerencia os recursos do banco de dados do Amazon Redshift ao lidar tanto com consultas SQL não repetíveis quanto com consultas SQL repetíveis.

![\[Processo para o Terraform gerenciar os recursos do banco de dados do Amazon Redshift usando consultas SQL.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/0f4467ac-761b-4b6b-a32f-e18a2ca2245d/images/3b6ff9e8-e3d1-48ed-9fa1-4b14f7d3d65b.png)


O diagrama mostra as seguintes etapas:

1. O Terraform aplica consultas SQL não repetíveis durante a implantação inicial do cluster do Amazon Redshift.

1. O desenvolvedor faz a confirmação das alterações nas consultas SQL repetíveis.

1. O Terraform monitora as mudanças nas consultas SQL repetíveis.

1. O Terraform aplica consultas SQL repetíveis no banco de dados do Amazon Redshift.

A solução fornecida por este padrão é desenvolvida com base no [módulo do Terraform para o Amazon Redshift](https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/latest). O módulo do Terraform provisiona um cluster e um banco de dados do Amazon Redshift. Para aprimorar o módulo, usamos `terraform_data` recursos, que invocam um script Python personalizado para executar consultas SQL usando a operação de API do Amazon Redshift. [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html) Como resultado, o módulo é capaz de realizar o seguinte:
+ Implantar qualquer número de recursos de banco de dados usando consultas SQL após o provisionamento do banco de dados.
+ Realizar o monitoramento contínuo em busca de alterações nas consultas SQL repetíveis e aplicar essas mudanças usando o Terraform.

Para obter mais detalhes, consulte *Explicação passo a passo da solução* em [Informações adicionais](#execute-redshift-sql-queries-using-terraform-additional).

## Ferramentas
<a name="execute-redshift-sql-queries-using-terraform-tools"></a>

**Serviços da AWS**
+ O [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) é um serviço totalmente gerenciado de data warehouse em escala de petabytes na Nuvem AWS.

**Outras ferramentas**
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.
+ [Python](https://www.python.org/) é uma linguagem de programação de uso geral, empregada neste padrão para executar consultas SQL. 

## Práticas recomendadas
<a name="execute-redshift-sql-queries-using-terraform-best-practices"></a>
+ [Melhores práticas do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)
+ [Using the Amazon Redshift Data API to interact with Amazon Redshift clusters](https://aws.amazon.com/blogs/big-data/using-the-amazon-redshift-data-api-to-interact-with-amazon-redshift-clusters/)

## Épicos
<a name="execute-redshift-sql-queries-using-terraform-epics"></a>

### Implementação da solução usando o Terraform
<a name="deploy-the-solution-using-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| **Clone o repositório.** | Para clonar o repositório Git que contém o código do Terraform para o provisionamento de um cluster do Amazon Redshift, use o comando apresentado a seguir.<pre>git clone https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform.git</pre> | DevOps engenheiro | 
| **Atualize as variáveis do Terraform.** | Para personalizar a implantação do cluster do Amazon Redshift de acordo com seus requisitos específicos, atualize os parâmetros apresentados a seguir no arquivo `terraform.tfvars`.<pre>region                    = "<AWS_REGION>"<br />cluster_identifier        = "<REDSHIFT_CLUSTER_IDENTIFIER>"<br />node_type                 = "<REDSHIFT_NODE_TYPE>"<br />number_of_nodes           = "<REDSHIFT_NODE_COUNT>"<br />database_name             = "<REDSHIFT_DB_NAME>"<br />subnet_ids                = "<REDSHIFT_SUBNET_IDS>"<br />vpc_security_group_ids    = "<REDSHIFT_SECURITY_GROUP_IDS>"<br />run_nonrepeatable_queries = true<br />run_repeatable_queries    = true<br />sql_path_bootstrap        = "<BOOTSTRAP_SQLS_PATH>"<br />sql_path_nonrepeatable    = "<NON-REPEATABLE_SQLS_PATH>"<br />sql_path_repeatable       = "<REPEATABLE_SQLS_PATH>"<br />sql_path_finalize         = "<FINALIZE_SQLS_PATH>"<br />create_random_password    = false<br />master_username           = "<REDSHIFT_MASTER_USERNAME>"</pre> | DevOps engenheiro | 
| Implante os recursos usando o Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DevOps engenheiro | 
| (Opcional) Execute consultas SQL adicionais. | O repositório de amostra fornece várias consultas SQL para fins de demonstração. Para executar suas próprias consultas SQL, adicione-as às seguintes pastas:`/bootstrap` `/nonrepeatable` `/repeatable` `/finalize` |  | 

### Monitoramento da execução das instruções SQL
<a name="monitor-the-execution-of-sql-statements"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Monitore a implantação das instruções SQL. | É possível monitorar os resultados das execuções SQL em um cluster do Amazon Redshift. Para obter exemplos de saída que mostram uma execução SQL com falha e uma execução com êxito, consulte as *Instruções SQL de exemplo* em [Informações adicionais](#execute-redshift-sql-queries-using-terraform-additional).  | DBA, engenheiro DevOps  | 
| Limpe recursos. | Para excluir todos os recursos implantados pelo Terraform, execute o comando apresentado a seguir.<pre>terraform destroy</pre> | DevOps engenheiro | 

### Validação dos resultados
<a name="validate-the-results"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide os dados no cluster do Amazon Redshift. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DBA, AWS DevOps | 

## Recursos relacionados
<a name="execute-redshift-sql-queries-using-terraform-resources"></a>

**AWS documentação**
+ [Clusters provisionados pelo Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)
+ [Solução de problemas com a API de dados do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-troubleshooting.html)

**Outros recursos**
+ [Command: apply](https://developer.hashicorp.com/terraform/cli/commands/apply) (documentação do Terraform)

## Mais informações
<a name="execute-redshift-sql-queries-using-terraform-additional"></a>

**Explicação passo a passo da solução**

Para usar a solução, você deve organizar suas consultas SQL do Amazon Redshift de uma forma específica. Todas as consultas SQL devem ser armazenadas em arquivos com a extensão `.sql`.

No exemplo de código fornecido com este padrão, as consultas SQL estão organizadas na estrutura de pastas apresentada a seguir. É possível modificar o código (`sql-queries.tf` e `sql-queries.py`) para funcionar com qualquer estrutura que atenda ao seu caso de uso específico.

```
/bootstrap
     |- Any # of files
     |- Any # of sub-folders
/nonrepeatable
     |- Any # of files
     |- Any # of sub-folders
/repeatable
     /udf
          |- Any # of files
          |- Any # of sub-folders
     /table
          |- Any # of files
          |- Any # of sub-folders
     /view
          |- Any # of files
          |- Any # of sub-folders
     /stored-procedure
          |- Any # of files
          |- Any # of sub-folders
/finalize
     |- Any # of files
     |- Any # of sub-folders
```

Dada a estrutura de pastas apresentada anteriormente, durante a implantação do cluster do Amazon Redshift, o Terraform executa as consultas na seguinte ordem:

1. `/bootstrap`

1. `/nonrepeatable`

1. `/repeatable`

1. `/finalize`

A pasta `/repeatable` contém quatro subpastas: `/udf`, `/table`, `/view` e `/stored-procedure`. Essas subpastas indicam a ordem em que o Terraform executa as consultas SQL.

O script em Python que executa as consultas SQL é `sql-queries.py`. Primeiro, o script realiza a leitura de todos os arquivos e subpastas de um diretório de origem específico, por exemplo, o parâmetro `sql_path_bootstrap`. Em seguida, o script executa as consultas chamando a operação da API do Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift. É possível ter uma ou mais consultas SQL em um arquivo. O trecho de código apresentado a seguir mostra a função em Python que executa as instruções SQL armazenadas em um arquivo em um cluster do Amazon Redshift.

```
def execute_sql_statement(filename, cluster_id, db_name, secret_arn, aws_region):
    """Execute SQL statements in a file"""
    redshift_client = boto3.client(
        'redshift-data', region_name=aws_region)
    contents = get_contents_from_file(filename),
    response = redshift_client.execute_statement(
        Sql=contents[0],
        ClusterIdentifier=cluster_id,
        Database=db_name,
        WithEvent=True,
        StatementName=filename,
        SecretArn=secret_arn
    )
    ...
```

O script do Terraform `sql-queries.tf` cria os recursos [terraform\$1data](https://developer.hashicorp.com/terraform/language/resources/terraform-data) que invocam o script `sql-queries.py`. Há um recurso `terraform_data` para cada uma das quatro pastas: `/bootstrap`, `/nonrepeatable`, `/repeatable` e `/finalize`. O trecho de código apresentado a seguir mostra o recurso `terraform_data` que executa as consultas SQL na pasta `/bootstrap`.

```
locals {
  program               = "${path.module}/sql-queries.py"
  redshift_cluster_name = try(aws_redshift_cluster.this[0].id, null)
}

resource "terraform_data" "run_bootstrap_queries" {
  count      = var.create && var.run_nonrepeatable_queries && (var.sql_path_bootstrap != "") && (var.snapshot_identifier == null) ? 1 : 0
  depends_on = [aws_redshift_cluster.this[0]]

  provisioner "local-exec" {
    command = "python3 ${local.program} ${var.sql_path_bootstrap} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn} ${local.aws_region}"
  }
}
```

É possível controlar se as consultas serão executadas usando as variáveis apresentadas a seguir. Caso não deseje executar as consultas em `sql_path_bootstrap`, `sql_path_nonrepeatable`, `sql_path_repeatable` ou `sql_path_finalize`, defina seus valores como `""`.

```
  run_nonrepeatable_queries = true
  run_repeatable_queries    = true
  sql_path_bootstrap        = "src/redshift/bootstrap"
  sql_path_nonrepeatable    = "src/redshift/nonrepeatable"
  sql_path_repeatable       = "src/redshift/repeatable"
  sql_path_finalize         = "src/redshift/finalize"
```

Quando você executa `terraform apply`, o Terraform considera o recurso `terraform_data` adicionado após a conclusão do script, independentemente dos resultados do script. Se algumas consultas SQL falharem e você desejar executá-las novamente, é possível remover manualmente o recurso do estado do Terraform e executar `terraform apply` novamente. Por exemplo, o seguinte comando remove o recurso `run_bootstrap_queries` do estado do Terraform.

`terraform state rm module.redshift.terraform_data.run_bootstrap_queries[0]`

O exemplo de código apresentado a seguir mostra como o recurso `run_repeatable_queries` monitora alterações na pasta `repeatable` usando [sha256 hash](https://developer.hashicorp.com/terraform/language/functions/sha256). Se qualquer arquivo presente na pasta for atualizado, o Terraform marca todo o diretório para atualização. Em seguida, o Terraform executa novamente as consultas do diretório na próxima execução de `terraform apply`.

```
resource "terraform_data" "run_repeatable_queries" {
  count      = var.create_redshift && var.run_repeatable_queries && (var.sql_path_repeatable != "") ? 1 : 0
  depends_on = [terraform_data.run_nonrepeatable_queries]

  # Continuously monitor and apply changes in the repeatable folder
  triggers_replace = {
    dir_sha256 = sha256(join("", [for f in fileset("${var.sql_path_repeatable}", "**") : filesha256("${var.sql_path_repeatable}/${f}")]))
  }

  provisioner "local-exec" {
    command = "python3 ${local.sql_queries} ${var.sql_path_repeatable} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn}"
  }
}
```

Para aprimorar o código, você pode implementar um mecanismo para detectar e aplicar alterações apenas nos arquivos que foram atualizados na pasta `repeatable`, em vez de aplicá-las a todos os arquivos indiscriminadamente.

**Instruções SQL de exemplo**

A saída a seguir apresenta uma execução SQL com falha, juntamente com a mensagem de erro correspondente.

```
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/nonrepeatable testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): src/redshift/nonrepeatable/table/admin/admin.application_family.sql
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Status: FAILED
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): SQL execution failed.
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Error message: ERROR: syntax error at or near ")"
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec):   Position: 244
module.redshift.terraform_data.run_nonrepeatable_queries[0]: Creation complete after 3s [id=ee50ba6c-11ae-5b64-7e2f-86fd8caa8b76]
```

A saída apresentada a seguir mostra uma execução SQL com êxito.

```
module.redshift.terraform_data.run_bootstrap_queries[0]: Provisioning with 'local-exec'...
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/bootstrap testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): src/redshift/bootstrap/db.sql
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Status: FINISHED
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): SQL execution successful.
module.redshift.terraform_data.run_bootstrap_queries[0]: Creation complete after 2s [id=d565ef6d-be86-8afd-8e90-111e5ea4a1be]
```

# Exporte relatórios do AWS Backup de toda a organização no AWS Organizations como um arquivo CSV
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file"></a>

*Aromal Raj Jayarajan e Purushotham G K, Amazon Web Services*

## Resumo
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-summary"></a>

Esse padrão mostra como exportar relatórios de trabalho do AWS Backup de toda a organização para o AWS Organizations como um arquivo CSV. A solução usa o AWS Lambda e EventBridge a Amazon para categorizar os relatórios de trabalho do AWS Backup com base em seu status, o que pode ajudar na configuração de automações baseadas em status.

O AWS Backup ajuda organizações a gerenciar e automatizar centralmente a proteção de dados nos serviços da AWS, na nuvem e em ambientes on-premises. No entanto, para trabalhos do AWS Backup configurados dentro do AWS Organizations, os relatórios consolidados estão disponíveis somente no Console de Gerenciamento da AWS da conta de gerenciamento de cada organização. Trazer esses relatórios para fora da conta de gerenciamento pode reduzir o esforço necessário para a auditoria e aumentar o escopo de automações, notificações e alertas.

## Pré-requisitos e limitações
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma [organização](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html) ativa no AWS Organizations que inclui pelo menos uma conta de gerenciamento e uma conta de membro
+ AWS Backup configurado no nível da organização no AWS Organizations (para obter mais informações, consulte [Automatizar o backup centralizado em grande escala em todos os serviços da AWS usando o AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) no blog da AWS)
+ O [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) instalado e configurado em sua máquina local

**Limitações **

A solução fornecida nesse padrão identifica os recursos da AWS que estão configurados somente para trabalhos do AWS Backup. O relatório não consegue identificar recursos da AWS que não estão configurados para backup por meio do AWS Backup.

## Arquitetura
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Backup
+ AWS CloudFormation
+ Amazon EventBridge
+ AWS Lambda
+ AWS Security Token Service (AWS STS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Identity and Access Management (IAM)

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de fluxo de trabalho para exportar relatórios de trabalho do AWS Backup de toda a organização para o AWS Organizations como um arquivo CSV.

![\[Usando Lambda EventBridge, AWS STS e IAM para exportar relatórios de tarefas do AWS Backup de toda a organização em formato CSV.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/74955aad-cc6d-488b-aa34-ae43f50fec60/images/5c39c79f-e731-4ad0-b404-51ebe0976420.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Uma regra de EventBridge evento programado invoca uma função Lambda na conta membro (de relatórios) da AWS.

1. A função do Lambda então usa o AWS STS para presumir um perfil do IAM que tem as permissões necessárias para se conectar à conta de gerenciamento.

1. A função do Lambda faz o seguinte:
   + Solicita o relatório consolidado de trabalhos do AWS Backup para o serviço AWS Backup
   + Categoriza os resultados com base no status do trabalho do AWS Backup
   + Converte a resposta em um arquivo CSV
   + Carrega os resultados em um bucket do Amazon S3 na conta de relatórios dentro de pastas que são rotuladas com base na data de criação

## Ferramentas
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-tools"></a>

**Ferramentas**
+ O [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) é um serviço totalmente gerenciado que ajuda você a centralizar e automatizar a proteção de dados nos serviços da AWS, na nuvem e em ambientes on-premises.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, funções do Lambda, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outras contas da AWS.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Código **

O código desse padrão está disponível no GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositório.

## Práticas recomendadas
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-best-practices"></a>
+ [Práticas recomendadas de segurança para o Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) (*Guia do usuário do Amazon S3*)
+ [Práticas recomendadas para trabalhar com funções do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) (*Guia do desenvolvedor do AWS Lambda*)
+ [Práticas recomendadas para a conta de gerenciamento](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) (*Guia do usuário do AWS Organizations*)

## Épicos
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-epics"></a>

### Implante os componentes da solução
<a name="deploy-the-solution-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o GitHub repositório. | Clone o GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositório executando o seguinte comando em uma janela de terminal:<pre>git clone https://github.com/aws-samples/aws-backup-report-generator.git</pre>Para obter mais informações, consulte [Clonar um repositório no GitHub Docs](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). | AWS DevOps, DevOps engenheiro | 
| Implante os componentes da solução na conta membro (de relatórios) da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | DevOps engenheiro, AWS DevOps | 

### Testar a solução
<a name="test-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Certifique-se de que a EventBridge regra seja executada antes do teste. | Certifique-se de que a EventBridge regra seja executada aguardando pelo menos 24 horas ou aumentando a frequência do relatório no arquivo CloudFormation **template-reporting.yml** do modelo.**Como aumentar a frequência do relatório**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps engenheiro | 
| Verifique o bucket do Amazon S3 para ver o relatório gerado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps engenheiro | 

### Limpe os seus recursos
<a name="clean-up-your-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua os componentes da solução da conta membro (de relatórios). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps engenheiro | 
| Exclua os componentes da solução da conta de gerenciamento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps engenheiro | 

## Recursos relacionados
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-resources"></a>
+ [Tutorial: Using AWS Lambda with scheduled events](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html) (documentação do AWS Lambda)
+ [Criação de eventos programados para executar funções do AWS Lambda](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/scheduled-events-invoking-lambda-example.html) (SDK da AWS para documentação) JavaScript 
+ [Tutorial do IAM: Delegar acesso entre contas da AWS usando perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentação do IAM)
+ [Terminologia e conceitos do AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) (documentação do AWS Organizations)
+ [Creating report plans using the AWS Backup console](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-report-plan-console.html) (documentação do AWS Backup)
+ [Create an audit report](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-audit-report.html) (documentação do AWS Backup)
+ [Creating on-demand reports](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-on-demand-reports.html) (documentação do AWS Backup)
+ [O que é o AWS Backup?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) (documentação do AWS Backup)
+ [Automate centralized backup at scale across AWS services using AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) (publicação do Blog da AWS)

# Exportar tags de uma lista de EC2 instâncias da Amazon para um arquivo CSV
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file"></a>

*Sida Ju e Pac Joonhyun, Amazon Web Services*

## Resumo
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-summary"></a>

Esse padrão mostra como exportar programaticamente tags de uma lista de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) para um arquivo CSV.

Ao usar o script Python de exemplo fornecido, você pode reduzir o tempo necessário para revisar e categorizar suas EC2 instâncias da Amazon por tags específicas. Por exemplo, você pode usar o script para identificar e categorizar rapidamente uma lista de instâncias que sua equipe de segurança sinalizou para atualizações de software.

## Pré-requisitos e limitações
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-prereqs"></a>

**Pré-requisitos **
+ Python 3 instalado e configurado
+ AWS Command Line Interface (AWS CLI) instalado e configurado

**Limitações**

O exemplo de script Python fornecido nesse padrão pode pesquisar EC2 instâncias da Amazon com base somente nos seguintes atributos:
+ Instância IDs
+  IPv4 Endereços privados
+  IPv4 Endereços públicos

## Ferramentas
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-tools"></a>
+ O [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.
+ O [virtualenv](https://virtualenv.pypa.io/en/latest/) ajuda você a criar ambientes do Python isolados.
+ A [‭AWS Command Line Interface (AWS CLI)‭](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

**Repositório de código**

O script Python de exemplo para esse padrão está disponível no repositório GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags

## Épicos
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-epics"></a>

### Instalar e configurar os pré-requisitos
<a name="install-and-configure-the-prerequisites"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o GitHub repositório. | Caso ocorram erros ao executar comandos da AWS CLI, [certifique-se de que você está usando a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html).Clone o instances-export-tags repositório GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags) executando o seguinte comando Git em uma janela de terminal:<pre>git clone https://github.com/aws-samples/search-ec2-instances-export-tags.git</pre> | DevOps engenheiro | 
| Instale e ative o virtualenv. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html)Para obter mais informações, consulte o [Guia do usuário do virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html). | DevOps engenheiro | 
| Instale as dependências. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html) | DevOps engenheiro | 
| Configure um perfil nomeado da AWS.  | Se ainda não o fez, configure um perfil nomeado da AWS que inclua as credenciais necessárias para executar o script. Para criar um perfil nomeado, execute o comando [configurar a AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods).Para obter mais informações, consulte [Uso de perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) na documentação da AWS CLI. | DevOps engenheiro | 

### Configure e execute o script do Python
<a name="configure-and-run-the-python-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o arquivo de entrada. | Crie um arquivo de entrada que contenha uma lista das EC2 instâncias da Amazon para as quais você deseja que o script pesquise e exporte tags. Você pode listar instâncias IDs, IPv4 endereços privados ou IPv4 endereços públicos.Certifique-se de que cada EC2 instância da Amazon esteja listada em sua própria linha no arquivo de entrada.**Exemplo de arquivo de entrada**<pre>1    i-0547c351bdfe85b9f<br />2    54.157.194.156<br />3    172.31.85.33<br />4    54.165.198.144<br />5    i-0b6223b5914111a4b<br />6    172.31.85.44<br />7    54.165.198.145<br />8    172.31.80.219<br />9    172.31.94.199</pre> | DevOps engenheiro | 
| Execute o script em Python . | Execute o script executando o comando a seguir no terminal:<pre>python search_instances.py -i INPUTFILE -o OUTPUTFILE -r REGION [-p PROFILE]</pre>Substitua `INPUTFILE` pelo nome do arquivo de entrada. Substitua `OUTPUTFILE` pelo nome que você deseja dar ao arquivo de saída CSV. `REGION`Substitua pela região da AWS em que seus EC2 recursos da Amazon estão. Se você estiver usando um perfil nomeado da AWS, substitua `PROFILE` pelo perfil nomeado que você está usando.Para obter uma lista com os parâmetros compatíveis e a descrição deles, execute o comando a seguir:<pre>python search_instances.py -h</pre>Para obter mais informações e ver um exemplo de arquivo de saída, consulte o `README.md` arquivo no repositório GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags). instances-export-tags | DevOps engenheiro | 

## Recursos relacionados
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-resources"></a>
+ [Configuração da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Guia do usuário da AWS CLI*)

# Gere um CloudFormation modelo da AWS contendo regras gerenciadas do AWS Config usando o Troposphere
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere"></a>

*Lucas Nation e Freddie Wilson, Amazon Web Services*

## Resumo
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-summary"></a>

Muitas organizações usam [regras gerenciadas do AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) para avaliar a conformidade de seus recursos da Amazon Web Services (AWS) em relação às melhores práticas em geral. No entanto, a manutenção dessas regras pode ser demorada e esse padrão ajuda você a aproveitar a [Troposphere](https://troposphere.readthedocs.io/en/latest/quick_start.html), uma biblioteca Python, para gerar e gerenciar regras gerenciadas do AWS Config.

O padrão ajuda você a gerenciar suas regras gerenciadas do AWS Config usando um script Python para converter uma planilha do Microsoft Excel contendo regras gerenciadas da AWS em um modelo da AWS. CloudFormation O Troposphere atua como infraestrutura como código (IaC) e isso significa que você pode atualizar a planilha do Excel com regras gerenciadas, em vez de usar um arquivo no formato JSON ou YAML. Em seguida, você usa o modelo para iniciar uma CloudFormation pilha da AWS que cria e atualiza as regras gerenciadas na sua conta da AWS.

O CloudFormation modelo da AWS define cada regra gerenciada do AWS Config usando a planilha do Excel e ajuda você a evitar a criação manual de regras individuais no AWS Management Console. *O script padroniza os parâmetros de cada regra gerenciada para um dicionário vazio e os `ComplianceResourceTypes` padrões do escopo são de. `THE_RULE_IDENTIFIER.template file`* Para obter mais informações sobre o identificador da regra, consulte [Criação de regras gerenciadas do AWS Config com CloudFormation modelos da AWS na documentação](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) do AWS Config.

## Pré-requisitos e limitações
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Familiaridade com o uso de CloudFormation modelos da AWS para criar regras gerenciadas do AWS Config. Para obter mais informações sobre isso, consulte [Criação de regras gerenciadas do AWS Config com CloudFormation modelos da AWS na documentação](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) do AWS Config.  
+ Python 3 instalado e configurado. Para obter mais informações sobre isso, consulte a [documentação do Python](https://www.python.org/).
+ Um ambiente de desenvolvimento integrado (IDE) já existente.  
+ Identifique suas unidades organizacionais (OUs) em uma coluna na amostra de planilha `excel_config_rules.xlsx` do Excel (anexada).

## Épicos
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-epics"></a>

### Personalize e configure as regras gerenciadas do AWS Config
<a name="customize-and-configure-the-aws-config-managed-rules"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize o exemplo da planilha do Excel. | Faça o download do exemplo da planilha `excel_config_rules.xlsx` do Excel (anexada) e identifique como as regras gerenciadas `Implemented` do AWS Config que você deseja usar. As regras marcadas como `Implemented` serão adicionadas ao CloudFormation modelo da AWS. | Desenvolvedor | 
| (Opcional) Atualize o arquivo config\$1rules\$1params.json com os parâmetros de regra do AWS Config. | Algumas regras gerenciadas do AWS Config exigem parâmetros e devem ser passadas para o script Python como um arquivo JSON usando a opção `--param-file`. Por exemplo, a regra `access-keys-rotated` gerenciada usa o seguinte parâmetro `maxAccessKeyAge`:<pre>{<br />         "access-keys-rotated": {<br />             "InputParameters": {<br />                 "maxAccessKeyAge": 90<br />             }<br />         }<br />     }</pre>Neste parâmetro de exemplo, o `maxAccessKeyAge` é definido para 90 dias. O script lê o arquivo de parâmetros e adiciona qualquer `InputParameters` encontrado. | Desenvolvedor | 
| (Opcional) Atualize o arquivo config\$1rules\$1params.json com o AWS Config. ComplianceResourceTypes | Por padrão, o script Python recupera `ComplianceResourceTypes` a partir dos modelos definidos pela AWS. Se você quiser substituir o escopo de uma regra gerenciada específica do AWS Config, precisará passá-la para o script Python como um arquivo JSON usando a opção `--param-file`.Por exemplo, o código de exemplo a seguir mostra como o `ComplianceResourceTypes` para `ec2-volume-inuse-check` é definido na lista `["AWS::EC2::Volume"]`:<pre>{<br />         "ec2-volume-inuse-check": {<br />             "Scope": {<br />                 "ComplianceResourceTypes": [<br />                     "AWS::EC2::Volume"<br />                 ]<br />             }<br />         }<br />     }</pre> | Desenvolvedor | 

### Execute o script do Python
<a name="run-the-python-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale os pacotes pip do arquivo requirements.txt.  | Baixe o arquivo `requirements.txt` (anexado) e execute o seguinte comando em seu IDE para instalar os pacotes Python:`pip3 install -r requirements.txt` | Desenvolvedor | 
| Execute o script em Python .  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html)Você também pode adicionar os seguintes parâmetros opcionais:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Desenvolvedor | 

### Implantar as regras gerenciadas do AWS Config
<a name="deploy-the-aws-config-managed-rules"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicie o AWS CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Desenvolvedor | 

## Anexos
<a name="attachments-07c1cfff-fc9e-4a1f-bd36-48f025808bd8"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/07c1cfff-fc9e-4a1f-bd36-48f025808bd8/attachments/attachment.zip)

# Conceda às instâncias do SageMaker notebook acesso temporário a um CodeCommit repositório em outra conta da AWS
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Helge Aufderheide, Amazon Web Services*

## Resumo
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

Esse padrão mostra como conceder aos usuários e instâncias de SageMaker notebooks da Amazon acesso temporário a um CodeCommit repositório da AWS que está em outra conta da AWS. Esse padrão também mostra como você pode conceder permissões granulares para ações específicas que cada entidade pode realizar em cada repositório.

As organizações geralmente armazenam CodeCommit repositórios em uma conta da AWS diferente da conta que hospeda seu ambiente de desenvolvimento. Essa configuração de várias contas ajuda a controlar o acesso aos repositórios e reduz o risco de sua exclusão acidental. Para conceder essas permissões entre contas, é uma melhor prática usar perfis do Identity and Access Management (IAM) da AWS. Em seguida, identidades predefinidas do IAM em cada conta da AWS podem assumir temporariamente as funções para criar uma cadeia de confiança controlada em todas as contas.

**nota**  
Você pode aplicar um procedimento semelhante para conceder acesso entre contas a outras identidades do IAM a um CodeCommit repositório. Para obter mais informações, consulte [Configurar o acesso entre contas a um CodeCommit repositório da AWS usando funções no Guia CodeCommit ](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) *do usuário da AWS*.

## Pré-requisitos e limitações
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da AWS com um CodeCommit repositório (*conta A*)
+ Uma segunda conta ativa da AWS com uma instância de SageMaker notebook (*conta B*)
+ Um usuário da AWS com permissões suficientes para criar e modificar perfis do IAM na conta A
+ Um segundo usuário da AWS com permissões suficientes para criar e modificar perfis do IAM na conta B

## Arquitetura
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

O diagrama a seguir mostra um exemplo de fluxo de trabalho para conceder acesso cruzado a um repositório a uma instância de SageMaker notebook e aos usuários em uma CodeCommit conta da AWS:

![\[Fluxo de trabalho para acesso entre contas ao CodeCommit\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. A função de usuário da AWS e a função de instância do SageMaker notebook na conta B assumem um [perfil nomeado](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles).

1. A política de permissões do perfil nomeado especifica uma função de CodeCommit acesso na conta A que o perfil então assume.

1. A política de confiança da função de CodeCommit acesso na conta A permite que o perfil nomeado na conta B assuma a função de CodeCommit acesso.

1. A política de permissões do IAM do CodeCommit repositório na conta A permite que a função de CodeCommit acesso acesse o CodeCommit repositório.

**Pilha de tecnologia**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## Ferramentas
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
+ O [Git](https://git-scm.com/) é um sistema distribuído de controle de versões para rastrear alterações no código-fonte durante o desenvolvimento do software.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)é um utilitário que ajuda você a enviar e extrair código de CodeCommit repositórios estendendo o Git.
+ [pip](https://pypi.org/project/pip/) é o instalador de pacotes para Python. Você pode usar o pip para instalar pacotes do Python Package Index e outros índices.

## Práticas recomendadas
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

Ao definir permissões com as políticas do IAM, certifique-se de conceder apenas as permissões necessárias para executar uma tarefa. Para obter mais informações, consulte [Aplicar permissões de privilégios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) na documentação do IAM.

Ao implementar esse padrão, certifique-se de fazer o seguinte:
+ Confirme se os princípios do IAM têm somente as permissões necessárias para realizar ações específicas e necessárias em cada repositório. Por exemplo, é recomendável permitir que os princípios aprovados do IAM enviem e mesclem alterações em ramificações específicas do repositório, mas somente solicitem mesclagens em ramificações protegidas. 
+ Confirme se os princípios do IAM recebem diferentes perfis do IAM com base em suas respectivas funções e responsabilidades em cada projeto. Por exemplo, um desenvolvedor terá permissões de acesso diferentes das de um gerente de lançamento ou administrador da AWS. 

## Épicos
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### Configurar o perfil do IAM
<a name="configure-the-iam-roles"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a função de CodeCommit acesso e a política de permissões. | Para automatizar o processo de configuração manual documentado neste épico,**** você pode usar um [ CloudFormation modelo da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html).Na conta que contém o CodeCommit repositório (*conta A*), faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Antes de migrar esta configuração para o ambiente de produção, é uma prática recomendada criar sua própria política do IAM voltada para a concessão de [permissões com o princípio de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege). Para obter mais informações, consulte a seção **Informações adicionais** desse padrão. | AWS geral, AWS DevOps | 
| Conceda à função da instância do SageMaker notebook na conta B permissões para assumir a função de CodeCommit acesso na conta A. | Na conta que contém a função IAM da instância do SageMaker notebook (*conta B),* faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Para ver o Amazon Resource Name (ARN) do seu repositório, [consulte CodeCommit Exibir detalhes do repositório](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html) no Guia do usuário da *AWS CodeCommit *. | AWS geral, AWS DevOps | 

### Configure sua instância do SageMaker notebook na conta B
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure um perfil de usuário na instância do SageMaker notebook da AWS para assumir a função na conta A.  | [Certifique-se de que você tem a versão mais recente da AWS Command Line Interface (AWS CLI) instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).Na conta que contém a instância do SageMaker notebook (*conta B),* faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | AWS geral, AWS DevOps | 
| Instale o utilitário git-remote-codecommit. | Siga as instruções na [Etapa 2: Instalação git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) no *Guia do CodeCommit usuário da AWS*. | Cientista de dados | 

### Acesse o repositório
<a name="access-the-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Acesse o CodeCommit repositório usando os comandos Git ou. SageMaker | **Para usar Git**Os diretores do IAM que assumem a função da instância do SageMaker notebook na conta B agora podem executar comandos Git para acessar CodeCommit o repositório na conta A. Por exemplo, os usuários podem executar comandos `git clone` como`git pull`, e. `git push`Para obter instruções, consulte [Conecte-se a um CodeCommit repositório da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) no *Guia do CodeCommit usuário da AWS*.Para obter informações sobre como usar o Git com CodeCommit, consulte [Introdução à AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html) no Guia * CodeCommit do usuário da AWS*.**Para usar SageMaker**Para usar o Git a partir do SageMaker console, você deve permitir que o Git recupere as credenciais do seu repositório. CodeCommit Para obter instruções, consulte [Associar um CodeCommit repositório em uma conta diferente da AWS a uma instância de notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html) na SageMaker documentação. | Git, console bash | 

## Recursos relacionados
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [Configure o acesso entre contas a um CodeCommit repositório da AWS usando funções (documentação](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) da AWS CodeCommit )
+ [Tutorial do IAM: Delegar acesso entre contas da AWS usando perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (documentação do IAM)

## Mais informações
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**Restringindo CodeCommit permissões para ações específicas**

Para restringir as ações que um diretor do IAM pode realizar no CodeCommit repositório, modifique as ações que são permitidas na política de CodeCommit acesso.

Para obter mais informações sobre operações de CodeCommit API, consulte a [referência de CodeCommit permissões](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html) no *Guia CodeCommit do usuário da AWS*.

**nota**  
Você também pode editar a política gerenciada [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser)da AWS de acordo com seu caso de uso.

**Restringindo CodeCommit permissões para repositórios específicos**

Para criar um ambiente multilocatário em que mais de um repositório de código possa ser acessado somente por usuários específicos, faça o seguinte:

1. Crie várias funções de CodeCommit acesso na conta A. Em seguida, configure a política de confiança de cada função de acesso para permitir que usuários específicos na conta B assumam a função.

1. Restrinja quais repositórios de código cada função pode assumir adicionando uma condição de **“Recurso”** à política de cada função de CodeCommit acesso.

**Exemplo de condição de “Recurso” que restringe o acesso de um diretor do IAM a um repositório específico CodeCommit **

```
"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]
```

**nota**  
Para facilitar a identificação e a diferenciação de múltiplos repositórios de código na mesma conta da AWS, é possível atribuir prefixos distintos aos nomes dos repositórios. Por exemplo, você pode nomear repositórios de código com prefixos que se alinham a diferentes grupos de desenvolvedores, como **myproject-subproject1-repo1** e **myproject-subproject2-repo1**. Em seguida, você pode criar um perfil do IAM para cada grupo de desenvolvedores com base nos prefixos atribuídos. **Por exemplo, você pode criar um perfil chamado **myproject-subproject1-repoaccess e conceder a ele acesso a todos os repositórios** de código que incluem o prefixo myproject-subproject1.**

**Exemplo da condição “Recurso” que faz referência a um ARN de repositório de código que inclui um prefixo específico**

```
"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*
```

# Implemente uma estratégia GitHub de ramificação do Flow para ambientes com várias contas DevOps
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens e Abhilash Vinod, Amazon Web Services*

## Resumo
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Ao gerenciar um repositório de código-fonte, diferentes estratégias de ramificação influenciam os processos de desenvolvimento e de liberação de software empregados pelas equipes de desenvolvimento. Exemplos de estratégias comuns de ramificação incluem Trunk, GitHub Flow e Gitflow. Essas estratégias usam diferentes ramificações, e as atividades realizadas em cada ambiente são distintas. As organizações que estão implementando DevOps processos se beneficiariam de um guia visual para ajudá-las a entender as diferenças entre essas estratégias de ramificação. A utilização deste material visual na sua organização auxilia as equipes de desenvolvimento a coordenar as atividades e cumprir os padrões organizacionais. Esse padrão fornece esse visual e descreve o processo de implementação de uma estratégia de ramificação do GitHub Flow em sua organização.

Esse padrão faz parte de uma série de documentação sobre como escolher e implementar estratégias de DevOps ramificação para organizações com várias Contas da AWS. Esta série foi criada para ajudar você a aplicar a estratégia correta e as melhores práticas desde o início, a fim de otimizar sua experiência na nuvem. GitHub O fluxo é apenas uma estratégia de ramificação possível que sua organização pode usar. Esta série de documentação também aborda os modelos de ramificação [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) e [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Se você ainda não fez isso, recomendamos que você analise [Como escolher uma estratégia de ramificação do Git para DevOps ambientes com várias contas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar a orientação desse padrão. É importante usar a diligência prévia para escolher a estratégia de ramificação mais adequada para a organização.

Este guia fornece um diagrama que mostra como uma organização pode implementar a estratégia GitHub de fluxo. É recomendável que você revise o [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance para analisar as melhores práticas. Esse padrão inclui tarefas, etapas e restrições recomendadas para cada etapa do DevOps processo.

## Pré-requisitos e limitações
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Pré-requisitos **
+ Git, [instalado](https://git-scm.com/downloads). Ele é usado como ferramenta de repositório para o código-fonte.
+ Draw.io, [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicação é usada para visualizar e editar o diagrama.

## Arquitetura
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitetura de destino**

O diagrama apresentado a seguir pode ser usado de forma semelhante a um [Quadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Você alinha as ramificações no eixo vertical com os AWS ambientes no eixo horizontal para determinar quais ações realizar em cada cenário. Os números representam a sequência das atividades no fluxo de trabalho. Neste exemplo, você acompanha o caminho de uma ramificação `feature` até a implantação em um ambiente de produção.

![\[Quadrado de Punnett das atividades do GitHub Flow em cada filial e ambiente.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/780a5bce-3cd2-4092-8537-b7a77c3d6b8d/images/8a2a774a-cd85-466e-838e-a9a1f3b58a63.png)


Para obter mais informações sobre ambientes e ramificações em uma abordagem de GitHub fluxo, consulte [Escolhendo uma estratégia de ramificação do Git para](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach) ambientes com várias contas. Contas da AWS DevOps 

**Automação e escala**

A integração contínua e a entrega contínua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipelines) também fornecem governança e barreiras para as equipes de desenvolvimento, impondo consistência, padrões, melhores práticas e níveis mínimos de aceitação para aceitação e implantação de recursos. Para obter mais informações, consulte [Praticando a integração contínua e a entrega contínua em AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS oferece um conjunto de serviços para desenvolvedores projetados para ajudá-lo a criar CI/CD pipelines. Por exemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)é um serviço de entrega contínua totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila o código-fonte, executa testes e produz pacotes ready-to-deploy de software. Para obter mais informações, consulte [Ferramentas do desenvolvedor em AWS](https://aws.amazon.com/products/developer-tools/).

## Ferramentas
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS serviços e ferramentas**

AWS fornece um conjunto de serviços para desenvolvedores que você pode usar para implementar esse padrão:
+ O [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) é um serviço gerenciado e altamente escalável de repositório de artefatos, que facilita o armazenamento e o compartilhamento de pacotes de software para o desenvolvimento de aplicações.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias AWS Lambda , funções ou serviços do Amazon Elastic Container Service (Amazon ECS) no local.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.

**Outras ferramentas**
+ O [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) é uma aplicação voltada para a criação de fluxogramas e diagramas. O repositório de código contém modelos no formato .drawio para o Draw.io.
+ O [Figma](https://www.figma.com/design-overview/) é uma ferramenta de design on-line voltada para a colaboração. O repositório de código contém modelos no formato .fig para o Figma.

**Repositório de código**

Esse arquivo fonte para o diagrama nesse padrão está disponível no repositório GitHub [Git Branching Strategy for GitHub ](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/github-flow) Flow. Estão incluídos arquivos nos formatos PNG, draw.io e Figma. É possível modificar esses diagramas para adequação aos processos da sua organização.

## Práticas recomendadas
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga as melhores práticas e recomendações em [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing a [Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy para ambientes com várias contas. DevOps Isso ajuda você a implementar com eficiência o desenvolvimento GitHub baseado em Flow, promover a colaboração, melhorar a qualidade do código e simplificar o processo de desenvolvimento.

## Épicos
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Analisando os fluxos de trabalho do GitHub Flow
<a name="reviewing-the-github-flow-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Revise o processo GitHub de fluxo padrão. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 
| Revise o processo de correção de bugs do GitHub Flow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 
| Revise o processo de hotfix GitHub Flow. | GitHub O Flow foi projetado para permitir a entrega contínua, em que as alterações de código são implantadas com frequência e confiabilidade em ambientes superiores. O ponto principal é que cada ramificação `feature` pode ser implantada a qualquer momento.As ramificações `Hotfix`, que são semelhantes às ramificações `feature` ou `bugfix`, podem seguir o mesmo procedimento que qualquer uma dessas outras ramificações. No entanto, devido à sua urgência, as correções urgentes geralmente recebem maior prioridade. Dependendo das políticas da equipe e da urgência da situação, determinadas etapas do processo podem ser agilizadas. Por exemplo, as revisões de código para correções urgentes podem receber prioridade e ser concluídas rapidamente. Assim, embora o processo de correção urgente ocorra de forma semelhante ao processo destinado aos recursos ou às correções de bugs, a urgência envolvida pode justificar adaptações no cumprimento dos procedimentos. É fundamental estabelecer diretrizes sobre o gerenciamento de correções urgentes para garantir que elas sejam tratadas com eficiência e segurança. | DevOps engenheiro | 

## Solução de problemas
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Conflitos em ramificações | Um problema comum que pode ocorrer com o modelo GitHub Flow é quando um hotfix precisa ocorrer na produção, mas uma alteração correspondente precisa ocorrer em uma `feature` `hotfix` ramificação ou ramificação em que os mesmos recursos estão sendo modificados. `bugfix` Recomendamos que você faça a mesclagem das alterações da ramificação `main` para as ramificações menos avançadas com frequência, a fim de evitar conflitos significativos ao mesclar de volta para a ramificação `main`. | 
| Nível de maturidade da equipe | GitHub O Flow incentiva implantações diárias em ambientes superiores, adotando a verdadeira integração contínua e entrega contínua (CI/CD). É indispensável que a equipe conte com maturidade técnica suficiente para desenvolver recursos e criar testes de automação para eles. A equipe precisa conduzir uma análise detalhada da solicitação de mesclagem antes que as alterações sejam aprovadas. Isso promove uma cultura técnica voltada à engenharia, que é robusta e valoriza a qualidade, a responsabilidade e a eficiência no processo de desenvolvimento. | 

## Recursos relacionados
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Este guia não inclui treinamento em Git. No entanto, existem muitos recursos de alta qualidade disponíveis na internet, caso você precise realizar esse treinamento. Recomendamos que você comece pelo site de [documentação do Git](https://git-scm.com/doc).

Os recursos a seguir podem ajudá-lo em sua jornada de ramificação do GitHub Flow no Nuvem AWS.

**AWS DevOps orientação**
+ [AWS DevOps Orientação](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arquitetura de referência do pipeline de implantação](https://pipelines.devops.aws.dev/)
+ [O que DevOps é](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps recursos](https://aws.amazon.com/devops/resources/)

**GitHub Orientação de fluxo**
+ [GitHub Tutorial de início rápido do Flow](https://docs.github.com/en/get-started/using-github/github-flow) () GitHub
+ [Por que GitHub Flow?](https://githubflow.github.io/)

**Outros recursos**
+ [Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implemente uma estratégia de ramificação do Gitflow para ambientes com várias contas DevOps
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens, Stephen DiCato, Abhilash Vinod e Tim Wondergem, da Amazon Web Services*

## Resumo
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Ao gerenciar um repositório de código-fonte, diferentes estratégias de ramificação influenciam os processos de desenvolvimento e de liberação de software empregados pelas equipes de desenvolvimento. Exemplos de estratégias comuns de ramificação incluem Trunk, Gitflow e Flow. GitHub Essas estratégias usam diferentes ramificações, e as atividades realizadas em cada ambiente são distintas. As organizações que estão implementando DevOps processos se beneficiariam de um guia visual para ajudá-las a entender as diferenças entre essas estratégias de ramificação. A utilização deste material visual na sua organização auxilia as equipes de desenvolvimento a coordenar as atividades e cumprir os padrões organizacionais. O presente padrão fornece este material visual e descreve o processo de implementação da estratégia de ramificação do Gitflow em sua organização.

Esse padrão faz parte de uma série de documentação sobre como escolher e implementar estratégias de DevOps ramificação para organizações com várias Contas da AWS. A série foi desenvolvida para orientar você na aplicação da estratégia adequada e das práticas recomendadas desde o início, simplificando sua experiência na nuvem. O Gitflow é apenas uma das possíveis estratégias de ramificação que sua organização pode utilizar. Esta série de documentação também aborda os modelos de ramificação [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) e [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html). Se você ainda não fez isso, recomendamos que você analise [Como escolher uma estratégia de ramificação do Git para DevOps ambientes com várias contas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar a orientação desse padrão. É importante usar a diligência prévia para escolher a estratégia de ramificação mais adequada para a organização.

Este guia fornece um diagrama que ilustra como uma organização poderia implementar a estratégia do Gitflow. É recomendável que você revise o [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance para analisar as melhores práticas. Esse padrão inclui tarefas, etapas e restrições recomendadas para cada etapa do DevOps processo.

## Pré-requisitos e limitações
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Pré-requisitos **
+ Git, [instalado](https://git-scm.com/downloads). Ele é usado como ferramenta de repositório para o código-fonte.
+ Draw.io, [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicação é usada para visualizar e editar o diagrama.
+ (Opcional) Plug-in do Gitflow, [instalado](https://github.com/nvie/gitflow).

## Arquitetura
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitetura de destino**

O diagrama apresentado a seguir pode ser usado de forma semelhante a um [Quadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Você alinha as ramificações no eixo vertical com os AWS ambientes no eixo horizontal para determinar quais ações realizar em cada cenário. Os números representam a sequência das atividades no fluxo de trabalho. Neste exemplo, você acompanha o caminho de uma ramificação de recurso até a implantação em um ambiente de produção.

![\[Quadro de Punnett das atividades do Gitflow em cada ramificação e ambiente.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/1dee2a06-cc54-4797-b9a9-78b6685edd33/images/d8be49bf-dca1-4892-ac4c-11996a7258c2.png)


Para obter mais informações sobre ambientes e ramificações em uma abordagem do Contas da AWS Gitflow, consulte [Escolhendo uma estratégia de ramificação do Git](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) para ambientes com várias contas. DevOps 

**Automação e escala**

A integração contínua e a entrega contínua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipelines) também fornecem governança e barreiras para as equipes de desenvolvimento, impondo consistência, padrões, melhores práticas e níveis mínimos de aceitação para aceitação e implantação de recursos. Para obter mais informações, consulte [Praticando a integração contínua e a entrega contínua em AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS oferece um conjunto de serviços para desenvolvedores projetados para ajudá-lo a criar CI/CD pipelines. Por exemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)é um serviço de entrega contínua totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila o código-fonte, executa testes e produz pacotes ready-to-deploy de software. Para obter mais informações, consulte [Ferramentas do desenvolvedor em AWS](https://aws.amazon.com/products/developer-tools/).

## Ferramentas
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS serviços e ferramentas**

AWS fornece um conjunto de serviços para desenvolvedores que você pode usar para implementar esse padrão:
+ O [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) é um serviço gerenciado e altamente escalável de repositório de artefatos, que facilita o armazenamento e o compartilhamento de pacotes de software para o desenvolvimento de aplicações.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias AWS Lambda , funções ou serviços do Amazon Elastic Container Service (Amazon ECS) no local.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.

**Outras ferramentas**
+ O [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) é uma aplicação voltada para a criação de fluxogramas e diagramas. O repositório de código contém modelos no formato .drawio para o Draw.io.
+ O [Figma](https://www.figma.com/design-overview/) é uma ferramenta de design on-line voltada para a colaboração. O repositório de código contém modelos no formato .fig para o Figma.
+ (Opcional) O [plug-in do Gitflow](https://github.com/nvie/gitflow) consiste em um conjunto de extensões do Git que disponibilizam operações avançadas de repositório para o modelo de ramificação do Gitflow.

**Repositório de código**

Esse arquivo fonte para o diagrama nesse padrão está disponível na [Estratégia de ramificação do GitHub Git](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/gitflow) para repositório. GitFlow Estão incluídos arquivos nos formatos PNG, draw.io e Figma. É possível modificar esses diagramas para adequação aos processos da sua organização.

## Práticas recomendadas
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga as melhores práticas e recomendações em [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing a [Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy para ambientes com várias contas. DevOps Esses recursos auxiliam na implementação eficiente do desenvolvimento baseado em Gitflow, incentivam a colaboração, aumentam a qualidade do código e agilizam o processo de desenvolvimento.

## Épicos
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Análise dos fluxos de trabalho do Gitflow
<a name="reviewing-the-gitflow-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Analise o processo padrão do Gitflow. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 
| Analise o processo do Gitflow para correções urgentes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 
| Analise o processo do Gitflow para correções de bugs. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 

## Solução de problemas
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Conflitos em ramificações | Um problema comum que pode ocorrer com o modelo do Gitflow é quando uma correção urgente precisa ser aplicada em um ambiente de produção, mas é necessário realizar uma alteração correspondente em um ambiente menos avançado, no qual outra ramificação está modificando os mesmos recursos. Recomendamos que você tenha apenas uma ramificação de liberação ativa por vez. Se você tiver mais de uma ramificação ativa ao mesmo tempo, as alterações nos ambientes podem entrar em conflito, impedindo que uma ramificação seja transferida para a produção. | 
| Mesclar | As liberações devem ser mescladas de volta nas ramificações principal e de desenvolvimento o quanto antes, para consolidar o trabalho nas ramificações primárias. | 
| Mesclagem por compressão | Use a mesclagem por compressão apenas ao mesclar de uma ramificação `feature` para uma ramificação `develop`. Usar mesclagens por compressão em ramificações avançadas dificulta a mesclagem das alterações de volta para as ramificações menos avançadas. | 

## Recursos relacionados
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Este guia não inclui treinamento em Git. No entanto, existem muitos recursos de alta qualidade disponíveis na internet, caso você precise realizar esse treinamento. Recomendamos que você comece pelo site de [documentação do Git](https://git-scm.com/doc).

Os recursos apresentados a seguir podem ajudar você na jornada de implementação de ramificações do Gitflow na Nuvem AWS.

**AWS DevOps orientação**
+ [AWS DevOps Orientação](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arquitetura de referência do pipeline de implantação](https://pipelines.devops.aws.dev/)
+ [O que DevOps é](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps recursos](https://aws.amazon.com/devops/resources/)

**Orientações para o Gitflow**
+ [O blog original do Gitflow](https://nvie.com/posts/a-successful-git-branching-model/) (publicação do blog do Vincent Driessen)
+ [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) (Atlassian)
+ [Gitflow ativado GitHub: Como usar fluxos de trabalho do Git Flow com GitHub ](https://youtu.be/WQuxeEvaCxs) repositórios baseados (vídeo) YouTube 
+ [Exemplo de Git Flow Init](https://www.youtube.com/watch?v=d4cDLBFbekw) (vídeo) YouTube 
+ [A ramificação de lançamento do Gitflow do início ao fim (vídeo](https://www.youtube.com/watch?v=rX80eKPdA28)) YouTube 

**Outros recursos**

[Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implemente uma estratégia de ramificação de troncos para ambientes com várias contas DevOps
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens e Rayjan Wilson, Amazon Web Services*

## Resumo
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-summary"></a>

Ao gerenciar um repositório de código-fonte, diferentes estratégias de ramificação influenciam os processos de desenvolvimento e de liberação de software empregados pelas equipes de desenvolvimento. Exemplos de estratégias comuns de ramificação incluem Trunk, GitHub Flow e Gitflow. Essas estratégias usam diferentes ramificações, e as atividades realizadas em cada ambiente são distintas. As organizações que estão implementando DevOps processos se beneficiariam de um guia visual para ajudá-las a entender as diferenças entre essas estratégias de ramificação. A utilização deste material visual na sua organização auxilia as equipes de desenvolvimento a coordenar as atividades e cumprir os padrões organizacionais. O presente padrão fornece este material visual e descreve o processo de implementação da estratégia de ramificação do Trunk em sua organização.

Esse padrão faz parte de uma série de documentação sobre como escolher e implementar estratégias de DevOps ramificação para organizações com várias Contas da AWS. A série foi desenvolvida para orientar você na aplicação da estratégia adequada e das práticas recomendadas desde o início, simplificando sua experiência na nuvem. O Trunk é apenas uma das possíveis estratégias de ramificação que sua organização pode utilizar. Esta série de documentação também aborda os modelos de ramificação do [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) e do [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Se você ainda não fez isso, recomendamos que você analise [Como escolher uma estratégia de ramificação do Git para DevOps ambientes com várias contas](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) antes de implementar a orientação desse padrão. É importante usar a diligência prévia para escolher a estratégia de ramificação mais adequada para a organização.

Este guia fornece um diagrama que ilustra como uma organização poderia implementar a estratégia do Trunk. É recomendável que você revise o [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance oficial para analisar as melhores práticas. Esse padrão inclui tarefas, etapas e restrições recomendadas para cada etapa do DevOps processo.

## Pré-requisitos e limitações
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Pré-requisitos **
+ Git, [instalado](https://git-scm.com/downloads). Ele é usado como ferramenta de repositório para o código-fonte.
+ Draw.io, [instalado](https://github.com/jgraph/drawio-desktop/releases). Esta aplicação é usada para visualizar e editar o diagrama.

## Arquitetura
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arquitetura de destino**

O diagrama apresentado a seguir pode ser usado de forma semelhante a um [Quadro de Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Você alinha as ramificações no eixo vertical com os AWS ambientes no eixo horizontal para determinar quais ações realizar em cada cenário. Os números representam a sequência das atividades no fluxo de trabalho. Neste exemplo, você acompanha o caminho de uma ramificação `feature` até a implantação em um ambiente de produção.

![\[Quadro de Punnett das atividades do Trunk em cada ramificação e ambiente\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/5df23e4d-84fe-4ab3-a54f-96b6406abc57/images/ad549ef4-90ad-47c1-bd01-f21d6ce5511a.png)


Para obter mais informações sobre ambientes e ramificações em uma abordagem de tronco, consulte [Escolhendo uma estratégia de ramificação do Git para](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach) ambientes com várias contas. Contas da AWS DevOps 

**Automação e escala**

A integração contínua e a entrega contínua (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDpipelines) também fornecem governança e barreiras para as equipes de desenvolvimento, impondo consistência, padrões, melhores práticas e níveis mínimos de aceitação para aceitação e implantação de recursos. Para obter mais informações, consulte [Praticando a integração contínua e a entrega contínua em AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS oferece um conjunto de serviços para desenvolvedores projetados para ajudá-lo a criar CI/CD pipelines. Por exemplo, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)é um serviço de entrega contínua totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)compila o código-fonte, executa testes e produz pacotes ready-to-deploy de software. Para obter mais informações, consulte [Ferramentas do desenvolvedor em AWS](https://aws.amazon.com/products/developer-tools/).

## Ferramentas
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS serviços e ferramentas**

AWS fornece um conjunto de serviços para desenvolvedores que você pode usar para implementar esse padrão:
+ O [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html) é um serviço gerenciado e altamente escalável de repositório de artefatos, que facilita o armazenamento e o compartilhamento de pacotes de software para o desenvolvimento de aplicações.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias AWS Lambda , funções ou serviços do Amazon Elastic Container Service (Amazon ECS) no local.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.

**Outras ferramentas**
+ O [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) é uma aplicação voltada para a criação de fluxogramas e diagramas.
+ O [Figma](https://www.figma.com/design-overview/) é uma ferramenta de design on-line voltada para a colaboração. O repositório de código contém modelos no formato .fig para o Figma.

**Repositório de código**

Esse arquivo fonte para o diagrama nesse padrão está disponível no repositório GitHub [Git Branching Strategy for Trunk](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/trunk). Estão incluídos arquivos nos formatos PNG, draw.io e Figma. É possível modificar esses diagramas para adequação aos processos da sua organização.

## Práticas recomendadas
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Siga as melhores práticas e recomendações em [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) Guidance e Choosing a [Git branching](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) strategy para ambientes com várias contas. DevOps Esses recursos auxiliam na implementação eficiente do desenvolvimento baseado em Trunk, incentivam a colaboração, aumentam a qualidade do código e agilizam o processo de desenvolvimento.

## Épicos
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Análise do fluxo de trabalho do Trunk
<a name="reviewing-the-trunk-workflow"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Analise o processo padrão do Trunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) | DevOps engenheiro | 

## Solução de problemas
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Conflitos em ramificações | Um problema comum que pode ocorrer com o modelo do Trunk é quando uma correção urgente precisa ser aplicada em um ambiente de produção, mas é necessário realizar uma alteração correspondente em uma ramificação `feature`, na qual os mesmos recursos estão sendo modificados. Recomendamos que você faça a mesclagem das alterações da ramificação `main` para as ramificações menos avançadas com frequência, a fim de evitar conflitos significativos ao mesclar de volta para a ramificação `main`. | 

## Recursos relacionados
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-resources"></a>

Este guia não inclui treinamento em Git. No entanto, existem muitos recursos de alta qualidade disponíveis na internet, caso você precise realizar esse treinamento. Recomendamos que você comece pelo site de [documentação do Git](https://git-scm.com/doc).

Os recursos apresentados a seguir podem ajudar você na jornada de implementação de ramificações do Trunk na Nuvem AWS.

**AWS DevOps orientação**
+ [AWS DevOps Orientação](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [Arquitetura de referência do pipeline de implantação da AWS](https://pipelines.devops.aws.dev/)
+ [O que DevOps é](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps recursos](https://aws.amazon.com/devops/resources/)

**Orientações sobre o Trunk**
+ [Trunk Based Development](https://trunkbaseddevelopment.com/)

**Outros recursos**
+ [Twelve-factor app methodology](https://12factor.net/) (12factor.net)

# Implemente o escaneamento Checkov personalizado e centralizado para aplicar a política antes de implantar a infraestrutura AWS
<a name="centralized-custom-checkov-scanning"></a>

*Benjamin Morris, Amazon Web Services*

## Resumo
<a name="centralized-custom-checkov-scanning-summary"></a>

Esse padrão fornece uma estrutura de GitHub ações para escrever políticas personalizadas do Checkov em um repositório que pode ser reutilizada em toda a organização. GitHub Ao seguir este padrão, uma equipe de segurança da informação poderá gravar, adicionar e manter políticas personalizadas de acordo com os requisitos da empresa. As políticas personalizadas podem ser inseridas automaticamente em todos os pipelines da GitHub organização. Essa abordagem pode ser usada para aplicar os padrões da empresa aos recursos antes que sejam implantados.

## Pré-requisitos e limitações
<a name="centralized-custom-checkov-scanning-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Uma GitHub organização usando GitHub Ações
+ AWS infraestrutura implantada com HashiCorp Terraform ou AWS CloudFormation

**Limitações**
+ Esse padrão foi escrito para GitHub Ações. No entanto, ele pode ser adaptado a estruturas similares de integração contínua e entrega contínua (CI/CD), como. GitLab Nenhuma versão paga específica do GitHub é necessária.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para a disponibilidade da região, consulte [Pontos de extremidade e cotas de serviço](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) na AWS documentação e escolha o link para o serviço.

## Arquitetura
<a name="centralized-custom-checkov-scanning-architecture"></a>

Esse padrão foi projetado para ser implantado como um GitHub repositório que contém um fluxo de trabalho GitHub reutilizável e políticas personalizadas do Checkov. O fluxo de trabalho reutilizável pode escanear tanto o Terraform quanto os repositórios de CloudFormation infraestrutura como código (IaC).

O diagrama a seguir mostra o repositório de ** GitHub fluxos de trabalho reutilizáveis e o repositório** de **políticas do Custom Checkov** como ícones separados. Contudo, é possível implementar esses repositórios como repositórios separados ou como um único repositório. O código de exemplo usa um único repositório, com arquivos destinados a fluxos de trabalho (`.github/workflows`) e arquivos destinados a políticas personalizadas (pasta `custom_policies` e o arquivo de configuração `.checkov.yml`) no mesmo repositório.

![\[GitHub O Actions usa GitHub fluxo de trabalho reutilizável e políticas personalizadas do Checkov para avaliar o IaC.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/6c0c941f-14f9-4569-92da-9f81ab3e525c/images/a1539ce5-0ee6-4af1-bd01-cafad0f71708.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Um usuário cria uma pull request em um GitHub repositório.

1. Os fluxos de trabalho do pipeline começam em GitHub Ações, incluindo uma referência a um fluxo de trabalho reutilizável do Checkov.

1. O fluxo de trabalho do pipeline baixa o fluxo de trabalho reutilizável Checkov referenciado de um repositório externo e executa esse fluxo de trabalho Checkov usando Ações. GitHub 

1. O fluxo de trabalho reutilizável do Checkov faz o download das políticas personalizadas de um repositório externo.

1. O fluxo de trabalho reutilizável do Checkov avalia o IaC no GitHub repositório em relação às políticas incorporadas e personalizadas do Checkov. O fluxo de trabalho reutilizável do Checkov é aprovado ou reprovado dependendo da presença de problemas de segurança.

**Automação e escala**

Este padrão permite o gerenciamento centralizado da configuração do Checkov, para que as atualizações de políticas possam ser aplicadas em um único local. Entretanto, este padrão exige que cada repositório empregue um fluxo de trabalho que contenha uma referência ao fluxo de trabalho reutilizável central. É possível adicionar essa referência manualmente ou usar scripts para transferir o arquivo para a pasta `.github/workflows` de cada repositório.

## Ferramentas
<a name="centralized-custom-checkov-scanning-tools"></a>

**Serviços da AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los em todo o ciclo de vida em todas Contas da AWS as regiões. Checkov pode escanear CloudFormation.

**Outras ferramentas**
+ A ferramenta [Checkov](https://www.checkov.io/) é destinada à análise estática que verifica IaC para identificação de falhas de segurança e conformidade.
+ GitHub O [Actions](https://github.com/features/actions) é integrado à GitHub plataforma para ajudar você a criar, compartilhar e executar fluxos de trabalho em seus GitHub repositórios. Você pode usar o GitHub Actions para automatizar tarefas como criar, testar e implantar seu código.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de IaC HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local. O Checkov consegue realizar a verificação do Terraform.

**Repositório de código**

O código desse padrão está disponível no GitHub [centralized-custom-checkov-sast](https://github.com/aws-samples/centralized-custom-checkov-sast)repositório.

## Práticas recomendadas
<a name="centralized-custom-checkov-scanning-best-practices"></a>
+ Para garantir uma postura de segurança consistente, alinhe as políticas de segurança da sua empresa às políticas do Checkov.
+ Nas fases iniciais da implementação das políticas personalizadas do Checkov, você pode usar a opção de falha branda na verificação do Checkov para permitir que uma IaC com problemas de segurança seja mesclada. Com o amadurecimento do processo, faça a transição da opção de falha branda para a opção de falha definitiva.

## Épicos
<a name="centralized-custom-checkov-scanning-epics"></a>

### Criação de um repositório central do Checkov para políticas personalizadas
<a name="create-a-central-checkov-repository-for-custom-policies"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório central do Checkov. | Crie um repositório para armazenar as políticas personalizadas do Checkov que serão aplicadas na organização.Para começar rapidamente, você pode copiar o conteúdo do repositório desse padrão em seu GitHub [centralized-custom-checkov-sast ](https://github.com/aws-samples/centralized-custom-checkov-sast)repositório central do Checkov. | DevOps engenheiro | 
| Crie um repositório para fluxos de trabalho reutilizáveis. | Se um repositório para fluxos de trabalho reutilizáveis já existir, ou se você planeja incluir os arquivos de fluxos de trabalho reutilizáveis no mesmo repositório das políticas personalizadas do Checkov, pode pular esta etapa.Crie um GitHub repositório para armazenar fluxos de trabalho reutilizáveis. Os pipelines de outros repositórios farão referência a este repositório. | DevOps engenheiro | 

### Criação de fluxos de trabalho reutilizáveis e de exemplo do Checkov
<a name="create-reusable-and-example-checkov-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione um fluxo de trabalho reutilizável do Checkov. | Crie um fluxo de trabalho Checkov GitHub Actions reutilizável (arquivo YAML) no repositório de fluxos de trabalho reutilizáveis. Você pode adaptar este fluxo de trabalho reutilizável usando o arquivo de fluxo de trabalho fornecido neste padrão.Um exemplo de alteração que você pode desejar fazer é alterar o fluxo de trabalho reutilizável para usar a opção de falha branda. Definir `soft-fail` como `true` permite que o trabalho seja concluído com êxito, mesmo que ocorra uma falha na verificação do Checkov. Para obter instruções, consulte [Hard and soft fail](https://www.checkov.io/2.Basics/Hard%20and%20soft%20fail.html) na documentação do Checkov. | DevOps engenheiro | 
| Adicione um fluxo de trabalho de exemplo. | Adicione um fluxo de trabalho de exemplo do Checkov que faça referência ao fluxo de trabalho `reusable`. Isso fornecerá um modelo de como reutilizar o fluxo de trabalho `reusable`. No repositório de exemplo, `checkov-source.yaml` representa o fluxo de trabalho reutilizável, enquanto `checkov-scan.yaml` é o exemplo que utiliza `checkov-source`.Para obter mais detalhes sobre como gravar um fluxo de trabalho de exemplo do Checkov, consulte [Informações adicionais](#centralized-custom-checkov-scanning-additional). | DevOps engenheiro | 

### Associação das políticas da empresa às políticas personalizadas do Checkov
<a name="associate-company-policies-to-checkov-custom-policies"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Determine as políticas que podem ser aplicadas com o Checkov. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralized-custom-checkov-scanning.html)Para obter mais detalhes sobre como criar políticas personalizadas do Checkov, consulte [Custom Policies Overview](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html) na documentação do Checkov. | Segurança e conformidade | 
| Adicione políticas personalizadas do Checkov. | Converta as políticas da empresa identificadas em políticas personalizadas do Checkov no repositório central. É possível gravar políticas simples do Checkov tanto em Python quanto em YAML. | Segurança | 

### Implementação das políticas personalizadas do Checkov de forma centralizada
<a name="implement-centralized-checkov-custom-policies"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione o fluxo de trabalho reutilizável do Checkov a todos os repositórios. | Nesse momento, você deve ter um fluxo de trabalho de exemplo do Checkov que faça referência ao fluxo de trabalho reutilizável. Copie o fluxo de trabalho de exemplo do Checkov, que referencia o fluxo de trabalho reutilizável, para cada repositório que necessitar dele. | DevOps engenheiro | 
| Crie um mecanismo para garantir que o Checkov seja executado antes das mesclagens. | Para garantir que o fluxo de trabalho do Checkov seja executado para cada pull request, crie uma [verificação de status](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) que exija um fluxo de trabalho Checkov bem-sucedido antes que os pull requests possam ser mesclados. GitHub permite que você exija que fluxos de trabalho específicos sejam executados antes que as pull requests possam ser mescladas. | DevOps engenheiro | 
| Crie um PAT para toda a organização e compartilhe-o como um segredo. | Se sua GitHub organização estiver visível publicamente, você pode pular essa etapa.Esse padrão exige que o fluxo de trabalho do Checkov seja capaz de baixar políticas personalizadas do repositório de políticas personalizadas em sua GitHub organização. É necessário fornecer permissões para que o fluxo de trabalho do Checkov possa acessar esses repositórios.Para fazer isso, [crie um token de acesso pessoal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) (PAT) com permissões de leitura para os repositórios da organização. Compartilhe este PAT com os repositórios, seja como um segredo organizacional (se estiver usando um plano pago) ou como um segredo em cada repositório (se estiver usando a versão gratuita). No código de amostra, o nome padrão para o segredo é `ORG_PAT`. | DevOps engenheiro | 
| (Opcional) Proteja os arquivos do fluxo de trabalho do Checkov contra modificações. | Para proteger os arquivos do fluxo de trabalho do Checkov contra alterações indesejadas, você pode usar um arquivo `CODEOWNERS`. O arquivo `CODEOWNERS` é geralmente implantado na raiz do diretório.Por exemplo, para exigir aprovações do `secEng` grupo da sua GitHub organização quando o `checkov-scan.yaml` arquivo for modificado, acrescente o seguinte ao arquivo do repositório: `CODEOWNERS`<pre>[Checkov]<br />.github/workflows/checkov-scan.yaml @myOrg/secEng</pre>O arquivo `CODEOWNERS` é específico para o repositório em que está localizado. Para proteger o fluxo de trabalho do Checkov usado pelo repositório, é necessário adicionar (ou atualizar) um arquivo `CODEOWNERS` em cada repositório.Para obter mais informações sobre como proteger os arquivos do fluxo de trabalho do Checkov, consulte [Informações adicionais](#centralized-custom-checkov-scanning-additional). Para obter mais informações sobre `CODEOWNERS` arquivos, consulte a documentação oficial do seu CI/CD provedor (como [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)). | DevOps engenheiro | 

## Recursos relacionados
<a name="centralized-custom-checkov-scanning-resources"></a>
+ [Checkov Custom Policies Overview](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html)
+ [CloudFormation Escaneamento de configuração](https://www.checkov.io/7.Scan%20Examples/Cloudformation.html)
+ [GitHub Ações Fluxos de trabalho reutilizáveis](https://docs.github.com/en/actions/using-workflows/reusing-workflows)

## Mais informações
<a name="centralized-custom-checkov-scanning-additional"></a>

**Elaboração de arquivos de fluxo de trabalho do Checkov**

Ao elaborar o arquivo `checkov-scan.yaml`, considere quando deseja que ele seja executado. A chave `on` de nível superior determina quando o fluxo de trabalho será executado. No repositório de exemplo, o fluxo de trabalho será executado quando houver uma solicitação de pull direcionada para a ramificação `main` (e sempre que a ramificação de origem dessa solicitação de pull for modificada). O fluxo de trabalho também pode ser executado sob demanda, devido à chave `workflow_dispatch`.

É possível alterar as condições de acionamento do fluxo de trabalho com base na frequência com que deseja que ele seja executado. Por exemplo, você poderia alterar o fluxo de trabalho para ser executado sempre que o código for enviado a qualquer ramificação, substituindo `pull_request` por `push` e removendo a chave `branches`.

É possível modificar o arquivo de fluxo de trabalho de exemplo que foi criado em um repositório individual. Por exemplo, você poderia ajustar o nome da ramificação de destino de `main` para `production`, caso o repositório seja estruturado em torno de uma ramificação de `production`.

**Proteção de arquivos de fluxo de trabalho do Checkov**

A verificação do Checkov fornece informações úteis sobre potenciais erros de configuração relacionados à segurança. No entanto, alguns desenvolvedores podem considerar a ferramenta como um obstáculo para sua produtividade e tentar remover ou desabilitar o fluxo de trabalho de verificação.

Existem várias formas de resolver esse problema, incluindo uma comunicação mais eficaz sobre o valor a longo prazo da verificação de segurança e uma documentação mais clara sobre como implantar uma infraestrutura segura. Essas são abordagens “leves” importantes de DevSecOps colaboração que podem ser vistas como a solução para a causa raiz desse problema. No entanto, você também pode usar controles técnicos, como um arquivo `CODEOWNERS` e as barreiras de proteção para orientar os desenvolvedores corretamente.

**Padrão de testes em um ambiente de sandbox**

Para testar este padrão em um ambiente de sandbox, siga estas etapas:

1. Crie uma nova GitHub organização. Crie um token com acesso somente para leitura a todos os repositórios da organização. Como esse token é para um ambiente de sandbox, e não para um ambiente pago, não será possível armazená-lo como um segredo global da organização.

1. Crie um repositório`checkov` para armazenar a configuração do Checkov e um repositório `github-workflows` para armazenar a configuração do fluxo de trabalho reutilizável. Preencha os repositórios com o conteúdo fornecido no repositório de exemplo.

1. Crie um repositório de aplicação e copie e cole o fluxo de trabalho `checkov-scan.yaml` na pasta `.github/workflows` desse repositório. Adicione um segredo ao repositório que contenha o PAT que você criou para o acesso somente à leitura da organização. O segredo padrão é `ORG_PAT`.

1. Crie uma pull request que adicione um pouco de Terraform ou CloudFormation código ao repositório do aplicativo. O Checkov deve realizar a verificação e retornar um resultado.

# Implementação de diagnósticos e solução de problemas com base em IA no Kubernetes usando a integração do K8sGPT e do Amazon Bedrock
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale, Muskan e Prafful Gupta, Amazon Web Services*

## Resumo
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

Este padrão demonstra como implementar diagnósticos e solução de problemas com base em IA no Kubernetes, integrando o K8sGPT ao modelo Claude v2, da Anthropic, disponível no Amazon Bedrock. A solução fornece análise em linguagem natural e etapas de correção para problemas em clusters do Kubernetes por meio de uma arquitetura segura de bastion host. Ao combinar a experiência do K8sGpt Kubernetes com os recursos avançados de linguagem do Amazon Bedrock DevOps , as equipes podem identificar e resolver problemas de cluster rapidamente. Graças a essas funcionalidades, é possível reduzir o tempo médio de resolução (MTTR, na sigla em inglês) em até 50%. 

Este padrão nativo da nuvem usa o Amazon Elastic Kubernetes Service (Amazon EKS) para o gerenciamento do Kubernetes. O padrão implementa as melhores práticas de segurança por meio de funções AWS Identity and Access Management (IAM) adequadas e isolamento de rede. Esta solução é especialmente útil para organizações que desejam otimizar as operações no Kubernetes e aprimorar suas funcionalidades de solução de problemas com assistência de IA.

## Pré-requisitos e limitações
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS com as permissões apropriadas
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Um cluster do Amazon EKS
+ Acesso ao modelo Claude 2 da Anthropic no [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Um bastion host com as configurações de grupo de segurança necessárias
+ K8sGPT [instalado](https://docs.k8sgpt.ai/getting-started/installation/)

**Limitações**
+ A análise do K8sGPT é limitada pelo tamanho da janela de contexto do modelo Claude v2.
+ Os limites de taxa da API do Amazon Bedrock são aplicados com base nas cotas da sua conta.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Amazon EKS, [versão 1.31 ou versões posteriores](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Modelo Claude 2](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) no Amazon Bedrock
+ K8sGpt, [v0.4.2 ou versões posteriores](https://github.com/k8sgpt-ai/k8sgpt/releases)

## Arquitetura
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura para diagnósticos com base em IA no Kubernetes, usando o K8sGPT integrado ao Amazon Bedrock na Nuvem AWS.

![\[Fluxo de trabalho para diagnósticos no Kubernetes usando o K8sGPT integrado ao Amazon Bedrock.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


A arquitetura apresenta o seguinte fluxo de trabalho:

1. Os desenvolvedores acessam o ambiente por meio de uma conexão segura com o bastion host. Essa EC2 instância da Amazon serve como ponto de entrada seguro e contém a instalação da interface de linha de comando (CLI) do K8SGpt e as configurações necessárias.

1. O bastion host, configurado com perfis do IAM específicos, estabelece conexões seguras tanto com o cluster do Amazon EKS quanto com os endpoints do Amazon Bedrock. O K8sGPT é instalado e configurado no bastion host para realizar a análise do cluster do Kubernetes.

1. O Amazon EKS gerencia o ambiente de gerenciamento do Kubernetes e os nós de processamento, fornecendo o ambiente de destino para a análise do K8sGPT. O serviço opera em várias zonas de disponibilidade dentro de uma nuvem privada virtual (VPC), o que ajuda a garantir alta disponibilidade e resiliência. O Amazon EKS fornece dados operacionais por meio da API do Kubernetes, permitindo uma análise completa do cluster.

1. O K8sGPT envia os dados de análise para o Amazon Bedrock, que fornece o modelo de base (FM) do Claude v2 para o processamento de linguagem natural. O serviço processa a análise do K8sGPT para gerar explicações legíveis para seres humanos e oferece sugestões detalhadas de correção com base nos problemas identificados. O Amazon Bedrock funciona como um serviço de IA com tecnologia sem servidor, alta disponibilidade e escalabilidade.

**nota**  
Neste fluxo de trabalho, o IAM controla o acesso entre os componentes por meio de perfis e políticas, gerenciando a autenticação das interações entre o bastion host, o Amazon EKS e o Amazon Bedrock. O IAM implementa o princípio de privilégio mínimo e possibilita a comunicação segura entre os serviços em toda a arquitetura.

**Automação e escala**

As operações do K8sGpt podem ser automatizadas e escaladas em vários clusters do Amazon EKS por meio de várias ferramentas. Serviços da AWS Essa solução oferece suporte à integração contínua e à integração de implantação contínua (CI/CD) usando [Jenkins](https://www.jenkins.io/), [GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions) ou [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)para análise programada. O operador do K8sGPT possibilita o monitoramento contínuo dentro do cluster, com funcionalidades automatizadas de detecção e de geração de relatório de problemas. Para implantações em escala empresarial, você pode usar a [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) para agendar escaneamentos e acionar respostas automatizadas com scripts personalizados. AWS A integração do SDK permite o controle programático em uma grande frota de clusters.

## Ferramentas
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**Serviços da AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

**Outras ferramentas**
+ O [K8sGPT](https://k8sgpt.ai/) é uma ferramenta de código aberto com base em IA que transforma o gerenciamento do Kubernetes. Essa ferramenta atua como um especialista virtual em engenharia de confiabilidade de sites (SRE), realizando, de forma automática, verificações, diagnósticos e solução de problemas em clusters do Kubernetes. Os administradores podem interagir com o K8sGPT em linguagem natural e obter insights claros e acionáveis sobre o estado do cluster, as falhas relacionadas ao pod e os problemas do serviço. Os analisadores integrados da ferramenta detectam uma ampla variedade de problemas, desde componentes mal configurados até restrições de recursos, e fornecem explicações e soluções. easy-to-understand

## Práticas recomendadas
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ Implemente controles de acesso seguro usando o AWS Systems Manager Session Manager acesso [ao Bastion Host](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html).
+ Certifique-se de que a autenticação do K8sGPT use perfis do IAM dedicados, com permissões de privilégio mínimo, para as interações com o Amazon Bedrock e com o Amazon EKS. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [nas melhores práticas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.
+ Configure a [marcação de recursos](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html), habilite o CloudWatch [registro na Amazon para trilhas de auditoria](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html) e implemente a [anonimização de dados](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/) para informações confidenciais. 
+ Mantenha backups regulares das configurações do K8sGPT, ao mesmo tempo em que define agendamentos de verificações automatizadas em horários com demanda reduzida para minimizar o impacto operacional.

## Épicos
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### Adição do Amazon Bedrock à lista de provedores de backend de IA
<a name="add-br-to-ai-backend-provider-list"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Defina o Amazon Bedrock como o provedor de backend de IA para o K8sGPT. | Para definir o Amazon Bedrock como o provedor de [back-end de IA r para](https://docs.k8sgpt.ai/reference/providers/backend/) o K8SGpt, use o seguinte comando: AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>O comando de exemplo usa `us-west-2` como a Região da AWS. No entanto, é possível selecionar outra região, desde que tanto o cluster do Amazon EKS quanto o modelo correspondente do Amazon Bedrock estejam disponíveis e habilitados nessa região selecionada.Para verificar se `amazonbedrock` foi adicionado à lista de provedores de backend de IA e está no estado `Active`, execute o seguinte comando:<pre>k8sgpt auth list</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### Verificação de recursos com um filtro
<a name="scan-resources-using-a-filter"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Confira uma lista dos filtros disponíveis. | Para ver a lista de todos os filtros disponíveis, use o seguinte AWS CLI comando:<pre>k8sgpt filters list</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| Realize a verificação de um pod em um namespace específico aplicando um filtro. | Este comando é útil para a depuração de problemas específicos de pods em um cluster do Kubernetes, usando as funcionalidades de IA do Amazon Bedrock para analisar e explicar os problemas encontrados.Para escanear um pod em um namespace específico usando um filtro, use o seguinte comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| Realize a verificação de uma implantação em um namespace específico aplicando um filtro. | Este comando é útil para identificar e solucionar problemas específicos da implantação, especialmente quando o estado atual não corresponde ao estado desejado.Para verificar uma implantação em um namespace específico usando um filtro, use o seguinte comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.</pre> | AWS DevOps | 
| Realize a verificação de um nó em um namespace específico aplicando um filtro. | Para verificar um nó em um namespace específico usando um filtro, use o seguinte comando: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### Análise das saídas detalhadas
<a name="analyze-detailed-outputs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Obtenha saídas detalhadas. |  Para obter resultados detalhados, use o seguinte AWS CLI comando:<pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| Verifique os pods com problemas. | Para verificar se há pods problemáticos específicos, use o seguinte comando: AWS CLI <pre>kubectl get pods --all-namespaces | grep -v Running</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| Obtenha insights específicos da aplicação. | Este comando é particularmente útil quando:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)Para obter insights específicos da aplicação, use o seguinte comando:<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>A seguir, apresentamos um exemplo da saída esperada para este comando:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## Recursos relacionados
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**Blogs da AWS**
+ [Automate Amazon EKS troubleshooting using an Amazon Bedrock agentic workflow](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [Use K8sGPT and Amazon Bedrock for simplified Kubernetes cluster maintenance](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS documentação**
+ AWS CLI [comandos: [create-cluster e describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Começar a usar o Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) (documentação do Amazon EKS)
+ [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentação do IAM)

**Outros recursos**
+ [K8sGPT](https://k8sgpt.ai/)

# Detecte alterações automaticamente e inicie diferentes CodePipeline pipelines para um monorepo em CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha e Ricardo Morais, Amazon Web Services*

## Resumo
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Aviso**: não AWS Cloud9 está mais disponível para novos clientes. Os clientes existentes do AWS Cloud9 podem continuar usando o serviço normalmente. [Saiba mais](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Esse padrão ajuda você a detectar automaticamente alterações no código-fonte de um aplicativo baseado em monorepo AWS CodeCommit e, em seguida, iniciar um pipeline AWS CodePipeline que executa a integração contínua e a entrega contínua (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), o que garante melhor visibilidade, compartilhamento mais fácil do código e melhor colaboração, padronização e capacidade de descoberta.

A solução descrita neste padrão não realiza nenhuma análise de dependência entre os microsserviços presentes no Monorepo. Ele só detecta alterações no código-fonte e inicia o pipeline correspondente CI/CD .

O padrão é usado AWS Cloud9 como ambiente de desenvolvimento integrado (IDE) e AWS Cloud Development Kit (AWS CDK) para definir uma infraestrutura usando duas CloudFormation pilhas: `MonoRepoStack` e. `PipelinesStack` A `MonoRepoStack` pilha cria o monorepo in AWS CodeCommit e a AWS Lambda função que inicia os pipelines. CI/CD A pilha `PipelinesStack` define sua infraestrutura de pipeline.

**Importante**  
O fluxo de trabalho deste padrão é uma prova de conceito (PoC, na sigla em inglês). Recomendamos que você o utilize somente em um ambiente de teste. Se você quiser usar a abordagem desse padrão em um ambiente de produção, consulte [as melhores práticas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação AWS Identity and Access Management (IAM) e faça as alterações necessárias em suas funções do IAM Serviços da AWS e. 

## Pré-requisitos e limitações
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Pré-requisitos **
+ Uma AWS conta ativa.
+ AWS Command Line Interface (AWS CLI), instalado e configurado. Para obter mais informações, consulte [Instalação, atualização e desinstalação do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) na AWS CLI documentação.  
+ Python 3 e `pip`, instalado na sua máquina local. Para obter mais informações, consulte a [Documentação do Python](https://www.python.org/). 
+ O AWS CDK instalado e configurado. Para obter mais informações, consulte [Introdução ao AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) na AWS CDK documentação. 
+ Um AWS Cloud9 IDE, instalado e configurado. Para obter mais informações, consulte [Configuração AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) na AWS Cloud9 documentação. 
+ O GitHub [AWS CodeCommit monorepo multi-pipeline aciona](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) o repositório, clonado em sua máquina local. 
+ Um diretório existente contendo o código do aplicativo com o qual você deseja criar e implantar CodePipeline.
+ Familiaridade e experiência com as DevOps melhores práticas no Nuvem AWS. Para aumentar sua familiaridade com DevOps, você pode usar o padrão [Crie uma arquitetura fracamente acoplada com microsserviços usando DevOps práticas e AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) no site de orientação prescritiva. AWS  

## Arquitetura
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

O diagrama a seguir mostra como usar o AWS CDK para definir uma infraestrutura com duas AWS CloudFormation pilhas: `MonoRepoStack` e. `PipelinesStack`

![\[Fluxo de trabalho para usar o AWS CDK para definir uma infraestrutura com duas CloudFormation pilhas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O processo de bootstrap usa o AWS CDK para criar as AWS CloudFormation pilhas e. `MonoRepoStack` `PipelinesStack`

1. A `MonoRepoStack` pilha cria o CodeCommit repositório para seu aplicativo e a função `monorepo-event-handler` Lambda que é iniciada após cada confirmação.

1. A `PipelinesStack` pilha cria os pipelines CodePipeline que são iniciados pela função Lambda. Cada microsserviço deve ter um pipeline de infraestrutura definido.

1. O pipeline para `microservice-n` é iniciado pela função Lambda e inicia seus CI/CD estágios isolados baseados no código-fonte em. CodeCommit

1. O pipeline para `microservice-1` é iniciado pela função Lambda e inicia seus CI/CD estágios isolados baseados no código-fonte em. CodeCommit

O diagrama a seguir mostra a implantação das AWS CloudFormation pilhas `MonoRepoStack` e `PipelinesStack` em uma conta.

![\[Implantação das CloudFormation pilhas MonoRepoStack e PipelinesStack em uma conta da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Um usuário altera o código em um dos microsserviços do aplicativo.

1. O usuário envia as alterações de um repositório local para um CodeCommit repositório.

1. A atividade push inicia a função Lambda que recebe todos os push no repositório. CodeCommit 

1. A função do Lambda realiza a leitura de um parâmetro no Parameter Store, uma funcionalidade do AWS Systems Manager, para recuperar o ID da confirmação mais recente. O parâmetro tem o formato de nomenclatura:`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Se o parâmetro não for encontrado, a função Lambda lê o último ID de confirmação do CodeCommit repositório e salva o valor retornado no Parameter Store.

1. Depois de identificar o ID do commit e os arquivos alterados, a função Lambda identifica os pipelines para cada diretório de microsserviços e inicia o pipeline necessário. CodePipeline 

## Ferramentas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio dela. CloudFormation
+ O [Python](https://www.python.org/) é uma linguagem de programação que facilita o trabalho ágil e a integração eficiente de sistemas.

**Código **

O código-fonte e os modelos desse padrão estão disponíveis no repositório de gatilhos [multipipeline GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Práticas recomendadas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Esta arquitetura de amostra não inclui uma solução de monitoramento para a infraestrutura implantada. Se você deseja implantar esta solução em um ambiente de produção, recomendamos que habilite o monitoramento. Para obter mais informações, consulte [Monitore seus aplicativos sem servidor com o CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) na documentação AWS Serverless Application Model (AWS SAM).
+ Ao editar o código de amostra fornecido por esse padrão, siga as [melhores práticas para desenvolver e implantar a infraestrutura de nuvem](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) na AWS CDK documentação.
+ Ao definir seus pipelines de microsserviços, revise as [melhores práticas de segurança](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) na AWS CodePipeline documentação.
+ Você também pode verificar as melhores práticas em seu AWS CDK código usando o utilitário [cdk-nag](https://github.com/cdklabs/cdk-nag). Essa ferramenta usa um conjunto de regras, agrupadas em pacotes, para avaliar seu código. Os pacotes disponíveis são:
  + [AWS Biblioteca de soluções](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Health Insurance Portability and Accountability Act (HIPAA) security](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [National Institute of Standards and Technology (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Payment Card Industry Data Security Standard (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Épicos
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configurar o ambiente
<a name="set-up-the-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um ambiente virtual Python. | Em seu AWS Cloud9 IDE, crie um ambiente virtual em Python e instale as dependências necessárias executando o seguinte comando:`make install` | Desenvolvedor | 
| Inicialize o Conta da AWS e Região da AWS para o. AWS CDK | Inicialize o necessário Conta da AWS e a região executando o seguinte comando:`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Desenvolvedor | 

### Adicione um novo pipeline para um microsserviço
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Adicione seu código de amostra ao diretório do aplicativo. | Adicione o diretório que contém o código do aplicativo de amostra ao `monorepo-sample` diretório no repositório clonado de gatilhos de [vários GitHub AWS CodeCommit pipelines monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger). | Desenvolvedor | 
| Edite o arquivo `monorepo-main.json`. | Adicione o nome do diretório do código da sua aplicação e o nome do pipeline ao arquivo `monorepo-main.json` no repositório clonado. | Desenvolvedor | 
| Criar o pipeline. | No diretório `Pipelines` do repositório, adicione a `class` do pipeline para sua aplicação. O diretório contém dois arquivos de amostra, nomeadamente `pipeline_hotsite.py` e `pipeline_demo.py`. Cada arquivo conta com três estágios: origem, desenvolvimento e implantação.Você pode copiar um dos arquivos e alterá-lo de acordo com os requisitos do seu aplicativo.  | Desenvolvedor | 
| Edite o arquivo `monorepo_config.py`. | Em `service_map`, adicione o nome do diretório do seu aplicativo e a classe que você criou para o pipeline.Por exemplo, o código a seguir mostra uma definição de pipeline no diretório `Pipelines` que usa um arquivo nomeado `pipeline_mysample.py` com uma classe `MySamplePipeline`:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Desenvolvedor | 

### Implante a MonoRepoStack pilha
<a name="deploy-the-monorepostack-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a AWS CloudFormation pilha. | Implante a AWS CloudFormation `MonoRepoStack` pilha com valores de parâmetros padrão no diretório raiz do repositório clonado executando o comando. `make deploy-core`Você pode alterar o nome do repositório executando o comando `make deploy-core monorepo-name=<repo_name>`.Você pode implantar simultaneamente ambos os pipelines usando o comando `make deploy monorepo-name=<repo_name>`. | Desenvolvedor | 
| Valide o CodeCommit repositório. | Valide se seus recursos foram criados executando o comando `aws codecommit get-repository --repository-name <repo_name>`. Como a CloudFormation pilha cria o CodeCommit repositório em que o monorepo é armazenado, não execute o `cdk destroy MonoRepoStack ` comando se você tiver começado a fazer modificações nele. | Desenvolvedor | 
| Valide os resultados da CloudFormation pilha. | Valide se a CloudFormation `MonoRepoStack` pilha foi criada e configurada corretamente executando o seguinte comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Desenvolvedor | 

### Implante a PipelinesStack pilha
<a name="deploy-the-pipelinesstack-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a CloudFormation pilha. | A AWS CloudFormation `PipelinesStack` pilha deve ser implantada após a implantação da `MonoRepoStack` pilha. A pilha aumenta de tamanho quando novos microsserviços são adicionados à base de código do monorepo e é reimplantada quando um novo microsserviço é integrado.Implante a PipelinesStack pilha executando o `make deploy-pipelines` comando.Você também pode implantar ambos os pipelines simultaneamente executando o comando `make deploy monorepo-name=<repo_name>`.O exemplo de saída a seguir mostra como a `PipelinesStacks` implantação imprime URLs os microsserviços no final da implementação:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Desenvolvedor | 
| Valide os resultados da AWS CloudFormation pilha. | Valide se a AWS CloudFormation `PipelinesStacks` pilha foi criada e configurada corretamente executando o seguinte comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Desenvolvedor | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua suas AWS CloudFormation pilhas. | Execute o comando `make destroy`. | Desenvolvedor | 
| Exclua os buckets do S3 dos pipelines. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Desenvolvedor | 

## Solução de problemas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Eu encontrei AWS CDK problemas. | Consulte [Solução de AWS CDK problemas comuns](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) na documentação do AWS CDK. | 
| Eu enviei o código do meu microsserviço, mas o pipeline do microsserviço não foi executado. | **Validação da configuração***Verifique a configuração da ramificação:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Valide os arquivos de configuração:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Solução de problemas no console***AWS CodePipeline verificações:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda solução de problemas:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Preciso implantar novamente todos os meus microsserviços.  | Existem duas abordagens para aplicar a reimplantação de todos os microsserviços. Escolha a opção que melhor se adequa às suas necessidades.**Abordagem 1: excluir um parâmetro no Parameter Store**Este método envolve excluir um parâmetro específico no Systems Manager Parameter Store, que rastreia o último ID de confirmação utilizado para a implantação. Ao remover esse parâmetro, o sistema será forçado a reimplantar todos os microsserviços no próximo acionamento, pois o considera um novo estado.Etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Prós:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Abordagem 2: enviar uma confirmação em cada subpasta do Monorepo**Este método envolve fazer uma alteração pequena e enviá-la em cada subpasta de microsserviço no Monorepo para iniciar os pipelines individuais.Etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Prós:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Recursos relacionados
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integração e entrega contínuas (CI/CD) usando CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentação)AWS CDK 
+ [módulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (referência de API)AWS CDK 

# Integre um repositório Bitbucket com o AWS Amplify usando a AWS CloudFormation
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation"></a>

*Alwin Abraham, Amazon Web Services*

## Resumo
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-summary"></a>

O AWS Amplify ajuda você a implantar e testar rapidamente sites estáticos sem precisar configurar a infraestrutura que normalmente é necessária. Você pode implantar a abordagem desse padrão se sua organização quiser usar o Bitbucket para controle de origem, seja para migrar o código do aplicativo existente ou para criar um novo aplicativo. Ao usar CloudFormation a AWS para configurar automaticamente o Amplify, você fornece visibilidade das configurações que você usa.

Esse padrão descreve como criar um pipeline e um ambiente de implantação de integração contínua e implantação contínuas (CI/CD) de front-end usando a AWS CloudFormation para integrar um repositório do Bitbucket ao AWS Amplify. A abordagem do padrão significa que você pode criar um pipeline de frontend do Amplify para implantações repetíveis.

## Pré-requisitos e limitações
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-prereqs"></a>

**Pré-requisitos**** **
+ Uma conta ativa da Amazon Web Services (AWS)
+ Uma conta ativa do Bitbucket com acesso de administrador
+ Acesso a um terminal que usa [cURL](https://curl.se/) ou o aplicativo [Postman](https://www.postman.com/)
+ Familiaridade com o Amplify
+ Familiaridade com a AWS CloudFormation
+ Familiaridade com arquivos formatados em YAML

## Arquitetura
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-architecture"></a>

![\[Diagram showing user interaction with Bitbucket repository connected to AWS Amplify in Nuvem AWS region.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/images/25d73a9d-d2ae-40bc-9ebc-57f9bd13884a.png)


**Pilha de tecnologia**
+ Amplify
+ AWS CloudFormation
+ Bitbucket

## Ferramentas
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-tools"></a>
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/): o Amplify ajuda os desenvolvedores a desenvolverem e implantarem aplicativos móveis e web baseados na nuvem.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — CloudFormation A AWS é um serviço que ajuda você a modelar e configurar seus recursos da AWS para que você possa passar menos tempo gerenciando esses recursos e mais tempo se concentrando em seus aplicativos que são executados na AWS.
+ [Bitbucket](https://bitbucket.org/): o Bitbucket é uma solução de gerenciamento de repositórios Git projetada para equipes profissionais. Ele oferece um local central para gerenciar repositórios Git, colaborar em seu código-fonte e guiá-lo pelo fluxo de desenvolvimento.

 

**Código **

O `bitbucket-amplify.yml` arquivo (anexado) contém o CloudFormation modelo da AWS para esse padrão.

## Épicos
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-epics"></a>

### Configurar o repositório Bitbucket
<a name="configure-the-bitbucket-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| (Opcional) Criar um repositório do Bitbucket.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Você também pode usar um repositório do Bitbucket já existente. | DevOps engenheiro | 
| Abra as configurações do espaço de trabalho. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps engenheiro | 
| Crie um OAuth consumidor. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps engenheiro | 
| Obtenha o token de OAuth acesso.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)`curl -X POST -u "KEY:SECRET" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials `Substitua `KEY` e `SECRET` pelos valores de chave e de segredo que você anotou anteriormente. 2. Grave o token de acesso sem usar as aspas. O token só é válido por um tempo limitado e o tempo padrão é de duas horas. Você deve executar o CloudFormation modelo da AWS nesse período. | DevOps engenheiro | 

### Crie e implante o AWS CloudFormation stack
<a name="create-and-deploy-the-aws-cloudformation-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Baixe o CloudFormation modelo da AWS. | Baixe o CloudFormation modelo `bitbucket-amplify.yml` da AWS (em anexo). Esse modelo cria o CI/CD pipeline no Amplify, além do projeto e da ramificação do Amplify. |  | 
| Crie e implante o AWS CloudFormation stack. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)5. Escolha **Próximo** e, em seguida, **Criar pilha**. | DevOps engenheiro | 

### Teste o CI/CD pipeline
<a name="test-the-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar o código na ramificação do seu repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Para obter mais informações, consulte [Comandos básicos do Git](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html) na documentação do Bitbucket.  | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-resources"></a>

[Métodos de autenticação](https://developer.atlassian.com/bitbucket/api/2/reference/meta/authentication) (documentação da Atlassian)

## Anexos
<a name="attachments-24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/attachments/attachment.zip)

# Lance um CodeBuild projeto em várias contas da AWS usando Step Functions e uma função de proxy Lambda
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function"></a>

*Richard Milner-Watts e Amit Anjarlekar, Amazon Web Services*

## Resumo
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-summary"></a>

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](https://service-catalog-tools-workshop.com/tools.html) 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](https://aws.amazon.com/blogs/database/schedule-jobs-in-amazon-rds-for-postgresql-using-aws-codebuild-and-amazon-eventbridge/).

## Pré-requisitos e limitações
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-prereqs"></a>

**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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html) entre contas.

## Arquitetura
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-architecture"></a>

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\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/857ba3ae-eb9a-4d6b-b73e-e596f41c8cb8.png)


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 definidos.

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

1. 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.

Na imagem a seguir, é apresentada a lógica da máquina de estado.

![\[Fluxo de trabalho da máquina de estado do Step Functions\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/4729bbfc-79ad-455d-a85a-b96cce00f432.png)


**Pilha de tecnologia**
+ AWS CloudFormation
+ CodeBuild
+ IAM
+ Lambda
+ Step Functions
+ X-Ray

## Ferramentas
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-tools"></a>
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html) fornece um editor JSON e YAML integrado que ajuda você a visualizar e editar CloudFormation modelos.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) é 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](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 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](https://github.com/aws-samples/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)](https://docs.powertools.aws.dev/lambda/python/latest/).

## Práticas recomendadas
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-best-practices"></a>

1. Ajuste os valores de tempo de espera na máquina de estado do Step Functions para reduzir ao mínimo as solicitações de buscas para o status do trabalho. Use o tempo de execução esperado para o CodeBuild projeto.

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

1. Caso necessário, revise o código de amostra para assegurar sua adequação ao ambiente de produção. Considere quais dados podem ser registrados pela solução e se a CloudWatch criptografia padrão da Amazon é suficiente.

## Épicos
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-epics"></a>

### Crie a função de proxy Lambda e o perfil do IAM associada na conta de origem
<a name="create-the-lambda-proxy-function-and-associated-iam-role-in-the-source-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Registre a conta da AWS IDs. | A conta IDs da AWS é necessária 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) na documentação do IAM. | AWS DevOps | 
| Baixe os CloudFormation modelos da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Crie uma função do IAM na conta de destino e lance um CodeBuild projeto de amostra
<a name="create-an-iam-role-in-the-target-account-and-launch-a-sample-codebuild-project"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie e implante a CloudFormation pilha da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Verifique a criação do CodeBuild projeto de amostra.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Teste a função de proxy do Lambda entre contas do Lambda
<a name="test-the-cross-account-lambda-proxy-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicie a máquina de estado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Valide as variáveis de ambiente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

## Solução de problemas
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-troubleshooting"></a>


| Problema | Soluçã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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | 

# Gerenciamento do failover multi-AZ para clusters do EMR usando o Controlador de Recuperação de Aplicações
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra e Nidhi Sharma, Amazon Web Services*

## Resumo
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Este padrão oferece uma estratégia eficiente de recuperação de desastres para workloads do Amazon EMR, ajudando a garantir alta disponibilidade e consistência de dados em diversas zonas de disponibilidade dentro de uma única Região da AWS. O projeto emprega o [Controlador de Recuperação de Aplicações da Amazon](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) e um [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) para gerenciar operações de failover e de distribuição de tráfego em um cluster do EMR baseado em Apache Spark. 

Sob condições padrão, a zona de disponibilidade principal hospeda um cluster EMR ativo e um aplicativo com funcionalidade completa read/write . Se uma zona de disponibilidade falhar inesperadamente, o tráfego é automaticamente redirecionado para a zona de disponibilidade secundária, na qual um novo cluster do EMR é iniciado. Ambas as zonas de disponibilidade acessam um bucket compartilhado do Amazon Simple Storage Service (Amazon S3) por meio de [endpoints de gateway dedicados](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html), garantindo um gerenciamento consistente dos dados. Essa abordagem minimiza o tempo de inatividade e possibilita uma recuperação rápida para workloads críticas de big data durante falhas em zonas de disponibilidade. A solução é útil em setores como finanças ou comércio varejista, em que analytics em tempo real são essenciais.

## Pré-requisitos e limitações
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Pré-requisitos **
+ Uma [Conta da AWS](https://aws.amazon.com/resources/create-account/) ativa
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) na Amazon Elastic Compute Cloud (Amazon) EC2
+ Acesso do nó principal do cluster do EMR ao Amazon S3
+ AWS Infraestrutura Multi-AZ

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ [Amazon EMR 6.x ou versões mais recentes](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Arquitetura
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Pilha de tecnologias de destino**
+ Cluster do Amazon EMR
+ Amazon Application Recovery Controller
+ Application Load Balancer
+ Bucket do Amazon S3.
+ Endpoints de gateway para o Amazon S3

**Arquitetura de destino**

![\[Arquitetura para um mecanismo de recuperação automatizado com o Controlador de Recuperação de Aplicações.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Esta arquitetura fornece resiliência para aplicações ao usar diversas zonas de disponibilidade e implementar um mecanismo de recuperação automatizado por meio do Controlador de Recuperação de Aplicações.

1. O Application Load Balancer encaminha o tráfego para o ambiente do Amazon EMR ativo, que normalmente é o cluster do EMR primário na zona de disponibilidade primária.

1. O cluster do EMR ativo processa as solicitações da aplicação e estabelece conexão com o Amazon S3 por meio do endpoint do gateway dedicado do Amazon S3 para operações de leitura e gravação.

1. O Amazon S3 funciona como um repositório central de dados e pode ser usado como ponto de verificação ou como armazenamento compartilhado entre clusters do EMR. Os clusters do EMR mantêm a consistência de dados quando gravam diretamente no Amazon S3 por meio do protocolo `s3://` e do [EMR File System (EMRFS)](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html). 

1. O Controlador de Recuperação de Aplicações monitora continuamente a integridade da zona de disponibilidade primária e gerencia automaticamente as operações de failover, quando necessário.

1. Se o Controlador de Recuperação de Aplicações detectar uma falha no cluster do EMR primário, ele executará as seguintes ações:
   + Iniciar o processo de failover para o cluster do EMR secundário, localizado na zona de disponibilidade 2.
   + Atualizar as configurações de roteamento para direcionar o tráfego ao cluster secundário.

## Ferramentas
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Serviços da AWS**
+ [O Amazon Application Recovery Controller****](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) ajuda você a gerenciar e coordenar a recuperação de seus aplicativos em todas Regiões da AWS as zonas de disponibilidade. Este serviço simplifica o processo e aumenta a confiabilidade da recuperação das aplicações ao reduzir as etapas manuais exigidas por ferramentas e processos tradicionais.
+ O [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) opera na camada de aplicação, que corresponde à sétima camada do modelo Open Systems Interconnection (OSI). Ele distribui o tráfego de entrada do aplicativo em vários destinos, como EC2 instâncias, em várias zonas de disponibilidade. Isso aumenta a disponibilidade do seu aplicativo.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) é uma plataforma de big data que fornece processamento de dados, análise interativa e machine learning para estruturas de código aberto, como Apache Spark, Apache Hive e Presto.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) fornece uma interface de serviço web simples que você pode usar para armazenar e recuperar qualquer volume de dados, a qualquer momento e de qualquer lugar. Com este serviço, é possível desenvolver, com facilidade, aplicações que aproveitem o armazenamento nativo da nuvem.
+ [Os endpoints de gateway para o Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) S3 são gateways que você especifica em sua tabela de rotas para acessar o Amazon S3 a partir da sua nuvem privada virtual (VPC) pela rede. AWS 

## Práticas recomendadas
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Siga as [AWS best practices for security, identity, and compliance](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all), a fim de garantir uma arquitetura robusta e segura.
+ Alinhe a arquitetura com o [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/).
+ Use a Concessão de Acesso do Amazon S3 para gerenciar o acesso do seu cluster do EMR baseado em Spark ao Amazon S3. Para obter detalhes, consulte a publicação do blog [Use Amazon EMR with S3 Access Grants to Scale Spark access to Amazon S3](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/).
+ [Melhore o desempenho do Spark com o Amazon](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html) S3.

## Épicos
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça login no Console de gerenciamento da AWS. | Faça login no [Console de gerenciamento da AWS](https://console.aws.amazon.com/) como um usuário do IAM. Para obter instruções, consulte a [documentação do AWS](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Configure AWS CLI o. **** | Instale o AWS CLI ou atualize-o para a versão mais recente para que você possa interagir com Serviços da AWS Console de gerenciamento da AWS o. Para obter instruções, consulte a [documentação do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Implantação de uma aplicação do Spark em seu cluster do EMR
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um bucket do S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Crie um cluster do EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Defina as configurações de segurança para o cluster do EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Conecte-se ao cluster do EMR. | Estabeleça conexão com o nó principal do cluster do EMR por meio de SSH utilizando o par de chaves fornecido.Certifique-se de que o arquivo do par de chaves esteja no mesmo diretório da sua aplicação.Execute os seguintes comandos para definir as permissões corretas para o par de chaves e estabelecer a conexão SSH:<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Implante a aplicação do Spark. | Após estabelecer a conexão SSH, você estará no console do Hadoop.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Monitore a aplicação do Spark. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### Redirecionamento do tráfego para outra zona de disponibilidade
<a name="shift-traffic-to-another-availability-zone"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um Application Load Balancer. | Configure o grupo de destino que roteia o tráfego entre os nós principais do Amazon EMR implantados em duas zonas de disponibilidade dentro de uma Região da AWS.Para obter instruções, consulte [Create a target group for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) na documentação do Elastic Load Balancing. | AWS DevOps | 
| Configure a mudança de zona no Controlador de Recuperação de Aplicações. | Nesta etapa, você usará o [recurso de mudança de zona](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) no Controlador de Recuperação de Aplicações para redirecionar o tráfego para outra zona de disponibilidade.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)Para usar o AWS CLI, consulte [Exemplos de uso do AWS CLI com mudança zonal](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) na documentação do Application Recovery Controller. | AWS DevOps | 
| Verifique a configuração e o progresso da mudança de zona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## Recursos relacionados
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI comandos:
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Configuring Amazon EMR cluster instance types and best practices for Spot instances](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) (documentação do Amazon EMR)
+ [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentação do IAM)
+ [Usar perfis de instância](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (documentação do IAM)
+ [Use zonal shift and zonal autoshift to recovery applications in ARC](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) (documentação do Controlador de Recuperação de Aplicações)

# Gerencie blue/green implantações de microsserviços em várias contas e regiões usando os serviços de código da AWS e as chaves multirregionais do AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu e Anand Krishna Varanasi, Amazon Web Services*

## Resumo
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Esse padrão descreve como implantar um aplicativo global de microsserviços de uma conta central da AWS para várias contas de carga de trabalho e regiões de acordo com uma estratégia de blue/green implantação. O padrão suporta o seguinte:
+ O software é desenvolvido em uma conta central, enquanto as workloads e os aplicativos estão espalhados por várias contas e regiões da AWS.
+ Uma única chave multirregional do AWS Key Management System (AWS KMS) é usada para criptografia e descriptografia para abranger a recuperação de desastres.
+ A chave KMS é específica da região e precisa ser mantida ou criada em três regiões diferentes para artefatos do pipeline. Uma chave multirregional do KMS ajuda a manter a mesma ID de chave em todas as regiões.
+ O modelo de ramificação do fluxo de trabalho do Git é implementado com duas ramificações (desenvolvimento e principal) e o código é mesclado usando pull requests (). PRs A função do AWS Lambda que é implantada a partir dessa pilha cria um PR da ramificação de desenvolvimento para a ramificação principal. A fusão de relações públicas com a filial principal inicia um CodePipeline pipeline da AWS, que orquestra o fluxo de integração contínua e entrega contínua (CI/CD) e implanta as pilhas em todas as contas.

Esse padrão fornece um exemplo de configuração de infraestrutura como código (IaC) por meio de CloudFormation pilhas da AWS para demonstrar esse caso de uso. A blue/green implantação de microsserviços é implementada usando a AWS CodeDeploy.

## Pré-requisitos e limitações
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Pré-requisitos **
+ Quatro contas ativas da AWS:
  + Uma conta de ferramentas para gerenciar o pipeline de código e manter o CodeCommit repositório da AWS.
  + Três contas de workload (teste) para implantar a workload de microsserviços.
+ Esse padrão usa as seguintes regiões. Se quiser usar outras regiões, você deve fazer as modificações apropriadas nas pilhas multirregionais da AWS CodeDeploy e do AWS KMS.
  + Conta de ferramentas (AWS CodeCommit): `ap-south-1`
  + Conta de workload (teste) 1: `ap-south-1`
  + Conta de workload (teste) 2: `eu-central-1`
  + Conta de workload (teste) 3: `us-east-1`
+ Três buckets do Amazon Simple Storage Service (Amazon S3) para as regiões de implantação em cada conta de workload. (Eles são chamados `S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` e `S3BUCKETNAMETESTACCOUNT3 ` posteriormente, nesse padrão.)

  Por exemplo, você pode criar esses buckets em contas e regiões específicas com nomes de bucket exclusivos da seguinte forma (substitua *xxxx* por um número aleatório):

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Limitações**

O padrão usa a AWS CodeBuild e outros arquivos de configuração para implantar um microsserviço de amostra. Se você tiver um tipo de workload diferente (por exemplo, tecnologia sem servidor), deverá atualizar todas as configurações relevantes.

## Arquitetura
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Arquitetura de destino**

![\[Arquitetura de destino para implantação de microsserviços em várias contas e regiões\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automação e escala**

A configuração é automatizada usando modelos de CloudFormation pilha da AWS (IaC). Ele pode ser facilmente escalado para vários ambientes e contas.

## Ferramentas
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Serviços da AWS**
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é 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.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+ A [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias locais, funções do AWS Lambda ou serviços Amazon Elastic Container Service (Amazon ECS).
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ O [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Ferramentas adicionais**
+ [O Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto que funciona com o repositório da AWS. CodeCommit 
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres. Esse padrão usa o Docker para compilar e testar imagens de contêiner localmente.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) e [cfn-nag](https://github.com/stelligent/cfn_nag) são ferramentas de código aberto que ajudam você a analisar as CloudFormation pilhas em busca de erros e problemas de segurança.

**Repositório de código**

O código desse padrão está disponível no repositório de [ Blue/Green implantações GitHub globais em várias regiões e contas](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Épicos
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Definição de variáveis de ambiente
<a name="set-up-environment-variables"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exporte variáveis de ambiente para implantação CloudFormation de pilha. | Defina as variáveis de ambiente que serão usadas como entrada para as CloudFormation pilhas posteriormente nesse padrão.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package e implemente as CloudFormation pilhas para a infraestrutura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Clone o [repositório de amostra](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) em um novo repositório em seu local de trabalho:<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Empacote os recursos do Cloudformation. | Nesta etapa, você empacota os artefatos locais aos quais os CloudFormation modelos fazem referência para criar os recursos de infraestrutura necessários para serviços como Amazon Virtual Private Cloud (Amazon VPC) e Application Load Balancer.Os modelos estão disponíveis na pasta `Infra` do repositório de código.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Valide os modelos de pacote. | Valide os modelos de pacote:<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Implante os arquivos do pacote nas contas de workload, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Envie uma imagem de amostra e escale o Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envia uma imagem de amostra para o repositório do Amazon ECR. | Envia uma imagem de amostra (NGINX) para o repositório do Amazon Elastic Container Registry (Amazon ECR) chamado `web` (conforme definido nos parâmetros). Você pode personalizar a imagem conforme necessário.Para fazer login e definir as credenciais para enviar uma imagem para o Amazon ECR, siga as instruções na [documentação do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html).Os comandos são:<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Escale o Amazon ECS e verifique o acesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configurar serviços e recursos de código
<a name="set-up-code-services-and-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um CodeCommit repositório na conta de ferramentas. | Crie um CodeCommit repositório na conta de ferramentas usando o `codecommit.yaml` modelo, que está na `code` pasta do GitHub repositório. Você deve criar este repositório somente na única região em que planeja desenvolver o código.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Crie um bucket do S3 para gerenciar artefatos gerados pelo. CodePipeline | Crie um bucket do S3 para gerenciar artefatos gerados CodePipeline usando o `pre-reqs-bucket.yaml` modelo, que está na `code` pasta do GitHub repositório. As pilhas devem ser implantadas em todas as três contas e regiões de workload (teste) e ferramentas.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configure uma chave KMS multirregional. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configure o CodeBuild projeto na conta de ferramentas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configure CodeDeploy em contas de carga de trabalho. | Use o `codedeploy.yaml` modelo na `code` pasta do GitHub repositório para configurar CodeDeploy em todas as três contas de carga de trabalho. A saída de `mainInfraStack` inclui os Amazon Resource Names (ARNs) do cluster Amazon ECS e o ouvinte do Application Load Balancer.Os valores das pilhas de infraestrutura já foram exportados e, portanto, são importados pelos modelos de CodeDeploy pilha.<pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configurar CodePipeline na conta de ferramentas
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um pipeline de código na conta de ferramentas. | Na conta de ferramentas, execute o comando:<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Forneça acesso CodePipeline e CodeBuild funções na política de chaves do AWS KMS e na política de bucket do S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Ligue e teste o pipeline
<a name="call-and-test-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envie as alterações para o CodeCommit repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe todos os recursos implantados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Solução de problemas
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| As alterações que você confirmou no repositório não estão sendo implantadas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Recursos relacionados
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Enviando uma imagem do Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentação do Amazon ECR)
+ [Conecte-se a um CodeCommit repositório da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentação da AWS)
+ [Solução de problemas da](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) AWS CodeBuild ( CodeBuild documentação da AWS)

# Monitore os repositórios do Amazon ECR para obter permissões curinga usando o AWS e o AWS Config CloudFormation
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar, Wassim Benhallam e Sajid Momin, Amazon Web Services*

## Resumo
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

O, Amazon Web Services (AWS) Nuvem, Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado pelo registro de imagens de contêiner compatível com repositórios privados com permissões baseadas em recursos usando o AWS Identity and Access Management (IAM).

O IAM aceita o caractere “`*`” como coringa tanto nos atributos de recurso quanto nos atributos de ação, o que facilita a seleção automática de diversos itens correspondentes. Em seu ambiente de teste, você pode permitir que todos os usuários autenticados da AWS acessem um repositório Amazon ECR usando a [permissão curinga](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html) `ecr:*` em um elemento principal da [declaração de política do seu repositório](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html). A permissão curinga `ecr:*` pode ser útil ao desenvolver e testar em contas de desenvolvimento que não conseguem acessar seus dados de produção.

No entanto, você deve garantir que a permissão curinga `ecr:*` não seja usada em seus ambientes de produção, pois ela pode causar sérias vulnerabilidades de segurança. A abordagem desse padrão ajuda você a identificar repositórios do Amazon ECR que contêm a permissão curinga `ecr:*` nas declarações de política do repositório.   O padrão fornece etapas e um CloudFormation modelo da AWS para criar uma regra personalizada no AWS Config. Em seguida, uma função do AWS Lambda monitora suas declarações de política do repositório Amazon ECR em busca de permissões curinga `ecr:*`. Se encontrar declarações de política de repositório não compatíveis, o Lambda notifica o AWS Config para enviar um evento para a Amazon EventBridge e, em seguida, inicia um tópico do EventBridge Amazon Simple Notification Service (Amazon SNS). O tópico do SNS notifica você por e-mail sobre as declarações de política de repositório não compatíveis.

## Pré-requisitos e limitações
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ AWS Command Line Interface (AWS CLI), instalada e configurada. Para obter mais informações, consulte [Instalação, atualização e desinstalação da AWS CLI ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)na documentação da AWS CLI.
+ Um repositório Amazon ECR existente com uma declaração de política anexada, instalado e configurado em seu ambiente de teste. Para obter mais informações sobre isso, consulte [Criação de um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) e [Definição de uma declaração de política de repositório na documentação](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) do Amazon ECR.
+ AWS Config, configurado em sua região preferida da AWS. Para obter mais informações sobre isso, consulte [Conceitos básicos do AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) na documentação do AWS Config.
+ O arquivo `aws-config-cloudformation.template` (anexado), baixado na sua máquina local.

 

**Limitações**
+ A solução desse padrão é regional e seus recursos devem ser criados na mesma região. 

## Arquitetura
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

O diagrama a seguir mostra como o AWS Config avalia as declarações de política do repositório Amazon ECR. 

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O AWS Config inicia uma regra personalizada. 

1. A regra personalizada invoca uma função do Lambda para avaliar a conformidade das declarações de política do repositório Amazon ECR. A função do Lambda então identifica declarações de política de repositório não compatíveis.

1. A função do Lambda envia o estado de não conformidade atualizado para o AWS Config.

1. O AWS Config envia um evento para. EventBridge

1. EventBridge publica as notificações de não conformidade em um tópico do SNS.

1. O Amazon SNS envia um alerta por e-mail para você ou para um usuário autorizado.

**Automação e escala**

A solução desse padrão pode monitorar qualquer número de declarações de política do repositório Amazon ECR, mas todos os recursos que você deseja avaliar devem ser criados na mesma região.

## Ferramentas
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — CloudFormation A AWS ajuda você a modelar e configurar seus recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida. Você pode usar um modelo para descrever seus recursos e as dependências deles, além de inicializá-los e configurá-los juntos como uma pilha, em vez de gerenciar recursos individualmente. Você pode gerenciar e provisionar pilhas em várias contas e regiões da AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html): o AWS Config oferece uma exibição detalhada da configuração dos recursos da AWS em sua conta da AWS. Isso inclui como os recursos estão relacionados um com o outro e como eles foram configurados no passado, de modo que você possa ver como os relacionamentos e as configurações foram alterados ao longo do tempo.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html):** ******o Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagem de contêiner, seguro, escalável e confiável. O Amazon ECR oferece suporte a repositórios privados com permissões baseadas em recursos usando o IAM.                                 
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) — EventBridge A Amazon é um serviço de ônibus de eventos sem servidor que você pode usar para conectar seus aplicativos a dados de várias fontes. EventBridge fornece um fluxo de dados em tempo real de seus aplicativos, aplicativos de software como serviço (SaaS) e serviços da AWS para destinos como funções do AWS Lambda, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outras contas.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): o AWS Lambda é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo. Você paga apenas pelo tempo de computação consumido. Não haverá cobranças quando o código não estiver em execução.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): o Amazon Simple Notiﬁcation Service (Amazon SNS) é um serviço da Web que coordena e gerencia a entrega ou o envio de mensagens entre publicadores e clientes, incluindo servidores da Web e endereços de e-mail. Os assinantes recebem todas as mensagens publicadas nos tópicos para os quais eles se inscrevem, e todos os assinantes em um tópico recebem as mesmas mensagens. 

**Código **

O código desse padrão está disponível no arquivo `aws-config-cloudformation.template` (anexado).

## Épicos
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### Crie a CloudFormation pilha da AWS
<a name="create-the-aws-cloudformation-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a CloudFormation pilha da AWS. | Crie uma CloudFormation pilha da AWS executando o seguinte comando na AWS CLI:<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Teste a regra personalizada do AWS Config
<a name="test-the-aws-config-custom-rule"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste a regra personalizada do AWS Config. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## Anexos
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)

# Otimize implantações sem servidor de várias contas usando os fluxos de trabalho e Actions AWS CDK GitHub
<a name="optimize-multi-account-serverless-deployments"></a>

*Sarat Chandra Pothula e VAMSI KRISHNA SUNKAVALLI, Amazon Web Services*

## Resumo
<a name="optimize-multi-account-serverless-deployments-summary"></a>

Organizações que implantam infraestrutura sem servidor em vários ambientes de rede geralmente enfrentam desafios como duplicação de código, processos manuais Contas da AWS e práticas inconsistentes. A solução desse padrão mostra como usar os fluxos de trabalho reutilizáveis AWS Cloud Development Kit (AWS CDK) in Go and GitHub Actions para agilizar o gerenciamento de infraestrutura sem servidor de várias contas. Essa solução demonstra como você pode definir recursos de nuvem como código, implementar processos padronizados de integration/continuous implantação contínua (CI/CD) e criar componentes modulares e reutilizáveis. 

Ao usar essas ferramentas, as organizações podem gerenciar com eficiência os recursos entre contas, implementar pipelines de implantação consistentes e simplificar arquiteturas complexas sem servidor. A abordagem também aprimora a segurança e a conformidade ao impor práticas padronizadas para uso com Contas da AWS, em última análise, melhorando a produtividade e reduzindo os erros no desenvolvimento e na implantação de aplicativos sem servidor.

## Pré-requisitos e limitações
<a name="optimize-multi-account-serverless-deployments-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Identity and Access Management As [funções e permissões](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html) (IAM) estão em vigor para o processo de implantação. Isso inclui permissões para acessar repositórios do Amazon Elastic Container Registry (Amazon ECR), AWS Lambda criar funções e quaisquer outros recursos necessários em todo o destino. Contas da AWS
+ AWS Command Line Interface [(AWS CLI) versão 2.9.11 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) e configurada.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ AWS Cloud Development Kit (AWS CDK) [versão 2.114.1 ou posterior, [instalada](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) e inicializada.](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)
+ Go 1.22 ou posterior [instalado](https://go.dev/doc/install).
+ Docker 24.0.6 ou posterior, [instalado](https://docs.docker.com/engine/install/).

**Limitações**
+ **Compatibilidade de idiomas**: o Go é uma linguagem popular para aplicações sem servidor. No entanto, além do Go, o AWS CDK suporta outras linguagens de programação, incluindo C\$1, Java, Python e. TypeScript Se sua organização já tem bases de código ou experiência em outras linguagens, talvez seja necessário adaptar ou aprender Go para usar totalmente a solução descrita no padrão.
+ **Curva de aprendizado** — A adoção do AWS CDK, Go (se for novo na organização) e fluxos de trabalho GitHub reutilizáveis pode envolver uma curva de aprendizado para desenvolvedores e equipes. DevOps Treinamento e documentação podem ser necessários para garantir a adoção tranquila e o uso eficaz dessas tecnologias.

## Arquitetura
<a name="optimize-multi-account-serverless-deployments-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Arquitetura dos fluxos de trabalho do AWS CDK e do GitHub Actions para gerenciamento de infraestrutura sem servidor de várias contas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/8d61917b-bd27-44fa-ae95-55358aaf8812/images/a4b36793-95c7-42f7-a92f-99b4722c9c64.png)


Esta solução executa as seguintes etapas:

1. O desenvolvedor clona o repositório, cria uma nova ramificação e faz alterações no código da aplicação em seu ambiente local.

1. O desenvolvedor confirma essas alterações e envia a nova ramificação para o GitHub repositório.

1. O desenvolvedor cria uma pull request no GitHub repositório, propondo mesclar seu recurso ou nova ramificação de recurso na ramificação principal.

1. Essa pull request aciona o fluxo de trabalho de GitHub ações de integração contínua (CI). Os fluxos de trabalho de CI e implantação contínua (CD) neste padrão usam fluxos de trabalho reutilizáveis, que são modelos modulares predefinidos que podem ser compartilhados e executados em diferentes projetos ou repositórios. Fluxos de trabalho reutilizáveis promovem padronização e eficiência nos processos. CI/CD 

1. O fluxo de trabalho de CI configura o ambiente necessário, gera uma marcação Docker para a imagem e cria a imagem do Docker usando o código da aplicação. 

1. O fluxo de trabalho de CI é AWS autenticado usando a função central do Conta da AWS GitHub OIDC. Para fluxos de trabalho de CI, a função central do Conta da AWS GitHub OIDC usa AWS Security Token Service (AWS STS) para obter credenciais temporárias. Essas credenciais permitem que a função crie e envie imagens do Docker para o repositório Amazon ECR da central. Conta da AWS

1. O fluxo de trabalho de CI envia a imagem do Docker criada para o Amazon ECR.

1. O fluxo de trabalho do CI armazena a marcação da imagem no Systems Manager Parameter Store.

1. Depois que o fluxo de trabalho de CI for concluído com êxito, a marcação de imagem do Docker será gerada. 

1. Ao acionar o fluxo de trabalho de CD, o desenvolvedor insere manualmente a marcação de imagem da imagem do Docker que deseja implantar. Essa marcação de imagem corresponde à marcação que foi gerada e enviada para o Amazon ECR durante o fluxo de trabalho de CI.

1. O desenvolvedor aciona manualmente o fluxo de trabalho de CD, que usa o fluxo de trabalho reutilizável do CD. 

1. O fluxo de trabalho do CD é autenticado AWS usando a função central do Conta da AWS GitHub OIDC. Para o fluxo de trabalho do CD, AWS STS é usado primeiro para assumir a função central do Conta da AWS GitHub OIDC. Em seguida, esse perfil assume os perfis de bootstrap do CDK para implantações de contas de destino. 

1. O fluxo de trabalho do CD usa o AWS CDK para sintetizar modelos AWS CloudFormation .

1. O fluxo de trabalho do CD implanta o aplicativo no destino Conta da AWS usando o CDK deploy, usando a tag de imagem especificada manualmente para a função Lambda.

## Ferramentas
<a name="optimize-multi-account-serverless-deployments-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS CloudFormation é parte integrante do processo AWS CDK de implantação. O CDK sintetiza CloudFormation modelos e depois usa CloudFormation para criar ou atualizar os recursos no ambiente. AWS 
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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.
+ AWS Systems Manager O [Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fornece armazenamento seguro e hierárquico para gerenciamento de dados de configuração e gerenciamento de segredos.

**Outras ferramentas**
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.
+ GitHub O [Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.
+ O [Go](https://go.dev/doc/install) é uma linguagem de programação de código aberto compatível com o Google.

**Repositório de código**

O código desse padrão está disponível no cicd-github-actions repositório GitHub [aws-cdk-golang-serverless-](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions).

## Práticas recomendadas
<a name="optimize-multi-account-serverless-deployments-best-practices"></a>
+ **Design modular** — Organize seu AWS CDK código em construções ou pilhas modulares e reutilizáveis, promovendo a reutilização e a manutenção do código em várias contas e projetos.
+ **Separação de preocupações**: separe o código da infraestrutura do código da aplicação, permitindo a implantação e o gerenciamento independentes de cada componente.
+ **Versionamento e imutabilidade**: trate sua infraestrutura como código (IaC) e use o Git para controle de versões. Adote princípios de infraestrutura imutáveis criando novos recursos em vez de modificar os existentes.
+ **Teste e validação** — Implemente estratégias de teste abrangentes, incluindo testes unitários, testes de integração e end-to-end testes, para ajudar a apoiar a exatidão e a confiabilidade de seu AWS CDK código e implantações.
+ **Segurança e conformidade** — siga as melhores práticas de AWS segurança, como acesso com privilégios mínimos, comunicação segura e criptografia de dados. Implemente verificações de conformidade e mecanismos de auditoria para garantir a adesão às políticas organizacionais e aos requisitos regulatórios. Implemente as práticas recomendadas de segurança para imagens de contêineres, como verificar vulnerabilidades, impor a assinatura de imagens e cumprir os requisitos de conformidade de sua organização.
+ **Monitoramento e registro em log**: configure mecanismos de monitoramento e registro em log para rastrear a integridade e a performance de suas aplicações e infraestruturas sem servidor. Use Serviços da AWS como Amazon CloudWatch, AWS CloudTrail, e AWS X-Ray para fins de monitoramento e auditoria.
+ **Automação e CI/CD** — Use fluxos de trabalho GitHub reutilizáveis e outras CI/CD ferramentas para automatizar os processos de criação, teste e implantação, o que pode ajudar a suportar implantações consistentes e repetíveis em várias contas.
+ **Gerenciamento do ambiente**: mantenha ambientes separados (por exemplo, desenvolvimento, preparação e produção). Implemente estratégias para promover mudanças entre ambientes, garantindo testes e validação adequados antes das implantações de produção.
+ **Documentação e colaboração**: documente seu código de infraestrutura, processos de implantação e práticas recomendadas para facilitar o compartilhamento de conhecimento e a colaboração em sua equipe.
+ **Otimização de custos** — implemente estratégias de monitoramento e otimização de custos, como o dimensionamento correto dos recursos, o uso do auto-scaling e o aproveitamento de serviços de otimização de AWS custos, como e. AWS Budgets AWS Cost Explorer
+ **Recuperação de desastres e backup**: planeje cenários de recuperação de desastres implementando mecanismos de backup e restauração para suas aplicações sem servidor e recursos de infraestrutura.
+ **Melhoria contínua**: revise regularmente e atualize suas práticas, ferramentas e processos para se alinhar às práticas recomendadas, recomendações de segurança e avanços tecnológicos mais recentes no ecossistema sem servidor.
+ **Melhore a postura de segurança** — Use [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)para melhorar a postura de segurança de sua nuvem privada virtual (VPC) configurando endpoints de VPC de interface para Amazon ECR e Parameter Store. AWS Lambda AWS Systems Manager 

## Épicos
<a name="optimize-multi-account-serverless-deployments-epics"></a>

### Configurar os ambientes
<a name="set-up-the-environments"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório Amazon ECR na central. Conta da AWS | Para compartilhar imagens de contêineres entre várias Contas da AWS, você deve configurar o acesso entre contas para o Amazon ECR. Primeiro, crie um repositório Amazon ECR na central. Conta da AWSPara criar um repositório do Amazon ECR, execute o seguinte comando:<pre>aws ecr create-repository --repository-name sample-repo</pre>Em uma tarefa posterior, conceda acesso de pull à outra pessoa Contas da AWS que precisa usar a imagem do contêiner. | AWS DevOps | 
| Adicione permissões entre contas ao repositório do Amazon ECR. | Para adicionar permissões entre contas ao repositório Amazon ECR na central Conta da AWS, execute o seguinte código:<pre>{<br />  "Version": "2008-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "LambdaECRImageRetrievalPolicy",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />      "Condition": {<br />        "StringLike": {<br />          "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*"<br />        }<br />      }<br />    },<br />    {<br />      "Sid": "new statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<Target_Account_ID>:root"<br />        },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />    }<br />  ] <br />}</pre> | AWS DevOps | 
| Configure uma função para a função GitHub OIDC na central. Conta da AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Inicialize o AWS ambiente no destino. Contas da AWS | Configure um ambiente CDK em um ambiente específico Conta da AWS e Região da AWS que permita implantações entre contas a partir de uma conta central e aplique princípios de privilégios mínimos à função de execução. CloudFormation Para [inicializar](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) um AWS ambiente, execute o seguinte comando:<pre>cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy></pre> | AWS DevOps | 
| Conceda acesso à função central do Conta da AWS OIDC às funções de Conta da AWS bootstrap de destino. | O bootstrap do CDK cria as seguintes funções do IAM, projetadas para serem assumidas pela central Conta da AWS durante vários estágios do processo de implantação do CDK:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Cada perfil tem permissões específicas adaptadas à sua finalidade, seguindo o princípio de privilégios mínimos. O `Target_Account_ID` e `Target_Region` em cada nome de função ajuda a indicar que essas funções são exclusivas em diferentes Contas da AWS regiões. Esse método oferece suporte à identificação e ao gerenciamento claros em configurações com várias contas e várias regiões.<pre>Target Account CDK Bootstrap Roles<br />arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Para atualizar a política de permissões para a função do OIDC na central Conta da AWS, use o código a seguir:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "sts:AssumeRole",<br />            "Resource": [<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>"<br />            ]<br />        }<br />    ]<br /> }<br /></pre> | AWS DevOps | 

### Criar a imagem do Docker
<a name="build-the-docker-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do projeto. | Para clonar o [GitHub repositório](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions) desse padrão, execute o seguinte comando:<pre>git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git</pre> | AWS DevOps | 
| Vá para o caminho do Dockerfile. | Para navegar até o caminho do Dockerfile, execute o seguinte comando:<pre>cd lambda</pre> | AWS DevOps | 
| Autentique o Docker com o Amazon ECR | O Amazon ECR exige acesso seguro aos seus repositórios de contêineres privados. Ao assinar dessa forma, você está permitindo que o Docker em sua máquina ou CI/CD ambiente local interaja com o Amazon ECR de forma segura.Para autenticar o Docker com o Amazon ECR, execute o seguinte comando:<pre>aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com</pre>Revise os espaços reservados `AWS_REGION` e `AWS_Account_ID` com suas informações. | AWS DevOps | 
| Crie a imagem do Docker. | Para criar a imagem do Docker, excute o seguinte comando:<pre>docker build --platform linux/arm64 -t sample-app .</pre> | AWS DevOps | 
| Marcar e enviar por push a imagem do Docker. | Para marcar a imagem do Docker e enviá-la por push para o repositório do Amazon ECR, execute os seguintes comandos:<pre>docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre><pre>docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre>Revise os espaços reservados`AWS_Account_ID`, `AWS_REGION`, `ECR_REPOSITORY` e `DOCKER_TAG` com suas informações. | AWS DevOps | 

### Implemente o AWS CDK aplicativo
<a name="deploy-the-cdk-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Sintetize a pilha do CDK com variáveis específicas do ambiente. | Para gerar o CloudFormation modelo para sua infraestrutura conforme definido no seu código CDK, execute o seguinte comando:<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth</pre>Revise os seguintes espaços reservados com suas próprias informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Implante a pilha do CDK. | Para implantar a pilha CDK na sua Conta da AWS, execute o comando a seguir. O sinalizador `--require-approval never` indica que o CDK aprovará e executará automaticamente *todas as* alterações. Isso inclui alterações que o CDK normalmente sinalizaria para revisão manual, como alterações em políticas do IAM ou remoção de recursos. Certifique-se de que o código e o CI/CD pipeline do CDK estejam bem testados e seguros antes de usar a `--require-approval never` bandeira em ambientes de produção.<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never</pre> | AWS DevOps | 

### Automatize CI/CD usando fluxos de trabalho de GitHub ações
<a name="automate-ci-cd-using-github-actions-workflows"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma ramificação de recursos e adicione suas alterações. | Use o repositório clonado que você criou anteriormente, crie uma ramificação de recursos e adicione suas alterações ao código da aplicação. Use os seguintes comandos:<pre>git checkout -b <feature_branch><br />git add .<br />git commit -m "add your changes"<br />git push origin <feature_branch></pre>Veja a seguir exemplos de mudanças:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)GitHub As ações usarão os fluxos de trabalho reutilizáveis e acionarão os pipelines. CI/CD  | AWS DevOps | 
| Mescle suas alterações. | Crie uma solicitação de pull e mescle suas alterações com a principal. | AWS DevOps | 

## Solução de problemas
<a name="optimize-multi-account-serverless-deployments-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| `AccessDenied`erros ao implantar recursos em Contas da AWS, por exemplo,`AccessDenied: User not authorized to perform: "sts:AssumeRole"`. | Para ajudar a resolver esse problema, faça o seguinte para verificar as permissões entre contas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Problemas de compatibilidade devido a incompatibilidades de versão, por exemplo, erro `undefined: awscdkStack` com uma versão desatualizada do CDK. | Para ajudar a resolver esse problema, faça o seguinte para verificar se você está usando as versões necessárias do AWS CDK e do Go:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Falhas no pipeline de CI/CD, por exemplo, `Error: No such file or directory` devido à configuração incorreta do YAML ou `Permission denied` devido a ramificações protegidas. | Para ajudar a resolver problemas com a configuração GitHub das Ações, verifique se os fluxos de trabalho reutilizáveis estão devidamente referenciados e configurados. | 

## Recursos relacionados
<a name="optimize-multi-account-serverless-deployments-resources"></a>

**Recursos da AWS**
+ [AWS Práticas recomendadas de segurança, identidade e conformidade](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [AWS CDK Workshop](https://cdkworkshop.com/60-go.html)
+ [AWS Biblioteca do Cloud Development Kit](https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2)
+ [Criar uma função do Lambda usando uma imagem de contêiner](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [Identity and Access Management para Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html)
+ [Trabalhar com o AWS CDK em Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

**Outros recursos**
+ [Configurando o OpenID Connect na Amazon](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web GitHub Services (documentação)
+ [Documentação do Golang](https://golang.org/doc/)
+ Guia de [início rápido para GitHub ações](https://docs.github.com/en/actions/writing-workflows/quickstart) (GitHub documentação)
+ [Reutilização de fluxos de trabalho (documentação](https://docs.github.com/en/actions/sharing-automations/reusing-workflows)) GitHub 

# Provisione AWS Service Catalog produtos com base em AWS CloudFormation modelos usando GitHub Ações
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Ashish Bhatt e Ruchika Modi, Amazon Web Services*

## Resumo
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

Esse padrão fornece às organizações uma abordagem simplificada usando [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)produtos e portfólios para provisionar de forma padronizada e compatível Serviços da AWS entre as equipes. [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda a combinar componentes essenciais nos produtos e portfólios do Service Catalog para provisionar a infraestrutura de rede básica em. Nuvem AWS[Esse padrão também promove DevOps práticas ao integrar a infraestrutura como código (IaC) em fluxos de trabalho de desenvolvimento automatizados usando ações. GitHub ](https://github.com/features/actions)

AWS Service Catalog permite que as organizações criem e gerenciem serviços de TI aprovados AWS, oferecendo benefícios como padronização, controle centralizado, provisionamento de autoatendimento e gerenciamento de custos. Ao automatizar a implantação de portfólios e produtos do Service Catalog por meio do GitHub Actions, as empresas podem fazer o seguinte:
+ Obtenha implantações consistentes e reproduzíveis. 
+ Use o controle de versão para IaC. 
+ Integre o gerenciamento de recursos de nuvem aos fluxos de trabalho de desenvolvimento existentes. 

Essa combinação simplifica as operações na nuvem, reforça a conformidade e acelera a entrega de serviços aprovados, ao mesmo tempo em que reduz os erros manuais e melhora a eficiência geral.

## Pré-requisitos e limitações
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS 
+ Acesso ao [GitHub repositório](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Compreensão básica de AWS CloudFormation e AWS Service Catalog
+ Um bucket do Amazon Simple Storage Service (Amazon S3) para hospedar modelos CloudFormation 
+ Uma função AWS Identity and Access Management (IAM) chamada `github-actions` que é usada para conectividade entre GitHub e AWS

**Limitações**
+ O código reutilizável desse padrão foi testado somente com GitHub Actions.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**

A solução desse padrão foi criada usando as seguintes ações do [GitHub Marketplace](https://github.com/marketplace) e suas respectivas versões:
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## Arquitetura
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura para esta solução.

![\[Usando GitHub Actions para provisionar produtos do Service Catalog com base em CloudFormation modelos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. Administradores ou engenheiros de plataforma enviam CloudFormation modelos padronizados para um GitHub repositório, onde os modelos são mantidos. O GitHub repositório também contém fluxos de trabalho que automatizam o provisionamento do uso de ações. AWS Service Catalog GitHub 

1. GitHub As ações acionam um fluxo de trabalho que se conecta ao Nuvem AWS uso de um provedor OpenID Connect (OIDC) para provisionar o Service Catalog.

1. O Service Catalog contém o portfólio e os produtos que os desenvolvedores podem usar diretamente para provisionar AWS recursos padronizados. Esse padrão agrupa AWS recursos como nuvens privadas virtuais (VPCs), sub-redes, gateways NAT e de internet e tabelas de rotas.

1. Depois que o desenvolvedor cria um produto do Service Catalog, o Service Catalog o converte em recursos pré-configurados e padronizados AWS . Como resultado, os desenvolvedores economizam tempo porque não precisam provisionar recursos individuais e configurá-los manualmente.

## Ferramentas
<a name="provision-aws-service-catalog-products-using-github-actions-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWSÉ um serviço de infraestrutura como código (IaC) que pode ser facilmente usado como um dos tipos de produto com AWS Service Catalog.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html)ajuda você a gerenciar centralmente o catálogo de serviços de TI aprovados AWS. Os usuários finais podem implantar rapidamente somente os serviços de TI aprovados de que precisam, seguindo as restrições definidas pela organização.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outros**
+ GitHub O [Actions](https://docs.github.com/en/actions) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions). O repositório contém os seguintes arquivos de interesse:
+ `github/workflows`:
  + `e2e-test.yaml`— Esse arquivo chama`workflow.yaml`, que é o fluxo de trabalho [reutilizável](https://docs.github.com/en/actions/sharing-automations/reusing-workflows). Esse fluxo de trabalho é acionado assim que há uma confirmação e um push em uma ramificação.
  + `workflow.yaml`— Esse arquivo contém o fluxo de trabalho reutilizável dessa solução e é configurado `workflow_call` como acionador. Como um fluxo de trabalho reutilizável, `workflow.yaml` pode ser chamado de qualquer outro fluxo de trabalho.
+ `templates`:
  + `servicecatalog-portfolio.yaml`— Esse CloudFormation modelo inclui recursos que provisionam o portfólio do Service Catalog e o produto Service Catalog. O modelo contém um conjunto de parâmetros que são usados durante o provisionamento do portfólio e dos produtos do Service Catalog. Um parâmetro aceita uma URL de arquivo do Amazon S3 na qual o modelo `vpc.yaml` é carregado. Embora esse padrão inclua o `vpc.yaml` arquivo para provisionar AWS recursos, você também pode usar o parâmetro URL do arquivo S3 para configuração.
  + `vpc.yaml`— Esse CloudFormation modelo contém AWS recursos a serem adicionados ao produto Service Catalog. AWS os recursos incluem sub-redes VPCs, gateways de internet, gateways NAT e tabelas de rotas. O `vpc.yaml` modelo é um exemplo de como você pode usar qualquer CloudFormation modelo com um modelo de portfólio e produto do Service Catalog.

## Práticas recomendadas
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+ Consulte [as melhores práticas de segurança AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html) na AWS Service Catalog documentação. 
+ Consulte [Fortalecimento de segurança para GitHub ações](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions) na GitHub documentação.

## Épicos
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### Configuração da estação de trabalho local
<a name="set-up-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o Git na sua estação de trabalho local. | Para instalar e configurar o Git em sua estação de trabalho local, use as [instruções de Introdução — Instalação do Git na documentação do Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). | Desenvolvedor de aplicativos | 
| Clone o repositório do GitHub projeto. | Para clonar o repositório GitHub do projeto, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps engenheiro | 

### Configurar o provedor OIDC
<a name="set-up-the-oidc-provider"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure um provedor OIDC. | Crie um provedor OpenID Connect (OIDC) que permita que os fluxos de trabalho do GitHub Actions acessem recursos sem precisar armazenar as AWS credenciais como segredos duradouros. AWS GitHub Para obter instruções, consulte [Configuração do OpenID Connect na Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub na documentação.Depois que um provedor OIDC for configurado, a política de confiança da função do IAM`github-actions`, mencionada anteriormente nos [Pré-requisitos](#provision-aws-service-catalog-products-using-github-actions-prereqs), será atualizada. | Administrador da AWS, AWS DevOps, AWS geral | 

### Pipeline Trigger GitHub Actions para implantar o portfólio e os produtos do Service Catalog
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualizar `e2e-test.yaml`. | O `e2e-test.yaml` arquivo aciona o fluxo de trabalho reutilizável em. `workflow.yaml` Atualize e valide os valores dos seguintes parâmetros de entrada em`e2e-test.yaml`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps engenheiro | 

### Valide a implantação
<a name="validate-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide os recursos do Service Catalog. | Para validar os recursos do Service Catalog, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a CloudFormation pilha. | Para excluir a CloudFormation pilha, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)Para obter mais informações, consulte [Excluir uma pilha do CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) na documentação CloudFormation  | DevOps engenheiro, administrador da AWS | 

## Solução de problemas
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| `e2e-test``Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions``Did you forget to run actions/checkout before running your local action?` | Para garantir que você tenha as configurações corretas do repositório habilitadas, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## Recursos relacionados
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS documentação**
+ [Visão geral do Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**Outros recursos**
+ [Sobre eventos que acionam fluxos de trabalho](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub documentação)
+ [Reutilização de fluxos de trabalho (documentação](https://docs.github.com/en/actions/sharing-automations/reusing-workflows)) GitHub 

## Mais informações
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

Para ver capturas de tela relacionadas aos [Epics](#provision-aws-service-catalog-products-using-github-actions-epics), acesse a pasta **Images** no repositório desse padrão. GitHub As seguintes capturas de tela estão disponíveis:
+ [AWS Service Catalog portfólio, seção de administração](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog produto, seção de administração](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog produto, User/Provisioning seção](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)

# Provisione funções do IAM com privilégios mínimos implantando uma solução de máquina de venda automática de funções
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution"></a>

*Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi e Chade Moon, da Amazon Web Services*

## Resumo
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-summary"></a>

Permissões de função com escopo excessivo AWS Identity and Access Management (IAM) para pipelines podem introduzir riscos desnecessários para uma organização. Às vezes, os desenvolvedores concedem permissões amplas durante o desenvolvimento, mas se esquecem de reduzir o escopo das permissões após a solução de problemas do código. Isso causa um problema em que funções poderosas estão presentes sem a necessidade comercial e podem nunca ter sido revisadas por um engenheiro de segurança.

Esse padrão oferece uma solução para esse problema: a máquina de venda automática de papéis (RVM). Usando um modelo de implantação seguro e centralizado, o RVM demonstra como provisionar funções do IAM com privilégios mínimos para pipelines de repositórios individuais GitHub com o mínimo esforço dos desenvolvedores. Como o RVM é uma solução central, você pode configurar suas equipes de segurança como revisores necessários para aprovar as alterações. Essa abordagem permite que a segurança rejeite solicitações de função de pipeline com permissão excessiva. 

O RVM usa o código do Terraform como entrada e gera funções do IAM prontas para o pipeline como saída. As entradas necessárias são o Conta da AWS ID, o nome do GitHub repositório e a política de permissões. O RVM usa essas entradas para criar a política de confiança e a política de permissões da função. A política de confiança resultante permite que o GitHub repositório especificado assuma a função e a use para operações de pipeline.

O RVM usa uma função do IAM (configurada durante o bootstrap). Essa função tem permissões para assumir uma role-provisioning-role em cada conta na organização. A função é configurada por meio do AWS Control Tower Account Factory for Terraform (AFT) ou AWS CloudFormation StackSets. Essas role-provisioning-roles são as funções que realmente criam as funções do pipeline para desenvolvedores.

## Pré-requisitos e limitações
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Uma GitHub organização usada para implantar infraestrutura como código (IaC) por meio de GitHub ações. (*não GitHub Enterprise/Premium/Ultimate* são**** obrigatórios.)
+ Um AWS ambiente com várias contas. Esse ambiente não precisa fazer parte dele AWS Organizations.
+ Um mecanismo para implantar uma função do IAM em todos Contas da AWS (por exemplo, AFT ou CloudFormation StackSets).
+ Terraform versão 1.3 ou posterior [instalado e configurado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Terraform AWS Provider versão 4 ou posterior [instalado](https://github.com/hashicorp/terraform-provider-aws/releases) e [configurado](https://developer.hashicorp.com/terraform/language/providers/configuration).

**Limitações**
+ O código desse padrão é específico para GitHub Actions e Terraform. No entanto, os conceitos gerais do padrão podem ser reutilizados em outras estruturas de integração e entrega contínuas (CI/CD).
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-architecture"></a>

O diagrama a seguir ilustra o fluxo de trabalho deste padrão.

![\[Fluxo de trabalho para automatizar a criação e a implantação de funções do IAM usando GitHub ações.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/215c590e-0c84-411d-be6e-b1739f1e19d2/images/82fcdc9f-9576-4e7c-b7fe-b45046ba79d2.png)


O fluxo de trabalho para o uso típico da máquina de venda automática de papéis consiste nas seguintes etapas:

1. Um desenvolvedor envia o código que contém o código do Terraform para uma função IAM recém-solicitada no repositório GitHub RVM. Essa ação aciona o pipeline de ações do RVM GitHub .

1. O pipeline usa uma política de confiança do OpenID Connect (OIDC) para assumir a função de assumir a função de RVM.

1. À medida que o pipeline do RVM é executado, ele assume a função do fluxo de trabalho do RVM na conta na qual está provisionando a nova função do IAM do desenvolvedor. (A função do fluxo de trabalho do RVM foi provisionada usando AFT ou.) CloudFormation StackSets

1. O RVM cria a função IAM do desenvolvedor com permissões e confiança apropriadas, para que a função possa ser assumida por outros pipelines de aplicativos.

1. Os desenvolvedores de aplicativos podem configurar seus pipelines de aplicativos para assumir essa função provisionada por RVM.

A função criada inclui as permissões solicitadas pelo desenvolvedor e uma `ReadOnlyAccess` política. A função só pode ser assumida por pipelines executados na `main` ramificação do repositório especificado pelo desenvolvedor. Essa abordagem ajuda a garantir que a proteção e as revisões da filial possam ser necessárias para usar a função.

**Automação e escala**

As permissões com privilégios mínimos exigem atenção aos detalhes de cada função que está sendo provisionada. Esse modelo reduz a complexidade necessária para criar essas funções, permitindo que os desenvolvedores criem as funções de que precisam sem muito aprendizado ou esforço adicional.

## Ferramentas
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-tools"></a>

**Serviços da AWS**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)é um serviço de gerenciamento de contas que ajuda você a consolidar várias Contas da AWS em uma organização que você cria e gerencia centralmente.

**Outras ferramentas**
+ O [Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto. Isso inclui a capacidade de criar uma [conta organizacional](https://docs.github.com/en/get-started/learning-about-github/types-of-github-accounts#organization-accounts).
+ GitHub O [Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) é uma plataforma de integração contínua e entrega contínua (CI/CD) totalmente integrada aos GitHub repositórios. Você pode usar o GitHub Actions para automatizar seu pipeline de criação, teste e implantação.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no GitHub [role-vending-machine](https://github.com/aws-samples/role-vending-machine)repositório.

## Práticas recomendadas
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-best-practices"></a>
+ **Torne fácil o certo e difícil o errado** — Torne mais fácil fazer a coisa certa. Se os desenvolvedores tiverem dificuldades com o processo de provisionamento do RVM, eles podem tentar criar funções por outros meios, o que prejudica a natureza central do RVM. Certifique-se de que sua equipe de segurança forneça orientações claras sobre como usar o RVM de forma segura e eficaz.

  Você também deve dificultar que os desenvolvedores façam a coisa errada. Use políticas de controle de serviço (SCPs) ou limites de permissão para restringir quais funções podem criar outras funções. Essa abordagem pode ajudar a limitar a criação de funções apenas ao RVM e a outras fontes confiáveis.
+ **Forneça bons exemplos** — Inevitavelmente, alguns desenvolvedores adaptarão as funções existentes no repositório RVM como modelos informais para conceder permissões para suas novas funções. Se você tiver exemplos de permissões mínimas dos quais eles possam copiar, isso pode reduzir o risco de os desenvolvedores solicitarem permissões amplas e cheias de caracteres curinga. Se você começar com funções altamente autorizadas com muitos curingas, esse problema pode se multiplicar com o passar do tempo.
+ **Use convenções e condições de nomenclatura** — Mesmo que um desenvolvedor não saiba todos os nomes de recursos que seu aplicativo criará, ele ainda deve limitar as permissões de função usando uma convenção de nomenclatura. Por exemplo, se eles estiverem criando buckets do Amazon S3, o valor da chave de recurso pode parecer `arn:aws:s3:::myorg-myapp-dev-*` que sua função não tenha permissões além dos buckets correspondentes a esse nome. Aplicar a convenção de nomenclatura por meio de uma política do IAM tem o benefício adicional de melhorar a conformidade com a convenção de nomenclatura. Essa melhoria ocorre porque não será permitida a criação de recursos não correspondentes.
+ **Exigir revisões de pull request (PR)** — O valor da solução RVM é que ela cria um local central onde novas funções do pipeline podem ser revisadas. No entanto, esse design só é útil se houver grades de proteção que ajudem a garantir que um código seguro e de alta qualidade seja comprometido com o RVM. Proteja as ramificações usadas para implantar código (por exemplo,`main`) de envios diretos e exija aprovações para qualquer solicitação de mesclagem direcionada a elas.
+ **Configurar funções somente para leitura** — Por padrão, o RVM provisiona uma `readonly` versão de cada função solicitada. Essa função pode ser usada em CI/CD pipelines que não gravam dados, como um fluxo de trabalho de `terraform plan` pipeline. Essa abordagem ajuda a evitar alterações indesejadas se um fluxo de trabalho somente para leitura se comportar mal.

  Por padrão, a `ReadOnlyAccess` política AWS gerenciada é anexada às funções somente leitura e às funções de leitura e gravação. Essa política reduz a necessidade de iteração ao determinar as permissões necessárias, mas pode ser excessivamente permissiva para algumas organizações. Se quiser, você pode remover a política do código do Terraform.
+ **Conceda permissões mínimas** — siga o princípio do privilégio mínimo e conceda as permissões mínimas necessárias para realizar uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-epics"></a>

### Prepare o ambiente
<a name="prepare-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o repositório de amostras para sua GitHub organização. | [Clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) o repositório desse padrão ou [bifurque](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) esse repositório para sua GitHub organização para que você possa adaptá-lo às suas necessidades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps engenheiro | 
| Determine o Conta da AWS para o RVM. | Determine qual implantação de infraestrutura usar Conta da AWS para o RVM. Não use a conta raiz ou de gerenciamento. | Arquiteto de nuvem | 
| (Opcional) Permita que os pipelines da organização sejam criados PRs. | Essa etapa só é necessária se você quiser permitir que o `generate_providers_and_account_vars` fluxo de trabalho seja criado PRs.Para permitir que os pipelines da sua organização sejam criados PRs, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Para obter mais informações, consulte [Gerenciando configurações de GitHub ações para um repositório](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests) na GitHub documentação. | DevOps engenheiro | 
| Conceda permissões somente de leitura à conta RVM. | Crie uma política de delegação em sua conta de gerenciamento que conceda permissões somente de leitura à sua conta RVM. Isso permite que seus GitHub fluxos de trabalho do RVM obtenham dinamicamente uma lista das contas da sua AWS organização quando o script é executado. `generate_providers_and_account_vars.py` Use o código a seguir e `<YOUR RVM Account ID>` substitua pelo Conta da AWS ID que você selecionou na Etapa 2:<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "Statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<YOUR RVM Account ID>:root"<br />      },<br />      "Action": [<br />        "organizations:ListAccounts",<br />        "organizations:DescribeOrganization",<br />        "organizations:DescribeOrganizationalUnit",<br />        "organizations:ListRoots",<br />        "organizations:ListAWSServiceAccessForOrganization",<br />        "organizations:ListDelegatedAdministrators"<br />      ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | Administrador de nuvem | 
| Atualize os valores padrão do repositório de amostra. | Para configurar o RVM para operar em seu ambiente específico Região da AWS, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps engenheiro | 

### Inicializar a infraestrutura
<a name="initialize-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize o repositório RVM. | Essa etapa é necessária para criar a confiança do OIDC e as funções do IAM usadas pelo próprio pipeline do RVM, para que ele possa começar a operar e vender outras funções.No contexto da sua conta RVM, execute manualmente um `terraform apply` comando do `scripts/bootstrap` diretório. Forneça todos os valores necessários com base na documentação da variável. | DevOps engenheiro | 

### Configurar operações
<a name="configure-operations"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante as `github-workflow-rvm-readonly` funções `github-workflow-rvm` e em todas as contas. | Escolha um método de implantação que se alinhe às práticas da sua organização, como AFT ou StackSets. Use esse método para implantar as duas funções do IAM no `scripts/assumed_role/main.tf` arquivo (nomes padrão `github-workflow-rvm` e`github-workflow-rvm-readonly`) em cada conta em que você deseja que o RVM possa criar funções de pipeline.Essas funções do IAM têm políticas de confiança que permitem que a função de assunção de função da conta RVM (ou `readonly` equivalente) a assuma. As funções também têm políticas de permissão do IAM que permitem ler e escrever (a menos que usem a `readonly` função) funções correspondentes`github-workflow-role-*`. | Administrador da AWS | 
| Execute o `generate_providers_and_account_vars` fluxo de trabalho. | Para configurar seu RVM para que ele esteja pronto para criar funções de pipeline, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Depois que o fluxo de trabalho for concluído, o RVM estará pronto para:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps engenheiro | 

## Solução de problemas
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Eu criei uma função usando o RVM, mas GitHub não consigo assumi-la. | Verifique se o nome do GitHub repositório corresponde ao nome fornecido ao `github_workflow_roles` módulo. As funções são definidas de forma que somente um repositório possa assumi-las.Da mesma forma, verifique se a ramificação usada no GitHub pipeline corresponde ao nome da ramificação fornecida ao `github_workflow_roles` módulo. Normalmente, as funções criadas pelo RVM com permissões de gravação só podem ser usadas por fluxos de trabalho com escopo na `main` ramificação (ou seja, implantações provenientes de). `main` | 
| Minha função de somente leitura está falhando ao executar seu pipeline porque não tem permissões para ler um recurso específico. | Embora a `ReadOnlyAccess` política forneça amplas permissões somente para leitura, ela não tem algumas ações de leitura (por exemplo, determinadas AWS Security Hub CSPM ações).Você pode adicionar permissões de ação específicas usando o `inline_policy_readonly` parâmetro do `github-workflow-roles` módulo. | 

## Recursos relacionados
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-resources"></a>
+ [Práticas recomendadas de uso AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-bestpractices.html)
+ [Organizando seu AWS ambiente usando várias contas](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html)
+ [Visão geral do AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)
+ [Práticas recomendadas de políticas](https://docs.aws.amazon.com/codepipeline/latest/userguide/security_iam_service-with-iam-policy-best-practices.html) 

## Mais informações
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-additional"></a>

**Usando GitHub ambientes**

GitHub ambientes são uma abordagem alternativa às restrições baseadas em filiais para acesso a funções. Se você preferir usar um GitHub ambiente, veja a seguir um exemplo da sintaxe de uma condição adicional na política de confiança do IAM. Essa sintaxe especifica que a função só pode ser usada quando a GitHub ação está sendo executada no `Production` ambiente.

```
"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
```

O exemplo de sintaxe usa os seguintes valores de espaço reservado:
+ `octo-org`é o nome GitHub da organização.
+ `octo-repo`é o nome do repositório.
+ `Production`é o nome específico do GitHub ambiente.

# Publique CloudWatch métricas da Amazon em um arquivo CSV
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Resumo
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-summary"></a>

Esse padrão usa um script Python para recuperar as métricas da CloudWatch Amazon e converter as informações métricas em um arquivo de valores separados por vírgula (CSV) para melhorar a legibilidade. O script usa o serviço da AWS cujas métricas devem ser recuperadas como um argumento obrigatório. Você pode especificar a região da AWS e o perfil de credencial da AWS como argumentos opcionais. Se você não especificar esses argumentos, o script usará a região e o perfil padrão configurados para a estação de trabalho em que o script é executado. Depois que o script é executado, ele gera e armazena um arquivo CSV no mesmo diretório.

Consulte a seção *Anexos* para ver o script e os arquivos associados fornecidos com esse padrão.

## Pré-requisitos e limitações
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-prereqs"></a>

**Pré-requisitos **
+ Python 3.x
+ AWS Command Line Interface (AWS CLI)

**Limitações**

O script atualmente é compatível com os seguintes serviços AWS:
+ AWS Lambda
+ Nuvem de computação elástica da Amazon (Amazon EC2)
  + Por padrão, o script não coleta métricas de volume do Amazon Elastic Block Store (Amazon EBS) Para coletar métricas do Amazon EBS, você deve modificar o `metrics.yaml` arquivo anexado.
+ Amazon Relational Database Service (Amazon RDS)
  + No entanto, o script não é compatível com o Amazon Aurora.
+ Application Load Balancer
+ Network Load Balancer
+ Amazon API Gateway

## Ferramentas
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-tools"></a>
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) é um serviço de monitoramento criado para DevOps engenheiros, desenvolvedores, engenheiros de confiabilidade de sites (SREs) e gerentes de TI. CloudWatch fornece dados e insights acionáveis para ajudá-lo a monitorar seus aplicativos, responder às mudanças de desempenho em todo o sistema, otimizar a utilização de recursos e obter uma visão unificada da integridade operacional. CloudWatch coleta dados operacionais e de monitoramento na forma de registros, métricas e eventos e fornece uma visão unificada dos recursos, aplicativos e serviços da AWS que são executados na AWS e em servidores locais.

## Épicos
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-epics"></a>

### Instalar e configurar os pré-requisitos
<a name="install-and-configure-the-prerequisites"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instalar os pré-requisitos. | Execute este comando: .<pre>$ pip3 install -r requirements.txt</pre> | Desenvolvedor | 
| Configure a AWS CLI. | Execute este comando: . <pre>$ aws configure</pre> | Desenvolvedor | 

### Configure o script do Python
<a name="configure-the-python-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Abra o script. | Para alterar a configuração padrão do script, abra`metrics.yaml`. | Desenvolvedor | 
| Defina o período para o script. | Esse é o período de tempo para buscar. O período padrão é 5 minutos (300 segundos). Você pode alterar o período, mas observe as seguintes limitações: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/publish-amazon-cloudwatch-metrics-to-a-csv-file.html)Caso contrário, a operação da API não retornará nenhum ponto de dados. | Desenvolvedor | 
| Defina as horas para o script. | Esse valor especifica quantas horas de métricas você deseja buscar. O valor padrão é 1 hora. Para recuperar vários dias de métricas, forneça o valor em horas. Por exemplo, por 2 dias, especifique 48. | Desenvolvedor | 
| Altere os valores das estatísticas do script.  | (Opcional) O valor das estatísticas globais é`Average`, usado ao buscar métricas que não têm um valor estatístico específico atribuído. O script suporta os valores estatísticos `Maximum``SampleCount`, `Sum` e. | Desenvolvedor | 

### Execute o script do Python
<a name="run-the-python-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Executar o script. | Use o seguinte comando: <pre>$ python3 cwreport.py <service> </pre>Para ver uma lista de valores de serviço e os parâmetros opcionais`region ` e `profile `, execute o seguinte comando:<pre> $ python3 cwreport.py -h</pre>Para obter mais informações sobre os parâmetros opcionais, consulte a seção *Informações adicionais*. | Desenvolvedor | 

## Recursos relacionados
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-resources"></a>
+ [ Como configurar a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Usando CloudWatch métricas da Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)
+ [ CloudWatch Documentação da Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [EC2 CloudWatch Métricas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)
+ [Métricas do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/logging-metrics.html)
+ [Métricas do Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html#rds-cw-metrics-instance)
+ [Métricas do Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)
+ [Métricas do Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html)
+ [Métricas para Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html)

## Mais informações
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-additional"></a>

**Uso do script**

```
$ python3 cwreport.py -h
```

**Exemplo de sintaxe**

```
python3 cwreport.py <service> <--region=Optional Region> <--profile=Optional credential profile>
```

**Parâmetros**
+ **service (obrigatório)** ‒ O serviço no qual você deseja executar o script. Atualmente, o script oferece suporte aos seguintes serviços: AWS Lambda, Amazon, EC2 Amazon RDS, Application Load Balancer, Network Load Balancer e API Gateway.
+ **region (opcional)** ‒ A região da AWS da qual buscar métricas. A região padrão é `ap-southeast-1`.
+ **profile (opcional)** ‒ O perfil nomeado pela AWS CLI a ser usado. Se esse parâmetro não for especificado, o perfil de credencial configurado padrão será usado.

**Exemplos**
+ Para usar a região padrão `ap-southeast-1` e as credenciais configuradas padrão para obter métricas da Amazon EC2 : `$ python3 cwreport.py ec2`
+ Para especificar uma região e buscar métricas do API Gateway: `$ python3 cwreport.py apigateway --region us-east-1`
+ Para especificar um perfil da AWS e obter EC2 métricas da Amazon: `$ python3 cwreport.py ec2 --profile testprofile`
+ Para especificar a região e o perfil para obter EC2 métricas da Amazon: `$ python3 cwreport.py ec2 --region us-east-1 --profile testprofile`

## Anexos
<a name="attachments-0a915a9d-2eef-4da1-8283-3cf4a115b3b2"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/0a915a9d-2eef-4da1-8283-3cf4a115b3b2/attachments/attachment.zip)

# Remova EC2 as entradas Contas da AWS da Amazon em frente AWS Managed Microsoft AD usando a AWS Lambda automação
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Resumo
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-summary"></a>

O Active Directory (AD) é uma ferramenta de script da Microsoft que gerencia as informações do domínio e as interações do usuário com os serviços de rede. É amplamente usado entre provedores de serviços gerenciados (MSPs) para gerenciar credenciais de funcionários e permissões de acesso. Como invasores do AD podem explorar contas inativas para tentar invadir uma organização, é essencial identificar essas contas e desativá-las usando um cronograma de manutenção regular. Com AWS Directory Service for Microsoft Active Directory, você pode executar o Microsoft Active Directory como um serviço gerenciado. Esse padrão pode ajudar você a configurar a AWS Lambda automação para encontrar e remover rapidamente contas inativas.

Se os cenários a seguir se aplicarem à sua organização, esse padrão poderá ajudar:
+ **Gerenciamento centralizado do AD** — Se sua organização tiver várias Contas da AWS, cada uma com sua própria implantação do AD, pode ser difícil gerenciar contas de usuário e permissões de acesso de forma consistente em todas as contas. Com uma solução de limpeza do AD entre contas, você pode desativar ou remover contas inativas de todas as instâncias do AD de forma centralizada.
+ **Reestruturação ou migração do AD**: se sua organização planeja reestruturar ou migrar sua implantação do AD, uma solução de limpeza do AD entre contas pode ajudá-lo a preparar o ambiente. A solução pode ajudar você a remover contas desnecessárias ou inativas, simplificar o processo de migração e reduzir possíveis conflitos ou problemas.

Quando você usa esse padrão, pode alcançar os seguintes benefícios:
+ Melhore a performance do banco de dados e dos servidores, além de corrigir vulnerabilidades de segurança causadas por contas inativas.
+ Se o seu servidor do AD estiver hospedado na nuvem, a remoção de contas inativas também pode reduzir custos de armazenamento enquanto otimiza a performance. Os custos mensais podem diminuir devido à redução tanto de taxas de largura de banda quanto de recursos de processamento.
+ Prevenção de atacantes em potencial com um Active Directory limpo.

## Pré-requisitos e limitações
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa para pais Conta da AWS e uma ou várias contas para crianças. Neste padrão, uma *conta principal* é onde o Active Directory é criado. As *contas secundárias* hospedam servidores Windows e são ingressadas por meio da conta principal do Active Directory.
+ Git [instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurado em uma estação de trabalho local.
+ Terraform [instalado](https://learn.hashicorp.com/tutorials/terraform/install-cli) e configurado em uma estação de trabalho local.
+ AWS Managed Microsoft AD diretório configurado na conta principal e compartilhado com todas as contas secundárias. *Para obter mais detalhes, consulte [Tutorial: Compartilhando seu AWS Managed Microsoft AD diretório para uma EC2 associação perfeita ao domínio no Guia de Administração](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html).AWS Directory Service *
+ Uma conexão de emparelhamento de nuvem privada virtual (VPC) ou AWS Transit Gateway conexão disponível entre a VPC da AWS Directory Service (conta principal) e a VPC das instâncias do Amazon Elastic Compute Cloud (Amazon EC2) (contas secundárias). Para obter mais detalhes, consulte [Configure a VPC peering connection between the directory owner and the directory consumer account](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) no *Guia de Administração do AWS Directory Service *.
+ Uma máquina Windows configurada com o script `EC2WindowsUserdata` em todas as contas principal e secundárias. O arquivo de script está disponível na raiz do [repositório de código](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup) deste padrão.
+ Uma função entre contas AWS Identity and Access Management (IAM) disponível em cada conta secundária configurada com uma política de confiança para permitir o uso de uma AWS Lambda função da conta principal. Para obter mais informações, consulte [Enviar e receber eventos entre a Amazon Contas da AWS EventBridge no](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html) *Guia do EventBridge usuário da Amazon*.
+ Os seguintes valores secretos estão disponíveis no AWS Systems Manager Parameter Store da conta principal:
  + `domainJoinUser`: o nome de usuário do serviço de diretório
  + `domainJoinPassword`: a senha do serviço de diretório

  Para obter mais informações sobre segredos, consulte [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) no *Guia do AWS Secrets Manager usuário*.

**Limitações**
+ A criação de um recurso em uma conta secundária não é automatizada com o Terraform. Você deve criar os seguintes recursos manualmente usando o Console de gerenciamento da AWS:
  +  EventBridge Regra da Amazon para enviar os eventos de EC2 rescisão da Amazon para a conta principal
  + Criação de função EC2 entre contas da Amazon na conta infantil com política de confiança
  + Emparelhamento de VPC ou conesão de gateway de trânsito
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ [Terraform versão 1.1.9 ou posterior](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versão 3.0 ou superior](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arquitetura
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-architecture"></a>

O diagrama a seguir mostra a arquitetura de alto nível da solução.

![\[Processo para usar a automação Lambda para remover EC2 entradas de todas as contas da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c397d873-e10d-44b6-8352-5f1380ab94ca/images/bd6c80a7-e490-47db-bd47-165314e1ea8a.png)


O diagrama de arquitetura a seguir ilustra o seguinte processo:

1. Em contas infantis, a EventBridge regra coleta todos os eventos de EC2 rescisão da Amazon. A regra envia os eventos EventBridge que estão presentes na conta principal.

1. Da conta principal, EventBridge coleta todos os eventos e contém a regra para acionar a função `ADcleanup-Lambda` Lambda.

1. A conta principal recebe todos os eventos de encerramento da conta principal ou secundária e aciona a função do Lambda.

1. A função Lambda faz a chamada para grupos do Amazon Auto EC2 Scaling usando o módulo boto do Python e obtém o ID aleatório da instância. O ID da instância é usado para executar comandos do Systems Manager.

1. A função Lambda faz outra chamada para a Amazon EC2 usando o módulo boto. A função do Lambda obtém os endereços IP privados dos servidores Windows em execução e armazena os endereços em uma variável temporária. Nas etapas 5.1 e 5.2, as EC2 instâncias do Windows em execução são coletadas de contas secundárias.

1. A função do Lambda faz outra chamada para o Systems Manager para obter as informações do computador ao está o AWS Directory Service qual conectado.

1. Um AWS Systems Manager documento ajuda a executar o PowerShell comando nos servidores Amazon EC2 Windows para obter os endereços IP privados dos computadores conectados ao AD. (O documento Systems Manager usa o ID da instância obtido na etapa 4.)

1. O nome de usuário e as senhas do domínio AD são armazenados no AWS Systems Manager Parameter Store. AWS Lambda e o Systems Manager fazem uma chamada para o Parameter Store e obtêm os valores de nome de usuário e senha a serem usados para se conectar ao AD.

1. Usando o documento Systems Manager, o PowerShell script é executado no servidor Amazon EC2 Windows usando o ID da instância obtido anteriormente na etapa 4.

1. A Amazon EC2 se conecta AWS Directory Service usando PowerShell comandos e remove os computadores que não estão em uso ou inativos.

## Ferramentas
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-tools"></a>

**AWS serviços**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)fornece várias maneiras de usar o Microsoft Active Directory (AD) com outros Serviços da AWS , como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) para SQL Server e FSx Amazon para Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permite que suas cargas de trabalho e AWS recursos com reconhecimento de diretório usem o Microsoft Active Directory no. Nuvem AWS
+ [O Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los. Com o IAM, você pode especificar em quem ou o que pode acessar serviços e recursos AWS, gerenciar centralmente permissões refinadas e analisar o acesso para refinar as permissões. AWS
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar suas aplicações e infraestrutura em execução na Nuvem AWS. Ele simplifica o gerenciamento de aplicativos e recursos, reduz o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus AWS recursos com segurança em grande escala.
+ [AWS Systems Manager os documentos](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definem as ações que o Systems Manager executa em suas instâncias gerenciadas. O Systems Manager inclui mais de 100 documentos pré-configurados, que você pode usar especificando parâmetros no runtime.
+ AWS Systems Manager O [Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) é um recurso AWS Systems Manager e fornece armazenamento seguro e hierárquico para gerenciamento de dados de configuração e gerenciamento de segredos.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)é um programa de gerenciamento de automação e configuração da Microsoft executado em Windows, Linux e macOS.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [aws-lambda-ad-cleanup-terraform-samples](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup).

## Práticas recomendadas
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Ingressar em domínios automaticamente. **Ao iniciar uma instância do Windows que fará parte de um Directory Service domínio, entre no domínio durante o processo de criação da instância, em vez de adicioná-la manualmente posteriormente. Para ingressar automaticamente em um domínio, selecione o diretório correto na lista suspensa **Diretório de ingresso em domínio** ao executar uma nova instância. Para obter mais detalhes, consulte [Unir perfeitamente uma instância EC2 do Amazon Windows ao seu AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) no *Guia de Directory Service Administração*.
+ **Exclua contas que não são utilizadas. **É comum encontrar contas no AD que nunca foram usadas. Assim como contas desabilitadas ou inativas que permanecem no sistema, contas que não estão sendo usadas e são negligenciadas podem diminuir a performance do seu sistema do AD ou tornar a organização vulnerável a vazamentos de dados.
+ **Automatize as limpezas do Active Directory. **Para ajudar a mitigar os riscos de segurança e evitar que contas obsoletas impactem a performance do AD, conduza limpezas do AD em intervalos regulares. É possível concluir a maioria das tarefas de gerenciamento e de limpeza do AD por meio da gravação de scripts. Exemplos de tarefas incluem remover contas desabilitadas e inativas, excluir grupos vazios e inativos, e localizar contas de usuário e senhas expiradas.

## Épicos
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-epics"></a>

### Configurar contas secundárias
<a name="set-up-child-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um perfil entre contas na conta secundária. | Para criar um perfil entre contas em uma conta secundária, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 
| Crie uma regra de evento na conta secundária. | Para criar uma EventBridge regra para cada conta infantil, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Para obter mais detalhes, consulte [Criação de regras que reagem a eventos na Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) no *Guia EventBridge do usuário da Amazon*. | DevOps engenheiro | 
| Crie uma EC2 instância e participe do AD. | Para criar uma EC2 instância para o Windows, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 

### Configurar a estação de trabalho local
<a name="set-up-the-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma pasta para o projeto e adicione os arquivos. | Para clonar o repositório e criar uma pasta para o projeto, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 
| Crie o arquivo `adcleanup.zip`. | Para compactar o arquivo `lambda_function.py`, execute o seguinte comando:`zip -r adcleanup.zip lambda_function.py` | DevOps engenheiro | 

### Provisionamento da arquitetura de destino por meio da configuração do Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Forneça os valores para as variáveis do Terraform. | Para a conta secundária, forneça valores para as seguintes variáveis `arn` como tipos de string no arquivo `terraform.tfvars`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 
| Inicialize a configuração do Terraform. | Para inicializar seu diretório de trabalho que contém os arquivos do Terraform, execute o seguinte comando:`terraform init` | DevOps engenheiro | 
| Pré-visualize as alterações. | É possível visualizar previamente as alterações que o Terraform fará na infraestrutura antes que ela seja implantada. Para validar que o Terraform aplicará as alterações conforme necessário, execute o seguinte comando:`terraform plan —-var-file=examples/terraform.tfvars` | DevOps engenheiro | 
| Coloque em prática as ações propostas. | Para verificar se os resultados do comando `terraform plan` estão conforme o esperado, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute e teste a função do Lambda. | Para verificar se a implantação ocorreu com êxito, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Os resultados da execução mostram a saída da função. | DevOps engenheiro | 
| Veja os resultados da execução da EventBridge regra na conta principal. | Para ver os resultados da EventBridge regra baseada nos eventos de EC2 rescisão da Amazon na conta principal, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)No CloudWatch console, a página **Grupos de registros** mostra os resultados da função Lambda. | DevOps engenheiro | 
| Veja os resultados da execução da EventBridge regra na conta secundária. | Para ver os resultados da EventBridge regra baseada nos eventos de EC2 rescisão da Amazon da conta da criança, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)No CloudWatch console, a página **Grupos de registros** mostra os resultados da função Lambda. | DevOps engenheiro | 

### Limpar a infraestrutura após o uso
<a name="clean-up-infrastructure-after-use"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe a infraestrutura. | Para limpar a infraestrutura que você criou, use o seguinte comando:`terraform destroy`Para confirmar o comando `destroy`, digite `yes`. | DevOps engenheiro | 
| Realize uma verificação após o procedimento de limpeza. | Verifique se os recursos foram removidos com êxito. | DevOps engenheiro | 

## Solução de problemas
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Problema de conexão entre AWS Directory Service (conta principal) e EC2 instância da Amazon (conta secundária) — Você não consegue associar os computadores da conta secundária ao AD, mesmo que o emparelhamento de VPC esteja disponível. | Adicione roteamento no VPCs. Para obter instruções, consulte [Configurar uma conexão de emparelhamento de VPC entre o proprietário do diretório e a conta do consumidor do diretório na documentação](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc). AWS Directory Service  | 

## Recursos relacionados
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentação**
+ [Amazon EventBridge e AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurar permissões de instância obrigatórias para o Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gerenciamento de identidade e acesso para Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Políticas de IAM baseadas em identidade para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)
+ [Associe manualmente uma instância EC2 do Amazon Windows ao seu AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Remova EC2 as entradas da Amazon na mesma forma Conta da AWSAWS Managed Microsoft AD usando a AWS Lambda automação](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)

**Outros recursos**
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentação do Terraform)
+ [Backend Configuration](https://developer.hashicorp.com/terraform/language/backend) (documentação do Terraform)
+ [Install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) (documentação do Terraform)
+ [Python boto module](https://pypi.org/project/boto/) (repositório Python Package Index)
+ [Terraform binary download](https://www.terraform.io/downloads) (documentação do Terraform)

# Remova EC2 as entradas da Amazon na mesma forma Conta da AWS AWS Managed Microsoft AD usando a AWS Lambda automação
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Resumo
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-summary"></a>

O Active Directory (AD) é uma ferramenta de script da Microsoft que gerencia as informações do domínio e as interações do usuário com os serviços de rede. É amplamente usado entre provedores de serviços gerenciados (MSPs) para gerenciar credenciais de funcionários e permissões de acesso. Como invasores do AD podem explorar contas inativas para tentar invadir uma organização, é essencial identificar essas contas e desativá-las usando um cronograma de manutenção regular. Com AWS Directory Service for Microsoft Active Directory, você pode executar o Microsoft Active Directory como um serviço gerenciado. 

Esse padrão pode ajudar você a configurar a AWS Lambda automação para encontrar e remover rapidamente contas inativas. Quando você usa esse padrão, pode alcançar os seguintes benefícios:
+ Melhore a performance do banco de dados e dos servidores, além de corrigir vulnerabilidades de segurança causadas por contas inativas.
+ Se o seu servidor do AD estiver hospedado na nuvem, a remoção de contas inativas também pode reduzir custos de armazenamento enquanto otimiza a performance. Os custos mensais podem diminuir devido à redução tanto de taxas de largura de banda quanto de recursos de processamento.
+ Prevenção de atacantes em potencial com um Active Directory limpo.

## Pré-requisitos e limitações
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Git [instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurado em uma estação de trabalho local.
+ Terraform [instalado](https://learn.hashicorp.com/tutorials/terraform/install-cli) e configurado em uma estação de trabalho local.
+ Computador Windows com módulos do Active Directory (`ActiveDirectory`).
+ Um diretório AWS Managed Microsoft AD e credenciais armazenadas em um [AWS Systems Manager parâmetro no Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html).
+ AWS Identity and Access Management Função (IAM) com permissões para a Serviços da AWS listada em [Ferramentas](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools)*.* Para obter mais informações sobre o IAM, consulte [Recursos relacionados](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources).

**Limitações**
+ Esse padrão não é compatível com a configuração de várias contas.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ [Terraform versão 1.1.9 ou posterior](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versão 3.0 ou superior](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arquitetura
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Processo para usar a automação Lambda para remover EC2 entradas do Microsoft AD gerenciado.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/6b50dcc5-4f4b-4eea-85a7-04cebc9f7454/images/b7fc5962-bfb8-4f5a-968e-7487b1d48c4f.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. A Amazon EventBridge aciona a AWS Lambda função com base em uma expressão cron. (Para esse padrão, a programação da expressão cron é uma vez por dia.)

1. A função e a política necessárias do IAM são criadas e anexadas AWS Lambda por meio do Terraform.

1. A AWS Lambda função é executada e chama os grupos do Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling Groups usando o módulo de inicialização do Python. A função Lambda obtém o ID da instância aleatória. O ID da instância é usado para executar AWS Systems Manager comandos.

1. AWS Lambda faz outra chamada para a Amazon EC2 usando o módulo boto e obtém os endereços IP privados dos servidores Windows em execução e armazena os endereços em uma variável temporária.

1. AWS Lambda faz outra chamada para o Systems Manager para obter as informações do computador ao qual está conectado Directory Service.

1. Um AWS Systems Manager documento ajuda a executar o PowerShell script nos servidores Amazon EC2 Windows para obter os endereços IP privados dos computadores conectados ao AD.

1. O nome de usuário e as senhas do domínio AD são armazenados no AWS Systems Manager Parameter Store. AWS Lambda e o Systems Manager fazem uma chamada para o Parameter Store e obtêm os valores de nome de usuário e senha a serem usados para conectar o AD.

1. Usando o documento Systems Manager, o PowerShell script é executado no servidor Amazon EC2 Windows usando o ID da instância obtido anteriormente na etapa 3.

1. A Amazon EC2 se conecta Directory Service usando PowerShell comandos e remove os computadores que não estão em uso ou inativos.

## Ferramentas
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools"></a>

**Serviços da AWS**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)fornece várias maneiras de usar o Microsoft Active Directory (AD) com outros Serviços da AWS , como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) para SQL Server e FSx Amazon para Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)permite que suas cargas de trabalho e AWS recursos com reconhecimento de diretório usem o Microsoft Active Directory no. Nuvem AWS
+ [O Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los. Com o IAM, você pode especificar em quem ou o que pode acessar serviços e recursos AWS, gerenciar centralmente permissões refinadas e analisar o acesso para refinar as permissões. AWS
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar suas aplicações e infraestrutura em execução na Nuvem AWS. Ele simplifica o gerenciamento de aplicativos e recursos, reduz o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus AWS recursos com segurança em grande escala.
+ [AWS Systems Manager os documentos](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) definem as ações que o Systems Manager executa em suas instâncias gerenciadas. O Systems Manager inclui mais de 100 documentos pré-configurados, que você pode usar especificando parâmetros no runtime.
+ AWS Systems Manager O [Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) é um recurso AWS Systems Manager e fornece armazenamento seguro e hierárquico para gerenciamento de dados de configuração e gerenciamento de segredos.

**Outras ferramentas**
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura de código aberto como código (IaC) que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)é um programa de gerenciamento de automação e configuração da Microsoft executado em Windows, Linux e macOS.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

****Repositório de código** C**

O código desse padrão está disponível no repositório da [solução GitHub Custom AD Cleanup Automation](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/). 

## Práticas recomendadas
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Ingressar em domínios automaticamente. **Ao iniciar uma instância do Windows que fará parte de um Directory Service domínio, entre no domínio durante o processo de criação da instância, em vez de adicioná-la manualmente posteriormente. Para ingressar automaticamente em um domínio, selecione o diretório correto na lista suspensa **Diretório de ingresso em domínio** ao executar uma nova instância. Para obter mais detalhes, consulte [Unir perfeitamente uma instância EC2 do Amazon Windows ao seu AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) no *Guia de Directory Service Administração*.
+ **Exclua contas que não são utilizadas. **É comum encontrar contas no AD que nunca foram usadas. Assim como contas desabilitadas ou inativas que permanecem no sistema, contas que não estão sendo usadas e são negligenciadas podem diminuir a performance do seu sistema do AD ou tornar a organização vulnerável a vazamentos de dados.
+ **Automatize as limpezas do Active Directory. **Para ajudar a mitigar os riscos de segurança e evitar que contas obsoletas impactem a performance do AD, conduza limpezas do AD em intervalos regulares. É possível concluir a maioria das tarefas de gerenciamento e de limpeza do AD por meio da gravação de scripts. Exemplos de tarefas incluem remover contas desabilitadas e inativas, excluir grupos vazios e inativos, e localizar contas de usuário e senhas expiradas. 

## Épicos
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-epics"></a>

### Configurar o ambiente
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma pasta de projeto e adicione os arquivos. | Para clonar o repositório e criar uma pasta para o projeto, faça o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 

### Provisione a arquitetura de destino usando a configuração do Terraform
<a name="provision-the-target-architecture-by-using-the-terraform-configuration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize a configuração do Terraform. | Para inicializar seu diretório de trabalho que contém os arquivos do Terraform, execute o comando a seguir.`terraform init` | DevOps engenheiro | 
| Pré-visualize as alterações. | É possível visualizar previamente as alterações que o Terraform fará na infraestrutura antes que ela seja implantada. Para validar se o Terraform fará as alterações conforme necessário, execute o comando a seguir.`terraform plan` | DevOps engenheiro | 
| Coloque em prática as ações propostas. | Para verificar se os resultados do comando `terraform plan` estão conforme o esperado, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps engenheiro | 
| Limpe a infraestrutura. | Para limpar a infraestrutura que você criou, use o comando a seguir.`terraform destroy`Para confirmar o comando destroy, digite`yes`. | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute e teste a função do Lambda. | Para verificar se a implantação ocorreu com êxito, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Os resultados da execução mostram a saída da função. | DevOps engenheiro | 
| Veja os resultados da função Lambda. | Nesse padrão, uma EventBridge regra executa a função Lambda uma vez por dia. Para visualizar os resultados da função Lambda, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)No CloudWatch console, a página de **grupos de registros** mostra os resultados da função Lambda. | DevOps engenheiro | 

### Limpar a infraestrutura após o uso
<a name="clean-up-infrastructure-after-use"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe a infraestrutura. | Para limpar a infraestrutura que você criou, use o comando a seguir.`terraform destroy`Para confirmar o comando destroy, digite`yes`. | DevOps engenheiro | 
| Realize uma verificação após o procedimento de limpeza. | Verifique se os recursos foram removidos com êxito. | DevOps engenheiro | 

## Solução de problemas
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Se você tentar remover o computador do AD, receberá a mensagem “Acesso negado”. O computador do AD não pode ser removido porque, por padrão, a ação tenta remover dois endereços IP privados que estão conectados como parte dos serviços do AD. | Para evitar esse erro, use a operação Python a seguir para ignorar os dois primeiros computadores ao listar as diferenças entre a saída de um computador AD e a saída da sua máquina executando o Windows.<pre>Difference = Difference[2:]</pre> | 
| Quando o Lambda executa um PowerShell script em um servidor Windows, ele espera que os módulos do Active Directory estejam disponíveis por padrão. Se os módulos não estiverem disponíveis, uma função Lambda cria um erro que indica “Get- não AdComputer está instalado na instância”. | Para evitar esse erro, instale os módulos necessários usando os dados do usuário das EC2 instâncias. Use o [EC2WindowsUserdata](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/EC2WindowsUserdata)script que está no GitHub repositório desse padrão. | 

## Recursos relacionados
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources"></a>

**AWS documentação**
+ [Amazon EventBridge e AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Configurar permissões de instância obrigatórias para o Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Gerenciamento de identidade e acesso para Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Associe manualmente uma instância EC2 do Amazon Windows ao seu AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Trabalhando com políticas de IAM baseadas em identidade em AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)

**Outros recursos**
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentação do Terraform)
+ [Backend Configuration](https://developer.hashicorp.com/terraform/language/backend) (documentação do Terraform)
+ [Install Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) (documentação do Terraform)
+ [Python boto module](https://pypi.org/project/boto/) (repositório Python Package Index)
+ [Terraform binary download](https://www.terraform.io/downloads) (documentação do Terraform)

# Execute testes de unidade para trabalhos de ETL do Python AWS Glue usando a estrutura pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan e Vaidy Sankaran, da Amazon Web Services*

## Resumo
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Você pode executar testes unitários para trabalhos de extração, transformação e carregamento (ETL) do Python AWS Glue em um [ambiente de desenvolvimento local](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), mas replicar esses testes em um DevOps pipeline pode ser difícil e demorado. O teste unitário pode ser especialmente desafiador quando você está modernizando o processo de ETL de mainframe em AWS pilhas de tecnologia. Esse padrão mostra como simplificar os testes de unidade, mantendo intactas as funcionalidades existentes, evitando interrupções nas principais funcionalidades do aplicativo ao lançar novos atributos e mantendo um software de alta qualidade. Você pode usar as etapas e os exemplos de código nesse padrão para executar testes de unidade para trabalhos de ETL do Python AWS Glue usando a estrutura pytest em. AWS CodePipeline Você também pode usar esse padrão para testar e implantar vários AWS Glue trabalhos.

## Pré-requisitos e limitações
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Um URI de imagem do Amazon Elastic Container Registry (Amazon ECR) para AWS Glue sua biblioteca, baixado da Galeria Pública do [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ Terminal Bash (em qualquer sistema operacional) com um perfil para o alvo Conta da AWS e Região da AWS
+ [Python 3.10](https://www.python.org/downloads/) ou posterior
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Biblioteca [Moto](https://github.com/getmoto/moto) Python para testes Serviços da AWS

## Arquitetura
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

O diagrama a seguir descreve como incorporar testes unitários para processos de AWS Glue ETL baseados em Python em um pipeline típico AWS DevOps de escala empresarial.

![\[Teste unitário para processos de ETL do AWS Glue.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. No estágio de origem, AWS CodePipeline usa um bucket versionado do Amazon Simple Storage Service (Amazon S3) para armazenar e gerenciar ativos de código-fonte. Esses ativos incluem um exemplo de job (`sample.py`) de ETL em Python, um arquivo de teste unitário (`test_sample.py`) e um modelo. AWS CloudFormation Em seguida, CodePipeline transfere o código mais recente da ramificação principal para o AWS CodeBuild projeto para processamento adicional.

1. No estágio de criação e publicação, o código mais recente do estágio de origem anterior é testado em unidade com a ajuda de uma imagem AWS Glue pública do Amazon ECR. Em seguida, o relatório do teste é publicado nos grupos de CodeBuild relatórios. A imagem do contêiner no repositório público do Amazon ECR para AWS Glue bibliotecas inclui todos os binários necessários para executar tarefas ETL [PySparkbaseadas em](https://spark.apache.org/docs/latest/api/python/) testes unitários localmente. AWS Glue O repositório público de contêineres tem três tags de imagem, uma para cada versão suportada pelo AWS Glue. Para fins de demonstração, esse padrão usa a tag de imagem `glue_libs_4.0.0_image_01`. Para usar essa imagem de contêiner como imagem de tempo de execução em CodeBuild, copie o URI da imagem que corresponde à tag de imagem que você pretende usar e, em seguida, atualize o `pipeline.yml` arquivo no GitHub repositório do `TestBuild` recurso.

1. Na fase de implantação, o CodeBuild projeto é lançado e ele publica o código em um bucket do Amazon S3 se todos os testes forem aprovados.

1. O usuário implanta a AWS Glue tarefa usando o CloudFormation modelo na `deploy` pasta.

## Ferramentas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Serviços da AWS**
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)é um serviço ETL totalmente gerenciado. Ele ajuda você a categorizar de forma confiável, limpar, enriquecer e mover dados de forma confiável entre armazenamento de dados e fluxos de dados.
+ [O Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e desempenho líderes do setor.

**Outras ferramentas**
+ [Python](https://www.python.org/) é uma linguagem de programação interpretada de alto nível e de uso geral.
+ [Moto](https://github.com/getmoto/moto) é uma biblioteca Python para testes. Serviços da AWS
+ O [Pytest](https://github.com/pytest-dev/pytest) é uma estrutura para escrever pequenos testes unitários que se escalam para suportar testes funcionais complexos para aplicativos e bibliotecas.
+ A [biblioteca Python ETL](https://github.com/awslabs/aws-glue-libs) for AWS Glue é um repositório para bibliotecas Python que são usadas no desenvolvimento local de trabalhos em lote para. PySpark AWS Glue

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). O repositório inclui os seguintes recursos:
+ Um exemplo de AWS Glue tarefa baseada em Python na pasta `src`
+ Casos de teste de unidade associados (criados usando a estrutura pytest) na pasta `tests`
+ Um CloudFormation modelo (escrito em YAML) na pasta `deploy`

## Práticas recomendadas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Segurança para CodePipeline recursos**

É uma prática recomendada usar criptografia e autenticação para os repositórios de origem que se conectam aos seus pipelines em. CodePipeline Para obter mais informações, consulte [as melhores práticas de segurança](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) na CodePipeline documentação.

**Monitoramento e registro de CodePipeline recursos**

É uma prática recomendada usar os recursos de AWS registro para determinar quais ações os usuários realizam em sua conta e quais recursos eles usam. Os arquivos de log exibem o seguinte:
+ Data e hora das ações.
+ Endereço IP de origem das ações
+ As ações que falharam devido a permissões inadequadas.

Os recursos de registro estão disponíveis no AWS CloudTrail Amazon CloudWatch Events. Você pode usar CloudTrail para registrar chamadas de AWS API e eventos relacionados feitos por ou em nome do seu Conta da AWS. Para obter mais informações, consulte [Logging CodePipeline API de chamadas AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) na CodePipeline documentação.

Você pode usar CloudWatch Eventos para monitorar seus Nuvem AWS recursos e aplicativos em execução AWS. Você também pode criar alertas em CloudWatch Eventos. Para obter mais informações, consulte [Monitoramento de CodePipeline eventos](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) na CodePipeline documentação.

## Épicos
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Implantar o código-fonte
<a name="deploy-the-source-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Prepare o arquivo de código para implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps engenheiro | 
| Crie a CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)A pilha cria uma CodePipeline visualização usando o Amazon S3 como fonte. Nas etapas acima, o pipeline é **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps engenheiro | 

### Execute os testes de unidade
<a name="run-the-unit-tests"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute os testes de unidade no pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps engenheiro | 

### Limpe todos os AWS recursos
<a name="clean-up-all-aws-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe os recursos no seu ambiente. | Para evitar custos adicionais de infraestrutura, certifique-se de excluir a pilha depois de experimentar os exemplos fornecidos nesse padrão.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps engenheiro | 

## Solução de problemas
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A função CodePipeline de serviço não pode acessar o bucket do Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline retorna um erro informando que o bucket do Amazon S3 não está versionado. | CodePipeline exige que o bucket de origem do Amazon S3 seja versionado. Ative o controle de versão em seu bucket do Amazon S3. Para obter instruções, consulte [Habilitar o controle de versão em buckets.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html) | 

## Recursos relacionados
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Desenvolvendo e testando AWS Glue trabalhos localmente](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Mais informações
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

Além disso, você pode implantar os AWS CloudFormation modelos usando o AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte [Implantação rápida de modelos com transformações](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) na CloudFormation documentação.

# Configure um CI/CD pipeline usando a AWS CodePipeline e o AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder e Cizer Pereira, Amazon Web Services*

## Início
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

Automatizar seu processo de criação e lançamento de software com integração e entrega contínuas (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDincorpora uma cultura, um conjunto de princípios operacionais e um [conjunto de práticas que ajudam as equipes de](https://aws.amazon.com/devops/#cicd) desenvolvimento de aplicativos a entregar alterações de código com mais frequência e confiabilidade). A implementação também é conhecida como *pipeline de CI/CD*.

Esse padrão define um pipeline reutilizável de integração contínua e entrega contínua (CI/CD) na Amazon Web Services (AWS) com um repositório da AWS. CodeCommit O CodePipeline pipeline da AWS é escrito usando o [AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Usando CodePipeline, você pode modelar os diferentes estágios do seu processo de lançamento de software por meio da interface do AWS Management Console, da AWS Command Line Interface (AWS CLI), da CloudFormation AWS ou da AWS. SDKs Esse padrão demonstra a implementação CodePipeline e seus componentes usando o AWS CDK. Além da estrutura de bibliotecas, o AWS CDK inclui um kit de ferramentas (o comando `cdk` CLI), que é a principal ferramenta para interagir com seu aplicativo do AWS CDK. Entre outras funções, o kit de ferramentas oferece a capacidade de converter uma ou mais pilhas em CloudFormation modelos e implantá-las em uma conta da AWS.

O pipeline inclui testes para validar a segurança de suas bibliotecas de terceiros e ajuda a garantir o lançamento rápido e automatizado nos ambientes especificados. Você pode aumentar a segurança geral de seus aplicativos submetendo-os a um processo de validação.

A intenção desse padrão é acelerar o uso de CI/CD pipelines para implantar seu código e, ao mesmo tempo, garantir que os recursos implantados sigam as DevOps melhores práticas. Depois de implementar o [código de exemplo](https://github.com/aws-samples/aws-codepipeline-cicd), você terá uma [AWS CodePipeline](https://aws.amazon.com/codepipeline/) com processos de linting, testes, verificação de segurança, implantação e pós-implantação. Esse padrão também inclui etapas para o Makefile. Usando um Makefile, os desenvolvedores podem reproduzir CI/CD etapas localmente e aumentar a velocidade do processo de desenvolvimento.

## Pré-requisitos e limitações
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um entendimento básico sobre o seguinte:
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limitações**

Esse padrão usa o [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript apenas para. Ela não abrange outras linguagens suportadas pelo AWS CDK.

**Versões do produto**

Certifique-se de usar as versões mais recentes destas ferramentas:
+ AWS Command Line Interface (AWS CLI)
+ cfn\$1nag
+ git-remote-codecommit
+ Node.js

## Arquitetura
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Arquitetura de destino**

O pipeline é acionado por uma alteração no CodeCommit repositório da AWS (`SampleRepository`). No início, CodePipeline cria artefatos, se atualiza e inicia o processo de implantação. O pipeline resultante implanta uma solução em três ambientes independentes:
+ Dev – Verificação de código em três etapas no ambiente de desenvolvimento ativo
+ Teste: ambiente de teste de integração e regressão
+ Prod: ambiente de produção

As três etapas incluídas no estágio de desenvolvimento são linting, segurança e testes unitários. Essas etapas são executadas paralelamente para acelerar o processo. Para garantir que o pipeline forneça somente artefatos funcionais, sua execução será interrompida sempre que uma etapa do processo falhar. Depois de uma implantação em fase de desenvolvimento, o pipeline executa testes de validação para verificar os resultados. Em caso de sucesso, o pipeline implantará os artefatos no ambiente de teste, que contém a validação pós-implantação. A etapa final é implantar os artefatos no ambiente do Prod.

O diagrama a seguir mostra o fluxo de trabalho do CodeCommit repositório até os processos de criação e atualização executados por CodePipeline, as três etapas do ambiente de desenvolvimento e a implantação e validação subsequentes em cada um dos três ambientes.

![\[O ambiente de desenvolvimento inclui análise de código, teste de segurança e teste de unidade, todos com processos de implantação e validação.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Ferramentas
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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. Nesse padrão, os CloudFormation modelos podem ser usados para criar um CodeCommit repositório e um pipeline de CodePipeline CI/CD.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) é um CI/CD serviço que ajuda você a modelar e configurar rapidamente os diferentes estágios de um lançamento de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ A ‭[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

**Outras ferramentas**
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) é uma ferramenta de código aberto que procura padrões em CloudFormation modelos para identificar possíveis problemas de segurança.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)é um utilitário para enviar e extrair código de CodeCommit repositórios estendendo o Git.
+ [O Node.js](https://nodejs.org/en/docs/) é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.

**Código **

O código desse padrão está disponível no repositório [ CodePipeline de CI/CD práticas GitHub da AWS](https://github.com/aws-samples/aws-codepipeline-cicd).

## Práticas recomendadas
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Analise os recursos, como políticas do AWS Identity and Access Management (IAM), para confirmar se eles estão alinhados com as melhores práticas organizacionais.

## Épicos
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Instalar as ferramentas
<a name="install-tools"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale ferramentas no Linux ou no macOS. | Se você estiver usando macOS ou Linux, poderá instalar as ferramentas executando o seguinte comando no terminal de sua preferência ou usando o [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) para Linux.<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps engenheiro | 
| Configure a AWS CLI. | Para configurar a AWS CLI, use as instruções para seu sistema operacional:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps engenheiro | 

### Configure a implantação inicial
<a name="set-up-the-initial-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça download ou clonagem do código. | Para obter o código usado por esse padrão, siga um destes procedimentos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre>Remova o diretório `.git` do repositório clonado.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre>Posteriormente, você usará um CodeCommit repositório AWS recém-criado como origem remota. | DevOps engenheiro | 
| Conecte-se à conta da AWS. | Você pode se conectar usando um token de segurança temporário ou autenticação de zona de pouso. Para confirmar que você está usando a conta e a região da AWS corretas, execute os comandos a seguir.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps engenheiro | 
| Faça o bootstrap do ambiente. | Para fazer o bootstrap de um ambiente AWS CDK, execute os seguintes comandos:<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Depois de inicializar o ambiente com sucesso, a saída a seguir deve ser exibida.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre>Para obter mais informações sobre o bootstrapping do AWS CDK, consulte a [documentação do AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html). | DevOps engenheiro | 
| Sintetize um modelo. | Para sintetizar um aplicativo do AWS CDK, use o comando `cdk synth`.<pre>npm run cdk synth</pre>Você verá a saída a seguir.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps engenheiro | 
| Implante a CodePipeline pilha. | Agora que você inicializou e sintetizou o CloudFormation modelo, você pode implantá-lo. A implantação criará o CodePipeline pipeline e um CodeCommit repositório, que serão a fonte e o gatilho do pipeline.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre>Depois de executar o comando, você deverá ver uma implantação bem-sucedida da CodePipeline pilha e das informações de saída. `CodePipeline.RepositoryName`Fornece o nome do CodeCommit repositório na conta da AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps engenheiro | 
| Configure o CodeCommit repositório e a ramificação remotos. | Depois de uma implantação bem-sucedida, CodePipeline iniciará a primeira execução do pipeline, que você pode encontrar no [ CodePipeline console da AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Como o AWS CDK e CodeCommit não iniciam uma ramificação padrão, essa execução inicial do pipeline falhará e retornará a seguinte mensagem de erro.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre>Para corrigir esse erro, configure uma origem remota como `SampleRepository` e crie a ramificação `main` necessária.<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps engenheiro | 

### Teste o pipeline implantado CodePipeline
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Confirme uma alteração para ativar o pipeline. | Depois de uma implantação inicial bem-sucedida, você deve ter um CI/CD pipeline completo com uma `main` ramificação `SampleRepository` como ramificação de origem. Assim que você confirmar as alterações na ramificação `main`, o pipeline iniciará e executará a seguinte sequência de ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps engenheiro | 

### Teste localmente usando um Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o processo de desenvolvimento usando um Makefile. | Você pode executar todo o pipeline localmente usando o comando`make` ou pode executar uma etapa individual (por exemplo, `make linting`).Para testar o uso de `make`, execute as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Desenvolvedor de aplicativos, DevOps engenheiro | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua os recursos do aplicativo AWS CDK. | Para limpar seu aplicativo AWS CDK, execute o comando a seguir.<pre>cdk destroy --all</pre>Esteja ciente de que os buckets do Amazon Simple Storage Service (Amazon S3) criados durante a inicialização não são excluídos automaticamente. Eles precisam de uma política de retenção que permita a exclusão, ou você precisa excluí-los manualmente na sua conta da AWS. | DevOps engenheiro | 

## Solução de problemas
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O modelo não está funcionando conforme o esperado. | Se algo der errado e o modelo não estiver funcionando, verifique se você tem o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Recursos relacionados
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Introdução às tarefas comuns do Centro de Identidade do IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentação da AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

# Configuração do registro em log centralizado em escala empresarial usando o Terraform
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Aarti Rajput, Yashwant Patel e Nishtha Yadav, Amazon Web Services*

## Resumo
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

O registro em log centralizado é vital para a infraestrutura de nuvem de uma organização, pois fornece visibilidade de suas operações, segurança e conformidade. À medida que sua organização expande seu AWS ambiente em várias contas, uma estratégia estruturada de gerenciamento de registros se torna fundamental para executar operações de segurança, atender aos requisitos de auditoria e alcançar a excelência operacional.

Esse padrão fornece uma estrutura escalável e segura para centralizar registros de vários serviços Contas da AWS e, a fim de permitir o gerenciamento de registros em escala empresarial em implantações complexas. AWS A solução é automatizada usando o Terraform, que é uma ferramenta de infraestrutura como código (IaC) HashiCorp que garante implantações consistentes e reproduzíveis e minimiza a configuração manual. Ao combinar o Amazon CloudWatch Logs, o Amazon Data Firehose e o Amazon Simple Storage Service (Amazon S3), você pode implementar um pipeline robusto de agregação e análise de logs que fornece:
+ Gerenciamento centralizado de registros em toda a sua organização em AWS Organizations
+ Coleta automatizada de logs com controles de segurança integrados
+ Processamento de logs escalável e armazenamento durável
+ Relatórios de conformidade e trilhas de auditoria simplificados
+ Monitoramento e insights operacionais em tempo real

A solução coleta registros de contêineres e funções do Amazon Elastic Kubernetes Service (Amazon EKS AWS Lambda ), funções e instâncias de banco de dados do Amazon Relational Database Service (Amazon RDS) por meio de registros. CloudWatch Ele encaminha automaticamente esses registros para uma conta de registro dedicada usando filtros de CloudWatch assinatura. O Firehose gerencia o pipeline de fluxo de logs de throughput ao Amazon S3 para armazenamento em longo prazo. O Amazon Simple Queue Service (Amazon SQS) é configurado para receber notificações de eventos do Amazon S3 na criação de objetos. Isso permite a integração com serviços de analytics, incluindo:
+ Amazon OpenSearch Service para pesquisa de registros, visualização e análise em tempo real
+ Amazon Athena para consultas baseadas em SQL
+ Amazon EMR para processamento em grande escala
+ Lambda para transformação personalizada
+ Amazon Quick Sight para painéis

Todos os dados são criptografados usando AWS Key Management Service (AWS KMS), e toda a infraestrutura é implantada usando o Terraform para uma configuração consistente em todos os ambientes.

Essa abordagem de registro centralizado permite que as organizações melhorem sua postura de segurança, mantenham os requisitos de conformidade e otimizem a eficiência operacional em toda a AWS infraestrutura.

## Pré-requisitos e limitações
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**Pré-requisitos **
+ Uma zona de pouso para sua organização que é criada usando o [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)
+ [Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html), implantado e configurado com as contas necessárias
+ [Terraform](https://developer.hashicorp.com/terraform/downloads) para provisionar a infraestrutura
+ AWS Identity and Access Management Funções e políticas [(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) para acesso entre contas

Para obter instruções sobre como configurar AWS Control Tower contas AFT e Application, consulte a [seção Epics](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics).

**Contas obrigatórias**

Sua organização AWS Organizations deve incluir as seguintes contas:
+ **Conta de aplicativo** — Uma ou mais contas de origem nas quais Serviços da AWS (Amazon EKS, Lambda e Amazon RDS) são executadas e geram registros
+ **Conta de arquivamento de logs**: uma conta dedicada para armazenamento e gerenciamento centralizados de logs

**Versões do produto**
+ [AWS Control Tower versão 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) ou posterior
+ [Terraform versão 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) ou versões posteriores

## Arquitetura
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

O diagrama a seguir ilustra uma arquitetura de registro AWS centralizada que fornece uma solução escalável para coletar, processar e armazenar registros de várias contas de aplicativos em uma conta dedicada do Log Archive. Essa arquitetura gerencia com eficiência os registros de Serviços da AWS, incluindo Amazon RDS, Amazon EKS e Lambda, e os encaminha por meio de um processo simplificado para os buckets regionais do S3 na conta do Log Archive.

![\[Arquitetura de registro em log centralizado da AWS para coletar logs de várias contas de aplicações.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


O fluxo de trabalho inclui cinco processos:

1. **Processo de fluxo de logs**
   + O processo de fluxo de registros começa nas contas do aplicativo, onde são Serviços da AWS gerados vários tipos de registros, como registros gerais, de erros, de auditoria, de consultas lentas do Amazon RDS, registros do plano de controle do Amazon EKS e registros de execução de funções e erros do Lambda.
   + CloudWatch serve como ponto de coleta inicial. Ele reúne esses logs no nível do grupo de logs em cada conta de aplicação.
   + Em CloudWatch, [os filtros de assinatura](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) determinam quais registros devem ser encaminhados para a conta central. Esses filtros oferecem controle granular sobre o encaminhamento de logs, para que você possa especificar padrões de log exatos ou fluxos de log completos para centralização.

1. **Transferência de logs entre contas**
   + Os registros são movidos para a conta do Log Archive. CloudWatch os filtros de assinatura facilitam a transferência entre contas e preservam o contexto regional.
   + A arquitetura estabelece vários fluxos paralelos para lidar com diferentes fontes de log de forma eficiente, a fim de garantir performance e escalabilidade ideais.

1. **Processamento de logs na conta de arquivamento de logs**
   + Na conta de arquivamento de logs, o Firehose processa os fluxos de logs recebidos.
   + Cada região mantém fluxos de entrega dedicados do Firehose que podem transformar, converter ou enriquecer os logs conforme necessário.
   + Esses fluxos do Firehose entregam os logs processados aos buckets do S3 na conta de arquivamento de logs, que está localizada na mesma região das contas de aplicações de origem (Região A no diagrama) para manter os requisitos de soberania de dados.

1. **Notificações e fluxos de trabalho adicionais**
   + Quando os logs chegam aos buckets do S3 de destino, a arquitetura implementa um sistema de notificações usando o Amazon SQS.
   + As filas regionais de SQS permitem o processamento assíncrono e podem acionar fluxos de trabalho adicionais, analytics ou sistemas de alertas com base nos logs armazenados.

1. **AWS KMS para segurança**

   A arquitetura é incorporada AWS KMS para fins de segurança. AWS KMS fornece chaves de criptografia para os buckets do S3. Isso garante que todos os logs armazenados mantenham a criptografia em repouso, assegurando a criptografia regional para atender aos requisitos de residência de dados.

## Ferramentas
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**Serviços da AWS**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) é um serviço de monitoramento e observabilidade que coleta dados operacionais e de monitoramento na forma de registros, métricas e eventos. Ele fornece uma visão unificada dos AWS recursos, aplicativos e serviços que são executados na AWS e em servidores locais.
+ CloudWatch Os [filtros de assinatura de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html) são expressões que correspondem a um padrão nos eventos de registro recebidos e entregam eventos de registro correspondentes ao AWS recurso especificado para processamento ou análise adicionais.
+ AWS Control Tower O [Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) configura um pipeline do Terraform para ajudá-lo a provisionar e personalizar contas em. AWS Control Tower O AFT fornece provisionamento de contas baseado em Terraform, permitindo que você administre suas contas com. AWS Control Tower
+ [O Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) fornece dados de streaming em tempo real para destinos como Amazon S3, Amazon Redshift e Amazon Service. OpenSearch Ele faz o dimensionamento automático para corresponder ao throughput de seus dados, e não requer administração contínua.
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) é um serviço gerenciado de orquestração de contêineres que facilita a implantação, o gerenciamento e o dimensionamento de aplicações em contêineres usando o Kubernetes. Ele gerencia automaticamente a disponibilidade e a escalabilidade dos nós do ambiente de gerenciamento do Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) cria e controla chaves de criptografia para criptografar seus dados. AWS KMS se integra a outros Serviços da AWS para ajudá-lo a proteger os dados que você armazena com esses serviços.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação com tecnologia sem servidor que permite executar código sem provisionar nem gerenciar servidores. Ele dimensiona automaticamente as aplicações executando o código em resposta a cada gatilho e cobra apenas pelo tempo de computação usado.
+ O [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) é um serviço de banco de dados relacional gerenciado que facilita a configuração, a operação e o dimensionamento de um banco de dados relacional na nuvem. Ele fornece recursos econômicos e redimensionáveis enquanto automatiza tarefas administrativas demoradas.
+ O [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) é um serviço de enfileiramento de mensagens que permite desacoplar e dimensionar microsserviços, sistemas distribuídos e aplicações com tecnologia sem servidor. Ele elimina a complexidade de gerenciar e operar o middleware orientado a mensagens.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que oferece escalabilidade, disponibilidade de dados, segurança e performance. Ele pode armazenar e recuperar qualquer quantidade de dados, de qualquer lugar na web.

**Outras ferramentas**
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Código **

O código desse padrão está disponível no repositório de [registro GitHub centralizado](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform).

## Práticas recomendadas
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ Use [vários Contas da AWS em uma única organização em AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html). Essa prática permite o gerenciamento centralizado e o registro em log padronizado em todas as contas.
+ Configure [buckets do S3 com versionamento, políticas de ciclo de vida e replicação entre regiões](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html). Implemente registro em log de acessos e criptografia para fins de segurança e conformidade.
+ Implemente [padrões de registro em log comuns usando o formato JSON](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) com campos e carimbos de data/hora padrão. Use uma estrutura de prefixo e correlação consistentes IDs para facilitar o rastreamento e a análise.
+ Habilite [controles de segurança com AWS KMS criptografia](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) e acesso com privilégios mínimos. Mantenha o AWS CloudTrail monitoramento e a rotação regular de chaves para aumentar a segurança.
+ Configure [CloudWatch métricas e alertas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) para rastreamento de entrega. Monitore os custos e a performance com notificações automatizadas.
+ Configure as [políticas de retenção do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) para atender aos requisitos de conformidade e habilite o registro em log de acesso ao servidor do Amazon S3 para rastrear todas as solicitações feitas aos buckets do S3. Mantenha a documentação das regras de ciclo de vida e políticas de bucket do S3. Realize avaliações periódicas dos logs de acesso, permissões de buckets e configurações de armazenamento para ajudar a garantir a conformidade e as [práticas recomendadas de segurança](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Épicos
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### Contas de configuração AWS Control Tower, AFT e de aplicativos
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure um AWS Control Tower ambiente com o AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrador da AWS | 
| Habilite o compartilhamento de recursos na organização. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrador da AWS | 
| Verifique ou provisione contas de aplicações. | Para provisionar novas contas de aplicações para seu caso de uso, crie-as por meio do AFT. Para obter mais informações, consulte [Provisionar uma nova conta com o AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) na AWS Control Tower documentação. | Administrador da AWS | 

### Definir arquivos de configuração para contas de aplicações
<a name="set-up-configuration-files-for-application-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o conteúdo da pasta `Application_account` para o repositório `aft-account-customizations`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Analise e edite os parâmetros de entrada para configurar a conta de aplicação. | Nesta etapa, você configura o arquivo de configuração para criar recursos em contas de aplicativos, incluindo grupos de CloudWatch log, filtros de CloudWatch assinatura, funções e políticas do IAM e detalhes de configuração das funções Amazon RDS, Amazon EKS e Lambda.No seu repositório `aft-account-customizations`, na pasta `Application_account`, configure os parâmetros de entrada no arquivo `terraform.tfvars` com base nos requisitos da sua organização:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 

### Definir arquivos de configuração para a conta de arquivamento de logs
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o conteúdo da pasta `Log_archive_account` para o repositório `aft-account-customizations`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Analise e edite os parâmetros de entrada para configurar a conta de arquivamento de logs. | Nesta etapa, você define o arquivo de configuração para criar recursos na conta de arquivamento de logs, incluindo fluxos de entrega do Firehose, buckets do S3, filas do SQS e políticas e perfis do IAM.Na pasta `Log_archive_account` do seu repositório `aft-account-customizations`, configure os parâmetros de entrada no arquivo `terraform.tfvars` com base nos requisitos da sua organização:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 

### Executar comandos do Terraform para provisionar recursos
<a name="run-terraform-commands-to-provision-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Opção 1: implante os arquivos de configuração do Terraform pelo AFT. | No AFT, o pipeline do AFT é acionado depois que você envia o código com as alterações de configuração para o GitHub `aft-account-customizations` repositório. O AFT detecta automaticamente as alterações e inicia o processo de personalização da conta.Depois de fazer alterações nos arquivos do Terraform (`terraform.tfvars`), confirme e envie suas alterações para o seu repositório `aft-account-customizations`:<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>Se você estiver usando uma ramificação diferente (como `dev`), substitua `main` pelo nome da ramificação. | DevOps engenheiro | 
| Opção 2: implante o arquivo de configuração do Terraform manualmente. | Se você não estiver usando o AFT ou se quiser implantar a solução manualmente, poderá usar os seguintes comandos do Terraform nas pastas `Application_account` e `Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 

### Validar recursos
<a name="validate-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique os filtros de assinatura. | Para verificar se os filtros de assinatura encaminham os logs corretamente dos grupos de logs da conta de aplicação para a conta de arquivamento de logs:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Verifique os fluxos do Firehose. | Para verificar se os fluxos do Firehose na conta de arquivamento de logs processam os logs de aplicações corretamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Valide os buckets do S3 centralizados. | Para verificar se os buckets do S3 centralizados recebem e organizam os logs adequadamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Valide as filas do SQS. | Para verificar se as filas do SQS recebem notificações de novos arquivos de log:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Opção 1: desative o arquivo de configuração do Terraform do AFT. | Quando você remove os arquivos de configuração do Terraform e envia as alterações, o AFT inicia automaticamente o processo de remoção de recursos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 
| Opção 2: limpe os recursos do Terraform manualmente. | Se você não estiver usando o AFT ou se quiser limpar os recursos manualmente, use os seguintes comandos do Terraform nas pastas `Application_account` e `Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps engenheiro | 

## Solução de problemas
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O destino dos CloudWatch registros não foi criado ou está inativo. | Valide o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| O filtro de assinatura falhou ou está travado no status pendente. | Verifique o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| O fluxo de entrega do Firehose não mostra registros de entrada. | Verifique o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## Recursos relacionados
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Configuração da infraestrutura do Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) (documentação do Terraform)
+ [Implante o AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html) (AWS Control Tower documentação)
+ [Tutorial do IAM: delegue o acesso Contas da AWS usando funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) () IAMdocumentation

# Configure a end-to-end criptografia para aplicativos no Amazon EKS usando cert-manager e Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa e Vasanth Jeyaraj, Amazon Web Services*

## Resumo
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

A implementação da end-to-end criptografia pode ser complexa e você precisa gerenciar certificados para cada ativo em sua arquitetura de microsserviços. Embora você possa encerrar a conexão Transport Layer Security (TLS) na borda da rede Amazon Web Services (AWS) com um Network Load Balancer ou Amazon API Gateway, algumas organizações exigem criptografia. end-to-end

Esse padrão usa o controlador do Ingress NGINX para entrada. Isso ocorre porque quando você cria uma entrada do Kubernetes, o recurso de entrada usa um Network Load Balancer. O Network Load Balancer não permite fazer o upload de certificados de cliente. Portanto, você não pode obter o TLS mútuo com a entrada do Kubernetes.

Esse padrão é destinado a organizações que exigem autenticação mútua entre todos os microsserviços em seus aplicativos. O TLS mútuo reduz a carga de manter nomes de usuário ou senhas e também pode usar a estrutura de segurança turnkey. A abordagem desse padrão é compatível se sua organização tiver um grande número de dispositivos conectados ou precisar cumprir rígidas diretrizes de segurança.

Esse padrão ajuda a aumentar a postura de segurança da sua organização implementando end-to-end criptografia para aplicativos executados no Amazon Elastic Kubernetes Service (Amazon EKS). Esse padrão fornece um exemplo de aplicativo e código na GitHub [End-to-end criptografia no repositório Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) para mostrar como um microsserviço é executado com end-to-end criptografia no Amazon EKS. A abordagem do padrão usa o [gerenciador de certificados](https://cert-manager.io/docs/), um complemento do Kubernetes, com o [Let's Encrypt](https://letsencrypt.org/) como autoridade de certificação (CA). O Let's Encrypt é uma solução econômica para gerenciar certificados e fornece certificados gratuitos válidos por 90 dias. O Gerenciador de certificados automatiza o provisionamento sob demanda e a alternância de certificados quando um novo microsserviço é implantado no Amazon EKS. 

**Público-alvo**

Esse padrão é recomendado para usuários com experiência com Kubernetes, TLS, Amazon Route 53 e Sistema de Nomes de Domínio (DNS).

## Pré-requisitos e limitações
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um cluster do Amazon EKS existente.
+ AWS Command Line Interface (AWS CLI) versão 1.7 ou superior, instalada e configurada no macOS, Linux ou Windows
+ O utilitário de linha de comando `kubectl`, instalado e configurado para acessar o cluster Amazon EKS. Para obter mais informações, consulte [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS.
+ O nome de um DNS existente para testar o aplicativo. Para obter mais informações, consulte [Registrar nomes de domínio usando o Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) na documentação do Amazon Route 53. 
+ A versão mais recente do [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) instalada em sua máquina local. Para obter mais informações sobre isso, consulte [Usando o Helm com o Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) na documentação do Amazon EKS e no repositório do GitHub [Helm](https://github.com/helm/helm). 
+ A GitHub [End-to-end criptografia no repositório Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), clonada em sua máquina local. 
+ Substitua os seguintes valores nos `trustpolicy.json` arquivos `policy.json` e da GitHub [End-to-end criptografia clonada no repositório Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<account number>`: substitua pelo ID da conta da AWS para a conta na qual você deseja implantar a solução. 
  + `<zone id>`: substitua pelo ID de zona do Route 53 do nome de domínio. 
  + `<node_group_role>`: substitua pelo nome do AWS Identity and Access Management perfil do (IAM) associado aos nós do Amazon EKS.
  + `<namespace>`: substitua pelo namespace Kubernetes no qual você implanta o controlador do Ingress NGINX e o aplicativo de amostra.
  + `<application-domain-name>`: substitua pelo nome de domínio DNS do Route 53.

**Limitações**
+ Esse padrão não descreve como alternar certificados e apenas demonstra como usar certificados com microsserviços no Amazon EKS. 

## Arquitetura
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho para configurar criptografia em aplicações no Amazon EKS usando “cert-manager” e “Let’s Encrypt”.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Um cliente envia uma solicitação para acessar o aplicativo para o nome DNS.

1. O registro do Route 53 é um CNAME para o Network Load Balancer.

1. O Network Load Balancer encaminha a solicitação para o controlador do Ingress NGINX que está configurado com um receptor TLS. A comunicação entre o controlador do Ingress NGINX e o Network Load Balancer segue o protocolo HTTPS.

1. O controlador do Ingress NGINX executa o roteamento baseado em caminhos conforme a solicitação do cliente ao serviço do aplicativo.

1. O serviço do aplicativo encaminha a solicitação para o pod do aplicativo. O aplicativo é projetado para usar o mesmo certificado chamando segredos.

1. Os pods executam o aplicativo de amostra usando os certificados do gerenciador de certificados. A comunicação entre o controlador do Ingress NGINX e os pods usa HTTPS.


| 
| 
| Observação: o gerenciador de certificados é executado em seu próprio namespace. Ele usa uma função de cluster do Kubernetes para provisionar certificados como segredos em namespaces específicos. Você pode anexar esses namespaces aos pods de aplicativos e ao controlador do Ingress NGINX.  | 
| --- |

## Ferramentas
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Serviços da AWS**
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) é um serviço gerenciado que você pode usar para executar o Kubernetes na AWS , eliminando a necessidade de instalar, operar e manter seus próprios nós ou ambiente de gerenciamento ou nós do Kubernetes.
+ O [Balanceador de carga Elastic](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui automaticamente seu tráfego de entrada entre vários destinos, contêineres e endereços IP.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.

**Outras ferramentas**
+ O [gerenciador de certificado](https://cert-manager.io/docs/installation/supported-releases/) é um complemento do Kubernetes que solicita certificados, os distribui para contêineres do Kubernetes e automatiza a renovação de certificados.
+ [O controlador do Ingress NGINX](https://kubernetes.github.io/ingress-nginx/) é uma solução de gerenciamento de tráfego para aplicativos nativos de nuvem em Kubernetes e ambientes em contêineres.

## Épicos
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Crie e configure uma zona hospedada pública com o Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma zona hospedada no Route 53. | Faça login no Console de Gerenciamento da AWS, abra o console do Amazon Route 53, escolha **zona hospedada** e, em seguida, escolha **Criar zona hospedada**. Crie uma zona hospedada pública e registre o ID da zona. Para obter mais informações, consulte [Criar uma zona hospedada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) na documentação do Amazon Route 53.O ACME DNS01 usa o provedor de DNS para publicar um desafio, permitindo que o “cert-manager” emita o certificado. Esse desafio pede que você comprove que controla o DNS do seu nome de domínio colocando um valor específico em um registro TXT sob esse nome de domínio. Depois que o Let's Encrypt fornece um token ao seu cliente ACME, seu cliente cria um registro TXT derivado desse token e da chave da sua conta, e coloca esse registro em `_acme-challenge.<YOURDOMAIN>`. Depois, o Let's Encrypt consulta o DNS desse registro. Se encontrar uma correspondência, você pode continuar a emitir um certificado. | AWS DevOps | 

### Configure um perfil do IAM para permitir que o gerenciador de certificado acesse a zona hospedada pública
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a política do IAM para o gerenciador de certificado.  | É necessária uma política do IAM para fornecer ao gerenciador de certificado permissão para validar que você é proprietário do domínio Route 53. O `policy.json` exemplo de política do IAM é fornecido no `1-IAMRole` diretório na GitHub [End-to-end criptografia clonada no repositório Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Use o seguinte comando da AWS CLI para criar a política do IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Crie o perfil do IAM para gerenciador de certificado. | Após criar a política do IAM, é necessário criar um perfil do IAM. O exemplo `trustpolicy.json` de perfil do IAM é fornecido no diretório `1-IAMRole`.Use o seguinte comando da AWS CLI para criar o perfil do IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Anexe a política ao perfil. | Execute o comando a seguir para anexar a política do IAM ao perfil do IAM. Substitua `AWS_ACCOUNT_ID` pelo seu ID da sua conta da AWS. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Configure o controlador de entrada NGINX no Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o controlador de entrada NGINX. | Instale a versão mais recente do `nginx-ingress` usando o Helm. Você pode modificar a configuração `nginx-ingress` de acordo com seus requisitos antes de implantá-la. Esse padrão usa um Network Load Balancer anotado voltado para o interior e que está disponível no diretório `5-Nginx-Ingress-Controller`. Instale o controlador de entrada NGINX executando o seguinte comando Helm a partir do diretório `5-Nginx-Ingress-Controller`.`helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Verifique se o controlador do Ingress NGINX está instalado. | Digite o comando `helm list`. A saída deve mostrar que o controlador do Ingress NGINX está instalado. | AWS DevOps | 
| Crie um registro A da Route 53. | O registro A aponta para o Network Load Balancer criado pelo controlador do Ingress NGINX.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Configure o NGINX no VirtualServer Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o NGINX VirtualServer. | O VirtualServer recurso NGINX é uma configuração de balanceamento de carga que é uma alternativa ao recurso de entrada. A configuração para criar o VirtualServer recurso NGINX está disponível no `nginx_virtualserver.yaml` arquivo no `6-Nginx-Virtual-Server` diretório. Digite o comando a seguir `kubectl` para criar o recurso NGINX VirtualServer .`kubectl apply -f  nginx_virtualserver.yaml`Certifique-se de atualizar o nome de domínio da aplicação, o segredo do certificado e o nome do serviço da aplicação no arquivo `nginx_virtualserver.yaml`. | AWS DevOps | 
| Verifique se o NGINX VirtualServer foi criado. | Insira o comando a seguir `kubectl` para verificar se o VirtualServer recurso NGINX foi criado com sucesso.`kubectl get virtualserver`Verifique se a coluna `Host` corresponde ao nome de domínio da sua aplicação. | AWS DevOps | 
| Implante o servidor web NGINX com o TLS ativado. | Esse padrão usa um servidor web NGINX com TLS habilitado como aplicativo para testar a criptografia. end-to-end Os arquivos de configuração necessários para implantar o aplicativo de teste estão disponíveis no diretório `demo-webserver`. Execute o seguinte comando no `kubectl` para implantar o aplicativo.`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Verifique se os recursos do aplicativo de teste foram criados. | Insira os seguintes comandos `kubectl` para verificar se os recursos necessários foram criados para o aplicativo de teste:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Valide o aplicativo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Recursos relacionados
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Recursos da AWS**
+ [Criar registros usando o console do Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (documentação do Amazon Route 53)
+ [Como usar um Network Load Balancer com o controlador de entrada NGINX no Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (publicação no blog da AWS)

**Outros recursos**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (documentação do gerenciador de certificado)
+ [Como configurar o DNS01 Challenge Provider](https://cert-manager.io/docs/configuration/acme/dns01/) (documentação do gerenciador de certificado)
+ [Desafio do Let's Encrypt DNS](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (documentação do Let's Encrypt)

# Simplificação da implantação de aplicações multilocatário no Amazon EKS usando o Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate e Shrikant Patil, Amazon Web Services*

## Resumo
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Diversas empresas que fornecem produtos e serviços atuam em setores regulados por dados e devem preservar a separação de dados entre suas áreas internas. Este padrão descreve como você pode usar o recurso multilocatário no Amazon Elastic Kubernetes Service (Amazon EKS) para desenvolver uma plataforma de dados que garanta isolamento lógico e físico entre locatários ou usuários que compartilham um único cluster do Amazon EKS. O padrão oferece isolamento por meio das seguintes abordagens:
+ Isolamento entre namespaces no Kubernetes
+ Regras de controle de acesso com base em função (RBAC)
+ Políticas de rede
+ Cotas de recurso
+ AWS Identity and Access Management Funções (IAM) para contas de serviço (IRSA)

Além disso, a solução usa o Flux para garantir que a configuração do locatário permaneça imutável durante a implantação das aplicações. É possível implantar as aplicações do locatário especificando o repositório do locatário que contém o arquivo `kustomization.yaml` do Flux na sua configuração.

Este padrão realiza a implementação de:
+ Um AWS CodeCommit repositório, AWS CodeBuild projetos e um AWS CodePipeline pipeline, que são criados com a implantação manual de scripts do Terraform.
+ Componentes de rede e de computação necessários para hospedar os locatários. Eles são criados por meio CodePipeline e CodeBuild usando o Terraform.
+ Namespaces dos locatários, políticas de rede e cotas de recursos, os quais são configurados via chart do Helm.
+ Aplicações pertencentes a diferentes locatários, implantadas usando o Flux.

Recomendamos que você planeje e desenvolva cuidadosamente a própria arquitetura multilocatário com base em seus requisitos e considerações de segurança. Este padrão fornece um ponto de partida para a sua implementação.

## Pré-requisitos e limitações
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ AWS Command Line Interface [(AWS CLI) versão 2.11.4 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versão 0.12 ou versões posteriores, instalado em sua máquina local
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versão 3.0.0 ou versões posteriores
+ [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) versão 2.10 ou versões posteriores
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) versão 2.8.0 ou versões posteriores
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) versão 1.14 ou versões posteriores

**Limitações**
+ **Dependência de implantações manuais do Terraform:** a configuração inicial do fluxo de trabalho, incluindo a criação de CodeCommit repositórios, CodeBuild projetos e CodePipeline pipelines, depende de implantações manuais do Terraform. Isso introduz uma limitação potencial em termos de automação e escalabilidade, pois exige intervenção manual para alterações na infraestrutura.
+ **CodeCommit dependência do repositório:** o fluxo de trabalho depende dos CodeCommit repositórios como solução de gerenciamento de código-fonte e é fortemente acoplado a. Serviços da AWS

## Arquitetura
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Arquiteturas de destino**

Este padrão implanta três módulos para criar o pipeline e a infraestrutura de rede e de computação de uma plataforma de dados, conforme ilustrado nos diagramas a seguir.

*Arquitetura do pipeline:*

![\[Infraestrutura do pipeline para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arquitetura da rede:*

![\[Infraestrutura da rede para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arquitetura da computação:*

![\[Infraestrutura da computação para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Ferramentas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Serviços da AWS**
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)é um hub central que conecta nuvens privadas virtuais (VPCs) e redes locais.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ As[ políticas de rede da Cilium](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) fornecem suporte para as políticas do Kubernetes voltadas para as camadas 3 e 4. Essas políticas podem ser complementadas com políticas para a camada 7 para prover segurança de API em protocolos como HTTP, Kafka, gRPC e outros equivalentes.
+ O [Flux](https://fluxcd.io/) é uma ferramenta de entrega contínua (CD) baseada em Git que automatiza a implantação de aplicações no Kubernetes.
+ O [Helm](https://helm.sh/docs/) é um gerenciador de pacotes de código aberto para o Kubernetes que auxilia na instalação e no gerenciamento de aplicações no cluster do Kubernetes.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Práticas recomendadas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Para obter diretrizes e práticas recomendadas para o uso dessa implementação, consulte:
+ [Práticas recomendadas para a arquitetura multilocatário no Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentação do Flux](https://fluxcd.io/flux/get-started/)

## Épicos
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Criação de pipelines para as fases de desenvolvimento, teste e implantação do Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do projeto. | Clone o repositório GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) executando o seguinte comando em uma janela de terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Inicialize o bucket do S3 do Terraform e o Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Atualize os arquivos `run.sh` e `locals.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implante o módulo do pipeline. | Para criar os recursos do pipeline, execute manualmente os comandos do Terraform apresentados a seguir. Não há orquestração para executar esses comandos automaticamente.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Criação da infraestrutura de rede
<a name="create-the-network-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Iniciar o pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Após essa primeira execução, o pipeline é iniciado automaticamente sempre que você confirma uma alteração na ramificação principal do CodeCommit repositório.O pipeline inclui as seguintes [fases](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide os recursos criados por meio do módulo de rede. | Confirme se os seguintes AWS recursos foram criados após a implantação bem-sucedida do pipeline:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Criação da infraestrutura de computação
<a name="create-the-compute-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize `locals.tf` para permitir o acesso do CodeBuild projeto à VPC. | Para implantar os complementos para o cluster privado do Amazon EKS, o CodeBuild projeto deve ser anexado à VPC do Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Atualize os arquivos `buildspec` para desenvolver o módulo de computação. | Na pasta `templates`, em todos os arquivos YAML de `buildspec`, defina o valor da variável `TF_MODULE_TO_BUILD` de `network` para `compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Atualize o arquivo `values` para o chart do Helm de gerenciamento de locatários. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide os recursos de computação. | Depois de atualizar os arquivos nas etapas anteriores, CodePipeline inicia automaticamente. Confirme se ele criou os seguintes AWS recursos para a infraestrutura computacional:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Verificação do gerenciamento de locatários e de outros recursos
<a name="check-tenant-management-and-other-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide os recursos de gerenciamento de locatários no Kubernetes. | Execute os comandos apresentados a seguir para verificar se os recursos de gerenciamento de locatários foram criados com êxito com a ajuda do Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifique as implantações das aplicações dos locatários. | Execute os comandos apresentados a seguir para verificar se as aplicações dos locatários foram implantadas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Solução de problemas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Você recebe uma mensagem de erro semelhante a esta:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Siga estas etapas para solucionar o problema:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Recursos relacionados
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Amazon EKS Blueprints for Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guia de práticas recomendadas do Amazon EKS, seção de arquitetura multilocatário](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Site do Flux](https://fluxcd.io/)
+ [Site do Helm](https://helm.sh/)

## Mais informações
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

A seguir, apresentamos um exemplo de estrutura de repositório para a implantação das aplicações dos locatários:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```

# Desenvolvimento e implantação simplificados de bots do Amazon Lex usando um fluxo de trabalho automatizado
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam, Attila Dancso, Pavan Dusanapudi, Anand Jumnani e James O'Hara, Amazon Web Services*

## Resumo
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

Desenvolver e implantar bots conversacionais do Amazon Lex pode ser um desafio quando você está tentando gerenciar vários recursos, desenvolvedores e ambientes. Um fluxo de trabalho automatizado usando princípios de infraestrutura como código (IaC) pode ajudar a agilizar o processo. Este padrão pode ajudar a melhorar a produtividade dos desenvolvedores do Amazon Lex e permitir o gerenciamento eficiente do ciclo de vida dos bots das seguintes formas:
+ **Permitir o desenvolvimento simultâneo de vários recursos**: com um fluxo de trabalho automatizado, os desenvolvedores podem trabalhar em diferentes recursos paralelamente em ramificações separadas. As alterações podem então ser mescladas e implantadas sem bloquear outros trabalhos.
+ **Usar a interface de usuário do console do Amazon Lex**: os desenvolvedores podem usar o console fácil de usar do Amazon Lex para criar e testar bots. Os bots são então descritos no código da infraestrutura para implantação
+ **Promover bots em todos os ambientes**: o fluxo de trabalho automatiza a promoção de versões de bots de ambientes inferiores, como de desenvolvimento e teste até a produção. Essa abordagem reduz o risco e a sobrecarga das promoções manuais.
+ **Manter o controle de versão**: o gerenciamento das definições de bots no Git, em vez de apenas por meio do serviço Amazon Lex, fornece controle de versão e uma trilha de auditoria. As alterações são rastreadas para desenvolvedores individuais, ao contrário de quando usamos apenas os bots armazenados Console de gerenciamento da AWS ou APIs modificados AWS. 

Ao automatizar o processo de lançamento de bots do Amazon Lex, as equipes podem fornecer recursos mais rapidamente com menos risco e esforço. Os bots permanecem sob controle de versão, em vez de isolados no console do Amazon Lex. 

## Pré-requisitos e limitações
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**Pré-requisitos **
+ O fluxo de trabalho envolve vários Contas da AWS ambientes diferentes (desenvolvimento, produção e DevOps), o que requer gerenciamento de contas e configurações de acesso entre contas.
+ Python 3.9 disponível em seu ambiente de implantação ou pipeline.
+ Git [instalado](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) e configurado em uma estação de trabalho local para controle de origem.
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) e configurado para autenticação usando a linha de comando ou o Python.

**Limitações**
+ **Acesso ao repositório**: o fluxo de trabalho pressupõe que o pipeline de integração contínua e entrega contínua (CI/CD) tenha as permissões necessárias para confirmar alterações no repositório do código-fonte. 
+ **Versão inicial do bot** — As ferramentas exigem que uma versão inicial do bot seja implantada usando AWS CloudFormation modelos. Você deve criar a primeira iteração do bot e confirmá-la no repositório para que o fluxo de trabalho automatizado possa assumir o controle.
+ **Conflitos de mesclagem**: embora o fluxo de trabalho tenha como objetivo permitir o desenvolvimento simultâneo, ainda existe a possibilidade de conflitos de mesclagem ao integrar alterações de diferentes ramificações. A resolução de conflitos nas configurações de bots pode exigir intervenção manual.

**Versões do produto**
+ [Python 3.9](https://www.python.org/downloads/) ou posterior
+ [AWS CDK v2 2.124.0](https://docs.aws.amazon.com/cdk/api/versions.html) ou superior
+ [AWS SDK para Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/) 1.28 ou posterior

## Arquitetura
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

O diagrama a seguir mostra a arquitetura de alto nível e os principais componentes da solução.

![\[Fluxo de trabalho para automatizar o desenvolvimento e a implantação de bots do Amazon Lex.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


Os componentes principais incluem o seguinte:
+ **Repositório de bots do Lex**: um repositório Git que armazena as definições de IaC para os bots do Amazon Lex.
+ **DevOps**— Um Conta da AWS dedicado a abrigar os CI/CD dutos e os recursos relacionados para o processo de desenvolvimento e implantação.
+ **Pipelines** — As AWS CodePipeline instâncias que automatizam vários estágios do ciclo de vida de desenvolvimento e implantação de bots, como criar um novo bot, exportar a definição de um bot, importar uma definição de bot e excluir um bot.
+ **Bots de tíquetes e bot principal**: os recursos de bots do Amazon Lex, em que os bots de tíquetes se referem a bots de recursos específicos desenvolvidos por equipes ou desenvolvedores individuais e o bot principal se refere ao bot básico que integra todos os recursos.

O diagrama de arquitetura ilustra o seguinte fluxo de trabalho:

1. **Definir a linha de base do bot principal**: o ponto de partida do fluxo de trabalho é definir a linha de base do bot principal no ambiente de desenvolvimento (Dev). O bot principal serve como base para futuros desenvolvimentos e adições de recursos.

1. **Criar o bot de tíquetes**: quando um novo recurso ou alteração é necessário, um bot de tíquete é criado. O bot de tíquete é essencialmente uma cópia ou ramificação do bot principal em que os desenvolvedores podem trabalhar sem afetar a versão principal.

1. **Exportar o bot de tíquetes**: depois que o trabalho no bot de tíquetes estiver concluído, ele será exportado do serviço Amazon Lex. Em seguida, a ramificação que contém o bot de tíquete é realocada da ramificação principal. Essa etapa garante que todas as alterações feitas no bot principal enquanto o bot de tíquete estava em desenvolvimento sejam incorporadas, reduzindo possíveis conflitos.

1. **Importar bot de tíquete realocado e validar**: o bot de tíquete realocado é importado de volta para o ambiente de desenvolvimento e validado para garantir que funcione corretamente com as alterações mais recentes da ramificação principal. Se a validação for bem-sucedida, uma solicitação de pull (PR) será criada para mesclar as alterações do bot de tíquete na ramificação principal.

1. **Excluir bot de tíquete**: depois que as alterações forem mescladas com sucesso na ramificação principal, o bot de tíquete não será mais necessário. O bot de tíquete pode ser excluído para manter o ambiente limpo e gerenciável.

1. **Implantar o bot principal no ambiente de desenvolvimento e testar**: o bot principal atualizado, agora incluindo os novos recursos ou alterações, é implantado no ambiente de desenvolvimento. Aqui, ele passa por testes completos para garantir que todas as funcionalidades funcionem conforme o esperado.

1. **Implantar o bot principal no ambiente de produção**: depois que os testes no ambiente de desenvolvimento forem concluídos e bem-sucedidos, o bot principal será implantado no ambiente de produção. Essa etapa é o estágio final do fluxo de trabalho, no qual os novos recursos ficam disponíveis para os usuários finais.

**Automação e escala**

O fluxo de trabalho automatizado permite que os desenvolvedores trabalhem paralelamente em diferentes recursos, cada um em ramificações separadas. Isso facilita o desenvolvimento simultâneo, permitindo que as equipes colaborem de forma eficaz e forneçam recursos com mais rapidez. Com ramificações isoladas umas das outras, as mudanças podem ser mescladas e implantadas sem bloquear nem interferir em outros trabalhos em andamento.

O fluxo de trabalho automatiza a implantação e a promoção de versões de bots em diferentes ambientes, como desenvolvimento, teste e produção.

Armazenar as definições de bots em um sistema de controle de versão como o Git fornece uma trilha de auditoria abrangente e permite uma colaboração eficiente. As alterações são rastreadas para desenvolvedores individuais, garantindo transparência e responsabilidade em todo o ciclo de vida do desenvolvimento. Essa abordagem também facilita as revisões de código, permitindo que as equipes identifiquem e resolvam problemas antes da implantação na produção.

Usando AWS CodePipeline e outros Serviços da AWS, o fluxo de trabalho automatizado pode ser escalado para acomodar o aumento das cargas de trabalho e do tamanho das equipes.

## Ferramentas
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software de código aberto para definir Nuvem AWS infraestrutura em código usando linguagens de programação familiares e provisionando-a por meio dela. CloudFormation O exemplo de implementação neste padrão usa Python.
+ [AWS CDK Interface de linha de comando (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) - O AWS CDK kit de ferramentas é a principal ferramenta para interagir com seu aplicativo. AWS CDK Ele executa seu aplicativo, interroga o modelo de aplicativo que você definiu e produz e implanta os CloudFormation modelos gerados pelo CDK.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS Esse padrão é usado CloudFormation para implantar as configurações de bots do Amazon Lex e os recursos relacionados usando a infraestrutura como código.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação. Esse padrão é usado CodeBuild para criar e empacotar os artefatos de implantação.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações. Esse padrão é usado CodePipeline para orquestrar o pipeline de entrega contínua.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) serve AWS service (Serviço da AWS) para criar interfaces conversacionais (bots) para aplicativos usando voz e texto.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS

**Outras ferramentas**
+ O [Git](https://git-scm.com/docs) é um sistema de código aberto de controle de versão distribuído.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex). O repositório do código contém os seguintes arquivos e pastas:
+ `prerequisite`pasta — Contém definições de CloudFormation pilha (usando o AWS CDK) para configurar os recursos e ambientes necessários.
+ Pasta `prerequisite/lexmgmtworkflow`: diretório principal do projeto Lex Management Workflow, incluindo definições de pilha e código Python.
+ `prerequisite/tests`: contém testes de unidade.
+ Pasta `src`: diretório de código-fonte, incluindo o wrapper e utilitários de gerenciamento de bots do Amazon Lex.
+ `src/dialogue_lambda`: diretório de código-fonte da função do Lambda do hook de diálogo que intercepta e processa as entradas do usuário durante uma conversa com um bot do Amazon Lex.

## Práticas recomendadas
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **Separação de tarefas**
  + Mantenha uma separação clara de responsabilidades entre DevOps os ambientes de desenvolvimento e produção.
  + Use separadamente Contas da AWS para cada ambiente para impor limites adequados de isolamento e segurança.
  + Use perfis entre contas e princípios de acesso com privilégios mínimos para garantir o acesso controlado entre ambientes.
+ **Infraestrutura como código**
  + Revise e atualize regularmente o código da infraestrutura para se alinhar às práticas recomendadas e aos requisitos dinâmicos.
  + Estabeleça uma estratégia clara de ramificação e mesclagem para o repositório de código-fonte.
+ **Teste e validação**
  + Implemente testes automatizados em vários estágios do pipeline para detectar problemas no início do ciclo de desenvolvimento.
  + Use o console do Amazon Lex ou estruturas automatizadas de teste para validar as configurações e a funcionalidade de bots antes de promovê-los para ambientes superiores.
  + Considere a implementação de portas de aprovação manual para implantações em ambientes críticos ou de produção.
+ **Monitoramento e registro**
  + Configure mecanismos de monitoramento e registro em log para pipelines, implantações e interações de bots.
  + Monitore eventos do pipeline, status de implantação e métricas de performance de bots para identificar e resolver problemas imediatamente.
  + Use serviços da AWS, como Amazon CloudWatch, AWS CloudTrail, e AWS X-Ray para registro e monitoramento centralizados.
  + Revise e analise regularmente a performance, a eficiência e a eficácia do fluxo de trabalho automatizado.
+ **Segurança e conformidade**
  + Implemente práticas de codificação seguras e siga as melhores práticas AWS de segurança para o desenvolvimento e a implantação de bots do Amazon Lex.
  + Analise e atualize regularmente as permissões, as políticas e os perfis do IAM para se alinhar ao princípio de privilégio mínimo.
  + Considere integrar a verificação de segurança e as verificações de conformidade aos pipelines.

## Épicos
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### Configurar a IaC para o gerenciamento de bots do Amazon Lex
<a name="set-up-iac-for-lex2-bot-management"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o ambiente local do CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| Crie um perfil entre contas no ambiente `devops`. | A `devops` conta é responsável por hospedar e gerenciar os CI/CD pipelines. Para permitir que os CI/CD pipelines interajam com os `prod` ambientes `dev` e, execute os comandos a seguir para criar uma função entre contas na `devops` conta.<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| Crie um perfil entre contas no ambiente `dev`. | Crie um perfil do IAM na conta `dev` com as permissões necessárias para permitir que a conta `devops` assuma esse perfil. O CI/CD pipeline usa essa função para realizar ações na `dev` conta, como implantar e gerenciar recursos de bots do Amazon Lex.Para criar o perfil do IAM, execute os seguintes comandos:<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| Crie um perfil entre contas no ambiente `prod`. | Crie um perfil do IAM na conta `prod` com as permissões necessárias para permitir que a conta `devops` assuma esse perfil. O CI/CD pipeline usa essa função para realizar ações na `prod` conta, como implantar e gerenciar recursos de bots do Amazon Lex.<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| Crie pipelines no ambiente `devops`. | Para gerenciar o fluxo de trabalho de desenvolvimento de bots do Amazon Lex, execute o comando a seguir para configurar pipelines no ambiente `devops`. <pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### Estabelecer a linha de base para o bot principal
<a name="establish-the-baseline-for-the-main-bot"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Defina a versão inicial do bot principal. | Para definir a versão inicial do bot principal, [acione](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers) o pipeline `BaselineBotPipeline`.O pipeline implanta a definição básica de bot definida no CloudFormation modelo, exporta a definição principal do bot como arquivos.json e armazena o código principal do bot em um sistema de controle de versão. | AWS DevOps | 

### Implementar o fluxo de trabalho de desenvolvimento de recursos
<a name="implement-the-feature-development-workflow"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o bot de tíquetes para desenvolver e testar um recurso. | `TicketBot` é uma nova instância de bot importada da definição de bot principal existente na ramificação de recursos. Essa abordagem garante que o novo bot tenha todas as funcionalidades e configurações atuais do bot principal.Para definir a versão inicial do bot de tíquete, acione o pipeline `CreateTicketBotPipeline`.O pipeline cria uma nova ramificação de recurso no sistema de controle de versão e cria uma nova instância de bot de tíquete com base no bot principal. | Desenvolvedor de bots do Lex | 
| Desenvolva e teste o recurso de bot de tíquete.  | Para desenvolver e testar o recurso, faça login Console de gerenciamento da AWS e abra o console do Amazon Lex em [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/). Para obter mais informações, consulte [Testing a bot using the console](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) na documentação do Amazon Lex.Com a instância `TicketBot`, agora você pode adicionar, modificar ou estender a funcionalidade do bot para implementar o novo recurso. Por exemplo, você pode criar ou modificar intenções, enunciados, slots e fluxos de diálogo. Para obter mais informações, consulte [Adding intents](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html) na documentação do Amazon Lex. | Desenvolvedor de bots do Lex | 
| Exporte a definição do bot de tíquete. | A definição de bot exportada é essencialmente uma representação da configuração e funcionalidade do bot no formato JSON.Para exportar a definição do bot de tíquete, acione o pipeline `ExportTicketBotPipeline`.O pipeline exporta a definição do bot de tíquete como um arquivo .json e armazena o código do bot de tíquete em uma ramificação de recurso no sistema de controle de versão. | Desenvolvedor de bots do Lex | 
| Realoque a ramificação do recurso da ramificação principal mais recente. | Durante o desenvolvimento de um novo recurso, a ramificação principal pode ter recebido outras alterações de diferentes desenvolvedores ou equipes. Para incorporar essas alterações na ramificação de recursos, execute uma operação `rebase` do Git. Essa operação basicamente reproduz as confirmações da ramificação de recursos em cima das confirmações mais recentes da ramificação principal, garantindo que a ramificação de recursos inclua todas as alterações mais recentes. | Desenvolvedor de bots do Lex | 
| Importe e valide o bot de tíquete realocado. | Depois de realocar a ramificação de recursos, você deverá importá-la para a instância do bot de tíquete. Essa importação atualiza o bot de tíquete existente com as alterações mais recentes da ramificação realocada.Para importar o bot de tíquete realocado, acione o pipeline `ImportTicketBotPipeline`.O pipeline importa os arquivos .json de definição do bot de tíquete na ramificação de recursos do sistema de controle de versão para a instância `TicketBot`. | Desenvolvedor de bots do Lex | 
| Valide a definição do bot realocado. | Depois de importar a definição de bot realocado, é fundamental validar sua funcionalidade. Você precisa garantir que o novo recurso funcione conforme o esperado e não entre em conflito com a funcionalidade existente. Essa validação normalmente envolve testar o bot com vários cenários de entrada, verificar as respostas e confirmar se o bot se comporta conforme o esperado. Você pode realizar a validação de uma das seguintes maneiras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Desenvolvedor de bots do Lex | 
| Mescle a ramificação de recursos na ramificação principal. | Depois de desenvolver e testar o novo recurso na instância `TicketBot` isolada, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Desenvolvedor de bots do Lex, administrador de repositório | 
| Exclua a ramificação de recursos e o bot de tíquete.  | Depois que uma ramificação de recursos for mesclada com sucesso na ramificação principal, exclua a ramificação de recursos e o bot de tíquete do repositório de código-fonte. Para excluir a ramificação de recursos e o bot de tíquete, acione o pipeline `DeleteTicketBotPipeline`.O pipeline remove os recursos temporários de bot que foram criados durante o processo de desenvolvimento (por exemplo, o bot de tíquete). Essa ação ajuda a manter o repositório limpo e a evitar confusões ou conflitos com futuras ramificações de recursos.  | Desenvolvedor de bots do Lex | 

### Manter o bot principal
<a name="maintain-the-main-bot"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Importe a definição mais recente do bot principal para o ambiente `dev`. | Para importar a definição mais recente do bot principal na ramificação principal para o ambiente `dev`, acione o pipeline `DeployBotDevPipeline`.O pipeline também cria uma marcação git na aprovação. | AWS DevOps | 
| Importe a definição mais recente do bot principal para o ambiente `prod`. | Para importar a definição de bot mais recente na ramificação principal para o ambiente `prod`, forneça a referência da marcação da tarefa anterior como parâmetro e acione o pipeline `DeployBotProdPipeline`.O pipeline importa a definição de bot mais recente de uma marcação específica para o ambiente `prod`. | AWS DevOps | 

## Solução de problemas
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Quando você implanta bots do Amazon Lex em diferentes Contas da AWS, os serviços de ferramentas devem ter as permissões necessárias para acessar recursos nessas contas. | Para conceder acesso entre contas, use políticas e perfis do (IAM). Crie perfis do IAM nas contas de destino e anexe as políticas aos perfis que concedem as permissões necessárias. Em seguida, assuma esses perfis na conta em que o bot do Amazon Lex está implantado.Para obter mais informações, consulte [IAM permissions required to import](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions) e [IAM permissions required to export bots in Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions) na documentação do Amazon Lex. | 

## Recursos relacionados
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [Importing bots in Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [Inicie um pipeline em CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [Trabalhando com bots Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)

# Coordene a dependência de recursos e a execução de tarefas usando a AWS Fargate WaitCondition construção de gancho
<a name="use-the-aws-fargate-waitcondition-hook-construct"></a>

*Stan Fan, Amazon Web Services*

## Resumo
<a name="use-the-aws-fargate-waitcondition-hook-construct-summary"></a>

Esse padrão descreve o pacote WaitCondition hook (`waitcondition-hook-for-aws-fargate-task`) npm, que é uma solução nativa da nuvem projetada para orquestrar [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)tarefas em clusters do Amazon Elastic Container Service (Amazon ECS). 

O WaitCondition gancho é uma AWS Cloud Development Kit (AWS CDK) construção especificamente adaptada para integração com AWS CloudFormation. O WaitCondition gancho fornece os seguintes recursos principais:
+ Atua como um mecanismo de condição de espera, pausando a execução da CloudFormation pilha até que uma tarefa específica do Fargate seja concluída, o que ajuda nas implantações ordenadas e no provisionamento de recursos.
+ Suportes TypeScript e Python, o que o torna ideal para AWS CDK projetos.
+ Permite que desenvolvedores e arquitetos realizem a orquestração de implantações ao coordenar a conclusão de tarefas e o gerenciamento de recursos para aplicações em contêineres na AWS.
+ Permite executar tarefas do Fargate com um ou vários contêineres incorporados em um CloudFormation ciclo de vida e pode lidar com falhas de tarefas e reverter a pilha após uma falha na CloudFormation tarefa.
+ Oferece flexibilidade para adicionar dependências entre recursos e os resultados da execução das tarefas do Fargate, permitindo a criação de tarefas personalizadas ou a invocação de outros endpoints. Por exemplo, você pode pausar uma CloudFormation pilha e aguardar a migração do banco de dados (feita por uma tarefa do Fargate) e provisionar outros recursos que podem depender do sucesso da migração do banco de dados.

## Pré-requisitos e limitações
<a name="use-the-aws-fargate-waitcondition-hook-construct-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Cloud Development Kit (AWS CDK) Interface de linha de comando (CLI) instalada em uma estação de trabalho local. Para obter mais informações, consulte a [referência da AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) na AWS CDK documentação.
+ [Gerenciador de pacotes Node (npm), instalado em uma estação de trabalho local e configurado para entrada.AWS CDK TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Para obter mais informações, consulte [Download e instalação do Node.js e npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), na documentação do npm.
+ O Yarn instalado em uma estação de trabalho local. Para obter mais informações, consulte [Installation](https://yarnpkg.com/getting-started/install) na documentação do Yarn.

**Limitações**
+ Essa solução é implantada em um único Conta da AWS.
+ O código de retorno esperado do contêiner é `0`, representando êxito. Qualquer outro código de retorno indica falha e a CloudFormation pilha será revertida. 
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="use-the-aws-fargate-waitcondition-hook-construct-architecture"></a>

O diagrama apresentado a seguir mostra a arquitetura do constructo.

![\[Fluxo de trabalho do AWS Step Functions da construção waitcondition-hook-for-aws -fargate-task.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


O diagrama mostra o fluxo de trabalho para `waitcondition-hook-for-aws-fargate-task`:

1. `WaitCondition`e `WaitConditionHandler` são provisionados para ouvir a resposta das AWS Lambda funções.

1. Dependendo do resultado da tarefa, as funções `CallbackFunction` ou `ErrorHandlerFunction` são acionadas pelo término da tarefa do Fargate.

1. A função do Lambda envia um sinal de SUCESSO ou FALHA para o `WaitConditionHandler`.

1. O `WaitConditionHandler` continua a provisionar os recursos se o resultado da execução da tarefa do Fargate for bem-sucedido, ou reverte a pilha se a tarefa apresentar falhas.

O diagrama apresentado a seguir mostra um exemplo de fluxo de trabalho para a realização de uma migração de banco de dados.

![\[Fluxo de trabalho da migração do banco de dados Amazon RDS usando a construção de WaitCondition gancho.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


O fluxo de trabalho de exemplo usa o constructo `waitcondition-hook-for-aws-fargate-task` para realizar uma migração de banco de dados, conforme descrito abaixo:

1. Uma instância do Amazon Relational Database Service (Amazon RDS) é provisionada.

1. O constructo `waitcondition-hook-for-aws-fargate-task` executa a tarefa de migração de banco de dados e pausa a pilha como uma instância do Amazon Elastic Compute Cloud (Amazon EC2).

1. Se a tarefa de migração for concluída com êxito, ela enviará um sinal de sucesso para CloudFormation. Caso contrário, ele envia um sinal de falha CloudFormation e reverte a pilha.

## Ferramentas
<a name="use-the-aws-fargate-waitcondition-hook-construct-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir a infraestrutura de nuvem em código e provisioná-la por meio dela CloudFormation.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus AWS recursos e dos aplicativos em que você executa AWS em tempo real.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ O [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) facilita a execução de contêineres sem que você precise gerenciar servidores ou instâncias do Amazon EC2. É usado em conjunto com o Amazon ECS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Esta rede virtual é parecida com uma rede tradicional que você gerenciaria em seu próprio data center, com as vantagens de aproveitar a infraestrutura escalável da AWS. 

**Outras ferramentas**
+ O [npm](https://docs.npmjs.com/about-npm) é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.
+ O [Yarn](https://yarnpkg.com/) é um gerenciador de pacotes de código aberto que você pode usar para gerenciar dependências em JavaScript projetos. O Yarn pode auxiliar na instalação, atualização, configuração e remoção de dependências de pacotes.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task).

## Práticas recomendadas
<a name="use-the-aws-fargate-waitcondition-hook-construct-best-practices"></a>
+ Ao criar seu AWS CDK aplicativo, siga as [melhores práticas para desenvolver e implantar a infraestrutura de nuvem AWS CDK na](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) documentação AWS CDK v2.
+ Para a AWS Fargate tarefa, siga as [melhores práticas para imagens de contêineres do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html) na documentação do Amazon ECS.

## Épicos
<a name="use-the-aws-fargate-waitcondition-hook-construct-epics"></a>

### Configure o AWS CDK
<a name="set-up-the-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale AWS CDK o. | Para instalar o AWS CDK em sua máquina local ou em outro ambiente, execute o seguinte comando: <pre>npm install -g aws-cdk@latest</pre> | Arquiteto de nuvem, desenvolvedor de aplicativos | 
| Inicialize o. AWS CDK | A [inicialização](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) é o processo de preparar um [ambiente](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) para implantação. Para inicializar seu AWS CDK kit de ferramentas para o destino Conta da AWS e Região da AWS, execute o seguinte comando:<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>Esse comando cria uma CloudFormation pilha chamada`CDKToolkit`.  | Arquiteto de nuvem | 

### Execute o WaitCondition gancho para construir AWS Fargate tarefas
<a name="run-the-waitcondition-hook-for-fargatelong-tasks-construct"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o projeto do CDK. | Crie um projeto do CDK com a linguagem de sua preferência. Esse padrão usa TypeScript. Para criar um projeto CDK usando TypeScript, execute o seguinte comando: `cdk init app —language typescript` | Arquiteto de nuvem | 
| Instale o pacote . | Execute `npm install` no caminho raiz do seu projeto do CDK. Após a biblioteca do CDK ser instalada, execute o seguinte comando para instalar `waitcondition-hook-for-aws-fargate-task`: `yarn add waitcondition-hook-for-aws-fargate-task` | Arquiteto de nuvem | 
| Desenvolva sua aplicação do CDK e os componentes do Amazon ECS. | Desenvolva seu projeto do CDK. É necessário um recurso de definição de tarefa do Amazon ECS. Para obter mais informações sobre como criar uma definição de tarefa, consulte [Definições de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) na documentação do Amazon ECS.O exemplo apresentado a seguir usa este constructo:<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | Arquiteto de nuvem | 
| Sintetize e execute a aplicação do CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)O constructo `waitcondition-hook-for-aws-fargate-task` executa a tarefa do Fargate.  | Arquiteto de nuvem | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpar os recursos | Para remover os recursos provisionados na etapa anterior, execute o seguinte comando:<pre>cdk destroy </pre> | Arquiteto de nuvem | 

## Solução de problemas
<a name="use-the-aws-fargate-waitcondition-hook-construct-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Falha geral CloudFormation na pilha | Para ajudar a solucionar falhas gerais de CloudFormation pilha, adicione o `--no-rollback` sinalizador conforme mostrado no exemplo a seguir: <pre>cdk deploy --no-rollback</pre>Esse comando interromperá a reversão da CloudFormation pilha, o que fornece recursos para solucionar problemas. Para obter mais informações, consulte [Escolha como lidar com falhas ao provisionar recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) na CloudFormation documentação. | 
| AWS Step Functions falha | Uma máquina de AWS Step Functions estado pode falhar na execução por diferentes motivos. Com a opção `—disable-rollback` configurada, siga as etapas apresentadas abaixo para solucionar o problema:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Para obter mais informações, consulte [Solução de problemas no Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html) e [Visualização dos detalhes da execução no console do Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details) na AWS Step Functions documentação. | 
| AWS Lambda falha de função | Este constructo provisiona duas funções do Lambda: `CallbackFunction` e `ErrorhandlerFunction`. Essas funções podem falhar por diversos motivos, como por exceções não tratadas. Siga as etapas apresentadas abaixo para solucionar o problema: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Para obter mais informações, consulte [Solução de problemas no Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) na AWS Lambda documentação. | 

## Recursos relacionados
<a name="use-the-aws-fargate-waitcondition-hook-construct-resources"></a>

**AWS documentação**
+ [AWS CDK Referência da API Construct](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [Começando com o AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Saiba como criar e usar os recursos do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Saiba como começar a usar o Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [O que AWS CDKé](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Outros recursos**
+ [Gancho de condição de espera para AWS Fargate tarefa](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (npm)
+ [waitcondition-hook-for-aws-fargate-task](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) 1.0.6 (pypi.org)

# Use repositórios de origem Git de terceiros na AWS CodePipeline
<a name="use-third-party-git-source-repositories-in-aws-codepipeline"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-summary"></a>

Esse padrão descreve como usar a AWS CodePipeline com repositórios de origem Git de terceiros.

 CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) é um serviço de entrega contínua que automatiza tarefas para criar, testar e implantar seu software. Atualmente, o serviço oferece suporte a repositórios Git gerenciados pela GitHub [AWS](https://aws.amazon.com/codecommit) e pela Atlassian CodeCommit Bitbucket. No entanto, algumas empresas usam repositórios Git de terceiros que são integrados ao serviço de autenticação única (SSO) e ao Microsoft Active Directory para autenticação. Você pode usar esses repositórios Git de terceiros como fontes para criar ações e CodePipeline webhooks personalizados.

Um webhook é uma notificação HTTP que detecta eventos em outra ferramenta, como um GitHub repositório, e conecta esses eventos externos a um pipeline. Quando você cria um webhook no CodePipeline, o serviço retorna uma URL que você pode usar no webhook do seu repositório Git. **Se você enviar o código para uma ramificação específica do repositório Git, o webhook do Git iniciará o CodePipeline webhook por meio dessa URL e definirá o estágio de origem do pipeline como Em andamento.** Quando o pipeline está nesse estado, um funcionário pesquisa CodePipeline o trabalho personalizado, executa o trabalho e envia um status de sucesso ou falha para CodePipeline. Nesse caso, como o pipeline está no estágio de origem, o operador de trabalho obtém o conteúdo do repositório Git, compacta o conteúdo e o carrega no bucket do Amazon Simple Storage Service (Amazon S3), onde os artefatos do pipeline são armazenados, usando a chave de objeto fornecida pelo trabalho pesquisado. Você também pode associar uma transição para a ação personalizada a um evento na Amazon CloudWatch e iniciar o funcionário com base no evento. Essa configuração permite que você use repositórios Git de terceiros para os quais o serviço não oferece suporte nativo como fontes. CodePipeline

## Pré-requisitos e limitações
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um repositório Git que suporta webhooks e pode se conectar a uma CodePipeline URL de webhook pela Internet 
+ AWS Command Line Interface (AWS CLI), [instalada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) e [configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) para trabalhar com a conta da AWS

## Arquitetura
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-architecture"></a>

O padrão envolve as seguintes etapas:

1. O usuário confirma o código em um repositório Git.

1. O webhook do Git é chamado.

1. O CodePipeline webhook é chamado.

1. O pipeline é definido como **Em andamento** e o estágio de origem está definido para o estado **Em andamento**.

1. A ação do estágio de origem inicia uma regra de CloudWatch Eventos, indicando que ela foi iniciada.

1. O CloudWatch evento inicia uma função Lambda.

1. A função do Lambda obtém os detalhes do trabalho de ação personalizado.

1. A função Lambda inicia a CodeBuild AWS e passa todas as informações relacionadas ao trabalho.

1. CodeBuild obtém a chave SSH pública ou as credenciais do usuário para acesso HTTPS Git do Secrets Manager.

1. CodeBuild clona o repositório Git para uma ramificação específica.

1. CodeBuild compacta o arquivo e o carrega no bucket do S3 que serve como armazenamento de artefatos. CodePipeline 

![\[Fluxo de trabalho que usa repositórios de origem Git de terceiros como fontes para a AWS. CodePipeline\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/84284bec-b39d-466a-9fd9-994be2c953df/images/85555dab-7317-40f5-86a7-ccb8987c5bf3.png)


 

## Ferramentas
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — CodePipeline A AWS é um serviço de [entrega contínua](https://aws.amazon.com/devops/continuous-delivery/) totalmente gerenciado que ajuda você a automatizar seus pipelines de lançamento para atualizações rápidas e confiáveis de aplicativos e infraestrutura. CodePipeline automatiza as fases de criação, teste e implantação do seu processo de lançamento para cada alteração de código, com base no modelo de lançamento que você define. Isso permite entregar recursos e atualizações de forma rápida e confiável. Você pode integrar a AWS CodePipeline com serviços de terceiros, como GitHub ou com seu próprio plug-in personalizado.
+ [AWS Lambda](https://aws.amazon.com/lambda/): o AWS Lambda permite executar código sem provisionar ou gerenciar servidores. Com o Lambda, você pode executar o código em praticamente qualquer tipo de aplicação ou serviço de backend sem a necessidade de administração. Você carrega seu código e o Lambda cuidará de tudo que for necessário para executar e escalar seu código com alta disponibilidade. Você pode configurar o seu código para que ele seja iniciado automaticamente por meio de outros serviços da AWS ou chamá-lo diretamente usando qualquer aplicativo móvel ou da web.
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/) — CodeBuild A AWS é um serviço de [integração contínua](https://aws.amazon.com/devops/continuous-integration/) totalmente gerenciado que compila o código-fonte, executa testes e produz pacotes de software prontos para implantação. Com CodeBuild, você não precisa provisionar, gerenciar e escalar seus próprios servidores de compilação. CodeBuild escala continuamente e processa várias compilações simultaneamente, para que suas compilações não fiquem esperando em uma fila. Você pode começar a usar ambientes de compilação pré-empacotados rapidamente ou criar ambientes de compilação personalizados que usem suas próprias ferramentas de compilação.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/): o AWS Secrets Manager ajuda você a proteger os segredos necessários para acessar seus aplicativos, serviços e recursos de TI. O serviço permite alternar, gerenciar e recuperar credenciais de banco de dados, chaves de API e outros segredos durante seu ciclo de vida. Usuários e aplicativos recuperam segredos chamando o Secrets Manager APIs, sem precisar codificar informações confidenciais em texto simples. O Secrets Manager oferece alternância secreta com integração embutida para o Amazon Relational Database Service (Amazon RDS), o Amazon Redshift e o Amazon DocumentDB. O serviço pode ser estendido para oferecer suporte a outros tipos de segredos, incluindo chaves e OAuth tokens de API. Além disso, o Secrets Manager permite que você controle o acesso a segredos usando permissões refinadas e audite centralmente a rotação de segredos para recursos na nuvem AWS, serviços de terceiros e ambientes on-premises.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) — CloudWatch A Amazon é um serviço de monitoramento e observação criado para DevOps engenheiros, desenvolvedores, engenheiros de confiabilidade de sites (SREs) e gerentes de TI. CloudWatch fornece dados e insights acionáveis para monitorar seus aplicativos, responder às mudanças de desempenho em todo o sistema, otimizar a utilização de recursos e obter uma visão unificada da integridade operacional. CloudWatch coleta dados operacionais e de monitoramento na forma de registros, métricas e eventos, fornecendo a você uma visão unificada dos recursos, aplicativos e serviços da AWS que são executados na AWS e em servidores locais. Você pode usar CloudWatch para detectar comportamentos anômalos em seus ambientes, definir alarmes, visualizar registros e métricas lado a lado, realizar ações automatizadas, solucionar problemas e descobrir insights para manter seus aplicativos funcionando sem problemas.
+ [Amazon S3](https://aws.amazon.com/s3/): o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos que permite armazenar e proteger qualquer volume de dados para uma variedade de casos de uso, como sites, aplicativos móveis, backup e restauração, arquivamento, aplicativos corporativos, dispositivos IoT e big data analytics. O Amazon S3 fornece recursos easy-to-use de gerenciamento para ajudá-lo a organizar seus dados e configurar controles de acesso bem ajustados para atender aos seus requisitos comerciais, organizacionais e de conformidade específicos.

## Épicos
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-epics"></a>

### Crie uma ação personalizada no CodePipeline
<a name="create-a-custom-action-in-codepipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma ação personalizada usando a AWS CLI ou a AWS. CloudFormation | Essa etapa envolve a criação de uma ação de origem personalizada que pode ser usada no estágio de origem de um pipeline em sua conta da AWS em uma região específica. Você deve usar a AWS CLI ou a AWS CloudFormation (não o console) para criar a ação de origem personalizada. Para obter mais informações sobre os comandos e etapas descritos neste e em outros épicos, consulte a seção “Recursos relacionados” no final desse padrão. Na AWS CLI, use o create-custom-action-type comando. Use --configuration-properties para fornecer todos os parâmetros necessários para o trabalhador processar ao pesquisar um trabalho. CodePipeline Certifique-se de observar os valores fornecidos às opções --provider e --action-version, para que você possa usar os mesmos valores ao criar o pipeline com esse estágio de origem personalizado. Você também pode criar a ação de origem personalizada na AWS CloudFormation usando o tipo de recurso AWS::CodePipeline::CustomActionType. | AWS geral | 

### Configurar a autenticação
<a name="set-up-authentication"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um par de chaves SSH. | Crie um par de chaves do Secure Shell (SSH). Para obter instruções, consulte a GitHub documentação. | Sistemas/engenheiro DevOps  | 
| Crie um segredo no AWS Secrets Manager. | Copie o conteúdo da chave privada do par de chaves do SSH e crie um segredo no AWS Secrets Manager. Esse segredo é usado para autenticação ao acessar o repositório Git. | AWS geral | 
| Adicione a chave pública ao repositório Git. | Adicione a chave pública do par de chaves do SSH às configurações da conta do repositório Git para autenticação na chave privada. | Sistemas/engenheiro DevOps  | 

### Criar um pipeline e um webhook
<a name="create-a-pipeline-and-webhook"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um pipeline que inclua a ação de origem personalizada. | Crie um pipeline em CodePipeline. Ao configurar o estágio de origem, escolha a ação de origem personalizada que você criou anteriormente. Você pode fazer isso no CodePipeline console da AWS ou na AWS CLI. CodePipeline solicita as propriedades de configuração que você definiu na ação personalizada. Essas informações são necessárias para que o funcionário processe o trabalho para a ação personalizada. Siga o assistente e crie a próxima etapa para o pipeline. | AWS geral | 
| Crie um CodePipeline webhook. | Crie um webhook para o pipeline que você criou com a ação de origem personalizada. Você deve usar a AWS CLI ou a AWS CloudFormation (não o console) para criar o webhook. Na AWS CLI, execute o comando put-webhook e forneça os valores apropriados para as opções de webhook. Anote os valores do URL do webhook que o comando retorna. Se você estiver usando CloudFormation a AWS para criar o webhook, use o tipo AWS::CodePipeline::Webhook de recurso. Certifique-se de enviar o URL do webhook do recurso criado e anote-o. | AWS geral | 
| Crie uma função e um projeto Lambda. CodeBuild  | Nesta etapa, você usa o Lambda CodeBuild para criar um trabalhador de trabalho que pesquisará as solicitações de trabalho CodePipeline para a ação personalizada, executará o trabalho e retornará o resultado do status para. CodePipeline Crie uma função Lambda que seja iniciada por uma regra da Amazon CloudWatch Events quando o estágio de ação da fonte personalizada do pipeline passa para “Em andamento”. Quando a função do Lambda é iniciada, ela deve obter os detalhes do trabalho de ação personalizada pesquisando os trabalhos. Você pode usar a PollForJobs API para retornar essas informações. Depois que as informações do trabalho pesquisado forem obtidas, a função do Lambda deve retornar uma confirmação e, em seguida, processar as informações com os dados obtidos das propriedades de configuração da ação personalizada. Quando o trabalhador estiver pronto para conversar com o repositório Git, você poderá iniciar um CodeBuild projeto, pois é conveniente lidar com tarefas do Git usando o cliente SSH. | AWS geral e desenvolvedor de código | 

### Crie um evento em CloudWatch
<a name="create-an-event-in-cloudwatch"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma regra de CloudWatch eventos. | Crie uma regra de CloudWatch eventos que inicie a função Lambda como alvo sempre que o estágio de ação personalizado do pipeline fizer a transição para “Em andamento”. | AWS geral | 

## Recursos relacionados
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-resources"></a>

**Criando uma ação personalizada no CodePipeline**
+ [Crie e adicione uma ação personalizada no CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [AWS::CodePipeline::CustomActionType recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html)

**Configuração da autenticação**
+ [Criação e gerenciamento de segredos com o AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)

**Criar um pipeline e um webhook**
+ [Crie um pipeline em CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html)
+ [Referência do comando put-webhook](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/put-webhook.html)
+ [AWS::CodePipeline::Webhook recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-webhook.html)
+ [PollForJobs Referência de API](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html)
+ [Crie e adicione uma ação personalizada no CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [Crie um projeto de construção na AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)

**Criar um evento**
+ [Detecte e reaja às mudanças no estado do pipeline com o Amazon CloudWatch Events](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

**Referências adicionais**
+ [Trabalhando com oleodutos em CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines.html)
+ [Guia do desenvolvedor do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

# Crie um CI/CD pipeline para validar as configurações do Terraform usando a AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan e Vijesh Vijayakumaran Nair, Amazon Web Services*

## Resumo
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Esse padrão mostra como testar as configurações do HashiCorp Terraform usando um pipeline de integração contínua e entrega contínua (CI/CD) implantado pela AWS. CodePipeline

O Terraform é um aplicativo de interface da linha de comando que ajuda você a usar o código para fornecer e gerenciar a infraestrutura e os recursos da nuvem. [A solução fornecida nesse padrão cria um CI/CD pipeline que ajuda você a validar a integridade de suas configurações do Terraform executando cinco estágios: CodePipeline ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`extrai a configuração do Terraform que você está testando de um repositório da AWS CodeCommit .

1. `"validate"`[executa ferramentas de validação de infraestrutura como código (IaC), incluindo [tfsec](https://github.com/aquasecurity/tfsec) e [TFLint](https://github.com/terraform-linters/tflint)checkov.](https://www.checkov.io/) O estágio também executa os seguintes comandos de validação do Terraform IaC: `terraform validate` e `terraform fmt`.

1. `"plan"` mostra quais mudanças serão aplicadas à infraestrutura se a configuração do Terraform for aplicada.

1. `"apply"` usa o plano gerado para provisionar a infraestrutura necessária em um ambiente de teste.

1. `"destroy"` remove a infraestrutura de teste que foi criada durante o estágio `"apply"`.

## Pré-requisitos e limitações
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado e configurado em sua máquina local
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), instalado e configurado em sua máquina local

**Limitações**
+ A abordagem desse padrão implanta a AWS CodePipeline em uma conta da AWS e somente em uma região da AWS. Alterações na configuração são necessárias para implantações em várias contas e em várias regiões.
+ O perfil do AWS Identity and Access Management (IAM) que esse padrão fornece (**codepipeline\$1iam\$1role**) segue o princípio do privilégio mínimo. As permissões desse perfil do IAM devem ser atualizadas com base nos recursos específicos que seu pipeline precisa criar.** **

**Versões do produto**
+ AWS CLI versão 2.9.15 ou superior
+ Terraform versão 1.3.7 ou superior

## Arquitetura
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de fluxo de trabalho de CI/CD pipeline para testar as configurações do Terraform em. CodePipeline

![\[Arquitetura para testar as configurações do Terraform usando um pipeline da AWS CI/CD .\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Em CodePipeline, um usuário da AWS inicia as ações propostas em um plano do Terraform executando o `terraform apply` comando na CLI da AWS.

1. A AWS CodePipeline assume uma função de serviço do IAM que inclui as políticas necessárias para acessar CodeCommit o AWS KMS e o Amazon S3. CodeBuild

1. CodePipeline executa o estágio de `"checkout"` pipeline para extrair a configuração do Terraform de um CodeCommit repositório da AWS para testes.

1. CodePipeline executa o `"validate"` estágio para testar a configuração do Terraform executando as ferramentas de validação do IaC e executando os comandos de validação do Terraform IaC em um projeto. CodeBuild 

1. CodePipeline executa o `"plan"` estágio para criar um plano no CodeBuild projeto com base na configuração do Terraform. O usuário da AWS pode revisar esse plano antes que as alterações sejam aplicadas ao ambiente de teste.

1. O Code Pipeline executa o `"apply"` estágio de implementação do plano usando o CodeBuild projeto para provisionar a infraestrutura necessária no ambiente de teste.

1. CodePipeline executa o `"destroy"` estágio, que é usado CodeBuild para remover a infraestrutura de teste que foi criada durante o `"apply"` estágio.

1. Um bucket do Amazon S3 armazena artefatos de pipeline, que são criptografados e descriptografados usando uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) do AWS KMS.

## Ferramentas
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Ferramentas**

*Serviços da AWS*
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é 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.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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 Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

*Outros serviços*
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é um aplicativo de interface de linha de comando que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.

**Código **

O código desse padrão está disponível no GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repositório. O repositório contém as configurações do Terraform necessárias para criar a arquitetura de destino descrita nesse padrão.

## Épicos
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Provisione os componentes da solução
<a name="provision-the-solution-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o GitHub repositório. | Clone o GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repositório executando o seguinte comando em uma janela de terminal:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Para obter mais informações, consulte [Clonar um repositório](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) na GitHub documentação. | DevOps engenheiro | 
| Crie um arquivo de definições de variáveis do Terraform.  | Crie um arquivo `terraform.tfvars` com base nos requisitos do seu caso de uso. Você pode atualizar as variáveis no arquivo `examples/terraform.tfvars` que está no repositório clonado.Para obter mais informações, consulte [Atribuição de valores às variáveis do módulo raiz](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) na documentação do Terraform.O arquivo `Readme.md` do repositório contém mais informações sobre as variáveis necessárias. | DevOps engenheiro | 
| Configure a AWS como o provedor do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Para obter mais informações, consulte o [provedor da AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) na documentação do Terraform. | DevOps engenheiro | 
| Atualize a configuração do provedor Terraform para criar o bucket de replicação do Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Com a replicação, os objetos são copiados automaticamente e de forma assíncrona entre os buckets do Amazon S3. | DevOps engenheiro | 
| Inicialize a configuração do Terraform. | Para inicializar seu diretório de trabalho que contém os arquivos de configuração Terraform, execute o seguinte comando na pasta raiz do repositório clonado:<pre>terraform init</pre> | DevOps engenheiro | 
| Crie o plano do Terraform. | Para criar um plano do Terraform, execute o seguinte comando na pasta raiz do repositório clonado:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>O Terraform avalia os arquivos de configuração para determinar o estado de destino dos recursos declarados. Em seguida, ele compara o estado de destino com o estado atual e cria um plano. | DevOps engenheiro | 
| Verifique o plano do Terraform. | Revise o plano do Terraform e confirme se ele configura a arquitetura necessária em sua conta da AWS de destino. | DevOps engenheiro | 
| Implante a solução. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)O Terraform cria, atualiza ou destrói a infraestrutura para atingir o estado de destino declarado nos arquivos de configuração. | DevOps engenheiro | 

### Valide as configurações do Terraform executando o pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o repositório de código-fonte. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps engenheiro | 
| Valide os estágios do pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Para obter mais informações, consulte [Visualizar detalhes e histórico do pipeline (console)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) no *Guia CodePipeline do usuário da AWS*.Quando uma alteração é confirmada na ramificação principal do repositório de origem, o pipeline de teste é ativado automaticamente. | DevOps engenheiro | 
| Verifique a saída do relatório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)O `<project_name>-validate` CodeBuild projeto gera relatórios de vulnerabilidade para seu código durante a `"validate"` etapa. | DevOps engenheiro | 

### Limpe os seus recursos
<a name="clean-up-your-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe o pipeline e os recursos associados. | Para excluir os recursos de teste da sua conta da AWS, execute o seguinte comando na pasta raiz do repositório clonado:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps engenheiro | 

## Solução de problemas
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Você recebe um **AccessDenied **erro durante a `"apply"` etapa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Recursos relacionados
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blocos de módulos](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentação do Terraform)
+ [Como usar para CI/CD implantar e configurar serviços de segurança da AWS com o Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (postagem no blog da AWS)
+ [Using service-linked roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) (documentação do IAM)
+ [create-pipeline](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) (documentação da AWS CLI)
+ [Configure a criptografia do lado do servidor para artefatos armazenados no Amazon S3](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) para (documentação da AWS) CodePipeline CodePipeline 
+ [Cotas para a AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentação da AWS)
+ [Proteção de dados na AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentação da AWS)

## Mais informações
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Módulos personalizados do Terraform**

A seguir está uma lista de módulos personalizados do Terraform que são usados nesse padrão:
+ `codebuild_terraform`cria os CodeBuild projetos que formam cada estágio do pipeline.
+ `codecommit_infrastructure_source_repo`captura e cria o CodeCommit repositório de origem.
+ `codepipeline_iam_role` cria os perfis do IAM necessários para o pipeline.
+ `codepipeline_kms` cria a chave do AWS KMS necessária para criptografia e descriptografia de objetos do Amazon S3.
+ `codepipeline_terraform`cria o pipeline de teste para o CodeCommit repositório de origem.
+ `s3_artifacts_bucket` cria um bucket do Amazon S3 para gerenciar artefatos de pipeline.

**Arquivos de especificação de compilação**

Veja a seguir uma lista de arquivos de especificação de compilação (buildspec) que esse padrão usa para executar cada estágio do pipeline:
+ `buildspec_validate.yml` executa o estágio `"validate"`.
+ `buildspec_plan.yml` executa o estágio `"plan"`.
+ `buildspec_apply.yml` executa o estágio `"apply"`.
+ `buildspec_destroy.yml` executa o estágio `"destroy"`.

*Variáveis do arquivo de especificação de compilação*

Cada arquivo buildspec usa as seguintes variáveis para ativar diferentes configurações específicas da compilação:


| 
| 
| Variável | Valor padrão  | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." | Define o CodeCommit diretório de origem | 
| `TF_VERSION` | "1.3.7" | Define a versão do Terraform para o ambiente de construção | 

O arquivo `buildspec_validate.yml` também suporta as seguintes variáveis para ativar diferentes configurações específicas da compilação:


| 
| 
| Variável | Valor padrão  | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | "./templates/scripts" | Define o diretório do script | 
| `ENVIRONMENT` | "dev" | Define o nome do ambiente | 
| `SKIPVALIDATIONFAILURE` | "Y" | Ignora a validação em caso de falhas | 
| `ENABLE_TFVALIDATE` | "Y" | Ativa a validação do Terraform  | 
| `ENABLE_TFFORMAT` | "Y" | Ativa o formato do Terraform | 
| `ENABLE_TFCHECKOV` | "Y" | Ativa varredura checkov | 
| `ENABLE_TFSEC` | "Y" | Ativa varredura tfsec | 
| `TFSEC_VERSION` | “v1.28.1" | Define a versão do tfsec | 

# Mais padrões
<a name="devops-more-patterns-pattern-list"></a>

**Topics**
+ [Acesse aplicativos de contêineres de forma privada no Amazon EKS usando a AWS PrivateLink e um Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Associe um AWS CodeCommit repositório em um Conta da AWS com o Amazon SageMaker AI Studio Classic em outra conta](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Automatize a criação de contas usando o Landing Zone Accelerator em AWS](automate-account-creation-lza.md)
+ [Automatizar a adição ou atualização de entradas de registro do Windows usando o AWS Systems Manager](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [Automatize backups para instâncias de banco de dados do Amazon RDS para PostgreSQL usando o AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatize a implantação de aplicativos aninhados usando o AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatize a implantação do Node Termination Handler no Amazon EKS usando um pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Automatize a configuração RabbitMQ no Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.md)
+ [Automatize a replicação de instâncias do Amazon RDS em Contas da AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Crie e implante automaticamente um aplicativo Java no Amazon EKS usando um CI/CD pipeline](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Geração automática de um modelo do PynamoDB e funções de CRUD para o Amazon DynamoDB por meio de uma aplicação do Python](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Valide e implante automaticamente políticas e funções do IAM usando CodePipeline macros do IAM Access Analyzer e AWS CloudFormation](automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.md)
+ [Faça backup dos servidores Sun SPARC no emulador Stromasys Charon-SSP no Nuvem AWS](back-up-sun-sparc-servers-in-the-stromasys-charon-ssp-emulator-on-the-aws-cloud.md)
+ [Crie um pipeline de dados para ingerir, transformar e analisar dados do Google Analytics usando o AWS DataOps Development Kit](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Crie um PAC de servidor corporativo da Micro Focus com o Amazon EC2 Auto Scaling e o Systems Manager](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Crie um pipeline para imagens de contêiner reforçadas usando o EC2 Image Builder e o Terraform](build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.md)
+ [Crie um MLOps fluxo de trabalho usando o Amazon SageMaker AI e o Azure DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [Centralize a resolução de DNS usando o Microsoft AWS Managed Microsoft AD Active Directory local](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Limpe os recursos AWS do Account Factory for Terraform (AFT) com segurança após a perda do arquivo de estado](clean-up-aft-resources-safely-after-state-file-loss.md)
+ [Configure o registro em log para aplicativos.NET no Amazon CloudWatch Logs usando NLog](configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.md)
+ [Copie imagens de contêineres do Amazon ECR entre e Contas da AWS Regiões da AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Crie uma imagem de contêiner Docker personalizada SageMaker e use-a para treinamento de modelos no AWS Step Functions](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Crie um pipeline em regiões da AWS que não oferecem suporte à AWS CodePipeline](create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.md)
+ [Crie alarmes para métricas personalizadas usando a detecção de CloudWatch anomalias da Amazon](create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection.md)
+ [Personalize os nomes das funções padrão usando AWS CDK aspectos e escotilhas de escape](customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.md)
+ [Implantação de um pipeline que detecta simultaneamente problemas de segurança em diversos entregáveis de código](deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.md)
+ [Implante e gerencie um data lake de tecnologia sem servidor na Nuvem AWS usando a infraestrutura como código](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Implante aplicativos em contêineres em AWS IoT Greengrass V2 execução como um contêiner Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Implante recursos e pacotes do Kubernetes usando o Amazon EKS e um repositório de charts do Helm no Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Implante aplicativos de várias pilhas usando o AWS CDK com TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Implemente a validação de segurança de codificação em tempo real usando um servidor MCP com Kiro e outros assistentes de codificação](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [Implante instâncias de cluster de failover do SQL Server na Amazon EC2 e na Amazon FSx usando o Terraform](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Implemente as automações de segurança para a AWS WAF solução usando o Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Desenvolva assistentes avançados baseados em bate-papo com IA generativa usando RAG e prompting ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Habilite a Amazon GuardDuty condicionalmente usando modelos AWS CloudFormation](enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.md)
+ [Configuração do ajuste de escala automático orientado por eventos no Amazon EKS usando o Identidade de Pods do Amazon EKS e o KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Gere recomendações personalizadas e reclassificadas usando o Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Receber notificações do Amazon SNS quando o estado de chave de uma chave do AWS KMS mudar](get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.md)
+ [Governança de conjuntos de permissões para várias contas usando o Account Factory para Terraform](govern-permission-sets-aft.md)
+ [Identificação automática de imagens de contêineres duplicadas ao migrar para um repositório do Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Implementação do versionamento de APIs baseado em caminhos usando domínios personalizados no Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Melhore o desempenho operacional habilitando o Amazon DevOps Guru em várias regiões e contas da AWS e OUs com o AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Instale o agente SSM nos nós de trabalho do Amazon EKS usando o Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Integre o controlador universal Stonebranch com o AWS Mainframe Modernization](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Modernização do mainframe: DevOps iniciada AWS com o Rocket Software Enterprise Suite](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Gerencie conjuntos de Centro de Identidade do AWS IAM permissões como código usando AWS CodePipeline](manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.md)
+ [Gerencie conjuntos de AWS permissões dinamicamente usando o Terraform](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [Gerencie aplicativos de contêineres on-premises configurando o Amazon ECS Anywhere com o AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Gerencie AWS Organizations políticas como código usando o AWS CodePipeline Amazon Bedrock](manage-organizations-policies-as-code.md)
+ [Migre registros de DNS em massa para uma zona hospedada privada do Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Migre aplicativos hospedados no IIS para a Amazon EC2 usando o appcmd.exe](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Monitore o uso de uma Amazon Machine Image compartilhada em várias Contas da AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Organize um pipeline de ETL com validação, transformação e particionamento usando AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Automatize blue/green as implantações dos bancos de dados globais do Amazon Aurora usando os princípios de IaC](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Preserve o espaço IP roteável em projetos de VPC com várias contas para sub-redes sem workload](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Provisione um produto Terraform AWS Service Catalog usando um repositório de código](provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.md)
+ [Execute tarefas do AWS Systems Manager Automation de forma síncrona a partir do AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Configure um CI/CD pipeline para cargas de trabalho híbridas no Amazon ECS Anywhere usando o AWS CDK e GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configure um CI/CD pipeline para migração de banco de dados usando o Terraform](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Configure a infraestrutura Multi-AZ para um SQL Server Always On FCI usando a Amazon FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [Configure bots de UiPath RPA automaticamente na Amazon EC2 usando a AWS CloudFormation](set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.md)
+ [Autenticação simplificada de aplicações com TLS mútua no Amazon ECS usando o Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Integração de locatários na arquitetura de SaaS para o modelo de silo usando C\$1 e o AWS CDK](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [Use o Terraform para habilitar automaticamente a Amazon GuardDuty para uma organização](use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.md)
+ [Como usar agentes do Amazon Bedrock para automatizar a criação de controles de entrada de acesso no Amazon EKS por meio de prompts baseados em texto](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Valide o código do Account Factory for Terraform (AFT) localmente](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Visualize os resultados do AI/ML modelo usando o Flask e o AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)