

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

# 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)