Crie uma estrutura de orquestração de recursos baseada em API usando Actions e Terragrunt GitHub - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie uma estrutura de orquestração de recursos baseada em API usando Actions e Terragrunt GitHub

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

Resumo

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

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. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Arquitetura

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.

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.

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

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

Serviços da AWS

  • O Amazon DynamoDB é 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) 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) é 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) 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 é 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 é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

  • O Terragrunt é 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.

Práticas recomendadas

  • 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 e Práticas recomendadas de segurança na documentação do IAM.

Épicos

TarefaDescriptionHabilidades necessárias

Inicialize o GitHub repositório.

Para inicializar o GitHub repositório, use as seguintes etapas:

  1. Crie um novo GitHub repositório para hospedar o código do pipeline.

  2. Importe os arquivos deployment.yml e workflow-trigger.yml que estão localizados na pasta .github/workflows do repositório de origem.

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:

  1. Crie uma função do IAM com as relações de confiança necessárias para que as Ações se conectem às GitHub ações AWS usando um provedor de identidade (IdP) do OpenID Connect (OIDC).

  2. Anexe as permissões necessárias ao perfil do IAM para criar o backend e os recursos desejados. Para obter mais informações, consulte uma política de amostra para criar uma VPC com o Amazon VPC, juntamente com o bucket do Amazon S3 dedicado ao backend e a tabela do DynamoDB.

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. GitHub Configure as seguintes variáveis:

  • Segredos do repositório

    • PAT_TOKEN— Seu token de acesso pessoal com as permissões para realizar GitHub operações

  • Variáveis do repositório

DevOps engenheiro

Crie a estrutura do repositório.

Para criar a estrutura do repositório, use as seguintes etapas:

  1. Crie uma nova pasta na ramificação main para armazenar o arquivo terragrunt.hcl, assim como as saídas e os logs de alterações após a criação dos recursos.

  2. Nomeie a pasta usando letras minúsculas, de acordo com o tipo de recurso que você deseja provisionar por meio dela. A pasta será usada posteriormente na carga útil sem alterações. Para obter mais informações, consulte uma estrutura de amostra para o Amazon S3 e a Amazon VPC no repositório.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Execute o pipeline usando curl.

Para executar o pipeline por meio do curl, use as seguintes etapas:

  1. Crie um arquivo payload.json em seu diretório local. Siga a estrutura definida para o arquivo de carga útil e converta-o em string antes de enviar a solicitação. Para obter mais informações, consulte as cargas úteis de amostra no repositório.

  2. Envie a solicitação em seu terminal usando a GitHub API, conforme mostrado no exemplo a seguir:

    curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -d @payload.json \ https://api.github.com/repos/OWNER/REPO/actions/workflows/workflow-trigger.yml/dispatches

    No exemplo, forneça os seus próprios valores para os seguintes itens:

    • YOUR_GITHUB_TOKENcom seu token de acesso GitHub pessoal

    • OWNER com o nome do proprietário do repositório

    • REPO com o nome do repositório

Para obter mais informações sobre o processo de execução do pipeline, consulte Informações adicionais.

DevOps engenheiro

Validação dos resultados referentes à execução do pipeline

Para validar os resultados, use as seguintes etapas:

  1. Monitore a execução do fluxo de trabalho de GitHub ações na guia Ações do seu repositório.

  2. Após a execução bem-sucedida dos fluxos de trabalho, verifique a criação do recurso usando o Console de gerenciamento da AWS seguinte:

    1. Para a Amazon VPC:

      • Navegue até o serviço Amazon VPC no local especificado. Região da AWS

      • Verifique a existência de uma nova VPC com etiquetas que correspondem aos parâmetros da sua solicitação.

      • Verifique o bloco CIDR e outras configurações.

    2. Para Amazon S3:

      • Acesse os buckets do Amazon S3.

      • Em Buckets de uso geral, verifique a existência de um novo bucket que corresponda aos parâmetros da sua solicitação.

      • Verifique o nome do bucket do S3 e outras configurações.

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
TarefaDescriptionHabilidades necessárias

Envie uma solicitação de limpeza.

Para excluir recursos que não são mais necessários, use as seguintes etapas:

  1. Envie a solicitação de exclusão utilizando o mesmo endpoint da API, mas modifique a carga útil da seguinte forma:

    • Altere RequestType para delete em RequestParameters.

    • Mantenha todos os demais parâmetros idênticos à solicitação create.

  2. Monitore o processo de exclusão em GitHub Ações.

  3. Após a conclusão do fluxo de trabalho, verifique se o arquivo changelog.json na pasta do recurso apresenta o status como deleted.

  4. Verifique a remoção dos recursos usando o Console de gerenciamento da AWS.

DevOps engenheiro

Recursos relacionados

AWS Blogs

AWS service (Serviço da AWS) documentação

GitHub recursos

Mais informações

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

  2. Assume a função do IAM especificada - autentica e assume a função do IAM necessária para as operações AWS

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

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