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, da 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 A flexibilidade da solução permite que os usuários interajam com o sistema por meio de suas interfaces preferidas, mantendo processos padronizados.

A arquitetura configurável do pipeline pode ser adaptada para atender aos diferentes requisitos organizacionais. O exemplo de implementação se concentra no provisionamento da Amazon Virtual Private Cloud (Amazon VPC) e do Amazon Simple Storage Service (Amazon S3). O padrão aborda com eficácia os desafios comuns de gerenciamento de recursos em nuvem, padronizando as solicitações em toda a organização e fornecendo pontos de integração consistentes. Essa abordagem facilita que as equipes solicitem e gerenciem recursos e, ao mesmo tempo, garante 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

  • Novos recursos exigem a adição manual de terragrunt.hcl arquivos à configuração do repositório.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para saber a disponibilidade da região, consulte AWS Serviços por região. Para endpoints específicos, consulte Endpoints e cotas de serviço e escolha o link para o serviço.

Arquitetura

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

Fluxo de trabalho para automatizar o provisionamento de recursos com GitHub Actions e Terraform.

O diagrama da arquitetura mostra 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 permite a implantação controlada e automatizada de recursos em todo o mundo Contas da AWS. O processo de implantação mantém o gerenciamento adequado do estado e o controle de acesso por meio de buckets dedicados do Amazon S3 e funções do IAM 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 os padrões genéricos de infraestrutura são aplicados, facilitando a escalabilidade e a manutenção de grandes propriedades 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.

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

Épicos

TarefaDescriçãoHabilidades 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 workflow-trigger.yml arquivos deployment.yml e que estão localizados na pasta .github/workflows do repositório de origem.

DevOps engenheiro

Configure as funções e permissões do IAM.

Para configurar as funções e permissões 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 à função do IAM para criar o back-end e os recursos desejados. Para obter mais informações, consulte um exemplo de política para criar uma VPC com a Amazon VPC junto com o bucket de back-end do Amazon S3 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 main ramificação para armazenar o terragrunt.hcl arquivo, bem como as saídas e os registros de alterações após a criação do recurso.

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

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Execute o pipeline usando curl.

Para executar o pipeline usando 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 sequencie-o antes de enviar a solicitação. Para obter mais informações, consulte os exemplos de cargas 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 seus próprios valores para o seguinte:

    • YOUR_GITHUB_TOKENcom seu token de acesso GitHub pessoal

    • OWNERcom o nome do proprietário do repositório

    • REPOcom nome do repositório

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

DevOps engenheiro

Valide os resultados da 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 AWS Management Console seguinte:

    1. Para Amazon VPC:

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

      • Verifique se há uma nova VPC com tags que correspondam aos parâmetros da sua solicitação.

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

    2. Para Amazon S3:

      • Navegue até os buckets do Amazon S3.

      • Em compartimentos de uso geral, verifique se há um novo intervalo que corresponda aos seus parâmetros de solicitação.

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

Você também pode fazer a verificação cruzada dos recursos criados usando o output.json arquivo criado no repositório que está dentro do mesmo recurso do terragrunt.hcl arquivo.

DevOps engenheiro
TarefaDescriçãoHabilidades 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 usando o mesmo endpoint da API, mas modifique a carga da seguinte forma:

    • RequestTypeMude para delete noRequestParameters.

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

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

  3. Após a conclusão do fluxo de trabalho, verifique se o changelog.json arquivo dentro da pasta de recursos mostra o status dedeleted.

  4. Verifique a remoção de recursos usando AWS Management Console o.

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 estão as etapas da execução do pipeline:

  1. Valida o formato de carga útil JSON - Garante que a configuração JSON de entrada seja estruturada adequadamente e contenha 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. Baixa o código necessário do Terraform e do Terragrunt - Recupera a versão especificada do código do recurso e das 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 criação de VPC

A seguir está um exemplo de código para a criação de bucket de estado de back-end do Terraform:

state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"

Veja a seguir um exemplo de carga útil para criar uma VPC com a Amazon VPC, vpc_cidr onde define as especificações do bloco CIDR para a VPC. O bucket de estado do Terraform é mapeado para uma variável definida nos terraform arquivos. O ref parâmetro 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" } } ] } }

RequestParameterssão usados para rastrear o status da solicitação na seção de pipeline e tfstate são criados com base nessas informações. Os parâmetros a seguir contêm metadados e informações de controle:

  • RequestId— Identificador exclusivo para a solicitação

  • RequestType— Tipo de operação (criar, atualizar ou excluir)

  • 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 do aplicativo

  • DivisionName— Divisão da organização

  • EnvironmentId— Ambiente (por exemplo, dev e prod)

  • Suffix— Identificador adicional para os recursos

ResourceParameterscontêm uma configuração específica do recurso que mapeia as variáveis definidas nos arquivos do Terraform. Todas as variáveis personalizadas que precisam ser passadas para os módulos do Terraform devem ser incluídas noResourceParameters. O parâmetro vpc_cidr é obrigatório para a Amazon VPC.