

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

# 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)<br />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)<br />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.