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á.
Automatize a implantação de conjuntos de pilhas usando a AWS e a AWS CodePipeline CodeBuild
Thiyagarajan Mani, Mihir Borkar e Raghu Gowda, da Amazon Web Services
Resumo
Aviso: não AWS CodeCommit está mais disponível para novos clientes. Os clientes existentes do AWS CodeCommit podem continuar usando o serviço normalmente. Saiba mais
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 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
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. 
- 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 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

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. 
- 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 Notification 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
Serviços da AWS
- CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS. 
- CodeBuildA AWS é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação. 
- CodeCommitA AWS é 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 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 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 é 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 Notification Service (Amazon SNS) 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
Práticas recomendadas
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
| Tarefa | Descrição | 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. | 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. | Administrador da AWS, administrador da plataforma | 
| Tarefa | Descrição | Habilidades necessárias | 
|---|---|---|
| Clone o repositório de códigos. | 
 | AWS DevOps | 
| Crie tópicos do SNS. | Você pode usar o  
 | AWS DevOps | 
| Crie funções do IAM para CI/CD componentes. | Você pode usar o  
 | AWS DevOps | 
| Crie um CodeCommit repositório e um pipeline de código para seu aplicativo. | Você pode usar o  
 | AWS DevOps | 
| Tarefa | Descrição | 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: 
 | Desenvolvedor de aplicativos, Engenheiro de dados | 
| Adicione artefatos do aplicativo. | Atualize o repositório do aplicativo usando um CloudFormation modelo. notaEssa solução oferece suporte à implantação de apenas um único CloudFormation modelo. 
 | Desenvolvedor de aplicativos, Engenheiro de dados | 
| Atualize o arquivo de configuração de implantação. | Atualize o arquivo  
 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: 
 | Desenvolvedor de aplicativos, Engenheiro de dados | 
Solução de problemas
| 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 {nome do ambiente} | 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  | 
Recursos relacionados
- GitHub automated-code-pipeline-stackset-repositório de implantação 
- Habilitar todos os atributos na organização (documentação do AWS Organizations) 
- Registre um administrador delegado ( CloudFormation documentação da AWS) 
- Metas em nível de conta para conjuntos de pilhas gerenciados por serviços (documentação da AWS) CloudFormation 
Mais informações
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.

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-1edev-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 e777788889999) 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" }