Provisione um produto Terraform no AWS Service Catalog usando um repositório de código - 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á.

Provisione um produto Terraform no AWS Service Catalog usando um repositório de código

Criado pelo Dr. Rahul Sharad Gaikwad (AWS) e Tamilselvan P (AWS)

Ambiente: PoC ou piloto

Tecnologias: Infraestrutura; DevOps

Workload: todas as outras workloads

Serviços da AWS: AWS Service Catalog; Amazon EC2

Resumo

O AWS Service Catalog oferece suporte ao provisionamento de autoatendimento com governança para suas HashiCorp configurações do Terraform. Se você usa o Terraform, pode usar o Service Catalog como a única ferramenta para organizar, governar e distribuir suas configurações do Terraform na AWS em grande escala. Você pode acessar os principais recursos do Service Catalog, incluindo a catalogação da infraestrutura padronizada e pré-aprovada como modelos de código (IaC), controle de acesso, provisionamento de recursos em nuvem com acesso de privilégios mínimos, controle de versão, compartilhamento com milhares de contas da AWS e marcação. Usuários finais, como engenheiros, administradores de banco de dados e cientistas de dados, veem uma lista de produtos e versões aos quais têm acesso e podem implantá-los por meio de uma única ação.

Esse padrão ajuda você a implantar recursos da AWS usando o código do Terraform. O código do Terraform no GitHub repositório é acessado por meio do Service Catalog. Usando essa abordagem, você integra os produtos aos seus fluxos de trabalho existentes do Terraform. Os administradores podem criar portfólios do Service Catalog e adicionar produtos do AWS Launch Wizard a eles usando o Terraform.

A seguir estão os benefícios dessa solução:

  • Devido ao recurso de reversão no Service Catalog, se ocorrer algum problema durante a implantação, você poderá reverter o produto para uma versão anterior.

  • Você pode identificar facilmente as diferenças entre as versões do produto. Isso ajuda você a resolver problemas durante a implantação.

  • Você pode configurar uma conexão de repositório no Service Catalog, como para GitHub GitLab, ou AWS. CodeCommit Você pode fazer alterações no produto diretamente por meio do repositório.

Para obter informações sobre os benefícios gerais do AWS Service Catalog, consulte O que é Service Catalog.

Pré-requisitos e limitações

Pré-requisitos

Arquitetura

Pilha de tecnologias de destino

  • AWS Service Catalog

  • AWS Lambda

Arquitetura de destino

Diagrama de arquitetura do provisionamento de um produto Terraform no Service Catalog a partir de um repositório de código

O diagrama mostra o seguinte fluxo de trabalho:

  1. Quando uma configuração do Terraform está pronta, um desenvolvedor cria um arquivo.zip que contém todo o código do Terraform. O desenvolvedor carrega o arquivo.zip no repositório de código conectado ao Service Catalog.

  2. Um administrador associa o produto Terraform a um portfólio no Service Catalog. O administrador também cria uma restrição de lançamento que permite que os usuários finais provisionem o produto.

  3. No Service Catalog, os usuários finais iniciam recursos da AWS usando a configuração do Terraform. Eles podem escolher a versão do produto a ser implantada.

Ferramentas

Ferramentas e serviços da AWS

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

  • O AWS Service Catalog ajuda você a gerenciar de modo centralizado os catálogos de serviços de TI aprovados para a AWS. Os usuários finais podem implantar rapidamente somente os serviços de TI aprovados de que precisam, seguindo as restrições definidas pela organização.

Outros serviços

  • Go é uma linguagem de programação de código aberto compatível com o Google.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

Se você precisar de exemplos de configurações do Terraform que você possa implantar por meio do Service Catalog, você pode usar as configurações no repositório GitHub Amazon Macie Organization Setup Using Terraform. O uso das amostras de código neste repositório não é obrigatório.

Práticas recomendadas

  • Em vez de fornecer os valores das variáveis no arquivo de configuração do Terraform (terraform.tfvars), configure os valores das variáveis ao iniciar o produto por meio do Service Catalog.

  • Conceda acesso ao portfólio somente para usuários ou administradores específicos.

  • 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

(Opcional) Instale o Docker.

Se você quiser executar as funções do AWS Lambda em seu ambiente de desenvolvimento, instale o Docker. Para obter mais informações, consulte Install Docker Engine (Instalar mecanismo do Docker) na documentação do Docker.

DevOps engenheiro

Instale o AWS Service Catalog Engine para Terraform.

  1. Insira o comando a seguir para clonar o repositório AWS Service Catalog Engine for Terraform.

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. Navegue até o diretório raiz do repositório clonado.

  3. Insira o comando da a seguir. Isso instala o motor.

    run ./bin/bash/deploy-tre.sh -r

    A região da AWS definida em seu perfil padrão não é usada durante a instalação automatizada. Em vez disso, você fornece a Região ao executar esse comando.

DevOps engenheiro, administrador da AWS
TarefaDescriçãoHabilidades necessárias

Crie uma conexão com o GitHub repositório.

  1. Faça login no AWS Management Console e, em seguida, abra o console Developer Tools. Você pode acessar o console do Developer Tools escolhendo um serviço como AWS CodePipeline CodeCommit, AWS ou AWS CodeDeploy.

  2. No painel de navegação esquerdo, escolha Configurações e, em seguida, escolha Conexões.

  3. Escolha Criar conexão.

  4. Selecione o repositório em que você mantém o código-fonte do Terraform. Por exemplo, você pode escolher Bitbucket ou GitHub Enterprise Server. GitHub

  5. Insira um nome para a conexão e escolha Connect.

  6. Quando solicitado, autentique o repositório.

    Após a conclusão da autenticação, a conexão é criada e o status muda para ativo.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Crie o produto Service Catalog.

  1. Abra o console do AWS Service Catalog.

  2. Navegue até a seção Administração e escolha Lista de produtos.

  3. Escolha Criar produto.

  4. Na página Criar produto, na seção Detalhes do produto, escolha o tipo de produto externo. O Service Catalog usa esse tipo de produto para oferecer suporte aos produtos Terraform Community Edition.

  5. Insira um nome e um proprietário para o produto Service Catalog.

  6. Selecione Especificar seu repositório de código usando um CodeStar provedor.

  7. Insira as seguintes informações para o seu repositório:

    • Conecte-se ao seu provedor usando Conexões de código da AWS — Selecione a conexão que você criou anteriormente.

    • Repositório — Selecione o repositório.

    • Filial — Selecione a ramificação.

    • Caminho do arquivo de modelo — Escolha o caminho em que o arquivo de modelo de código está armazenado. O nome do arquivo deve terminar comtar.gz.

  8. Em Nome e descrição da versão, forneça informações sobre a versão do produto.

  9. Escolha Criar produto.

Administrador da AWS

Crie um portfólio.

  1. Abra o console do AWS Service Catalog.

  2. Navegue até a seção Administração e escolha Portfólios.

  3. Escolha Criar portfólio

  4. Insira os seguintes valores:

    • Portfolio nameSample terraform

    • Descrição do portfólioSample portfolio for Terraform configurations

    • Proprietário — Suas informações de contato, como e-mail

  5. Escolha Criar.

Administrador da AWS

Adicione o produto Terraform ao portfólio.

  1. Abra o console do AWS Service Catalog.

  2. Navegue até a seção Administração e escolha Lista de produtos.

  3. Selecione o produto Terraform que você criou anteriormente.

  4. Escolha Ações e, em seguida, escolha Adicionar produto ao portfólio.

  5. Escolha o Sample terraform portfólio.

  6. Escolha Adicionar produto ao portfólio.

Administrador da AWS

Crie a política de acesso.

  1. Abra o console do AWS Identity and Access Management (IAM).

  2. No painel de navegação, escolha Policies.

  3. No painel de conteúdo, escolha Criar política.

  4. Escolha a opção JSON.

  5. Insira o exemplo de política JSON em Política de acesso na seção Informações adicionais desse padrão.

  6. Escolha Próximo.

  7. Na página Revisar e criar, na caixa Nome da política, digiteTerraformResourceCreationAndArtifactAccessPolicy.

  8. Escolha Criar política.

Administrador da AWS

Crie uma política de confiança personalizada.

  1. Abra o console do AWS Identity and Access Management (IAM).

  2. No painel de navegação, escolha Roles.

  3. Escolha Criar Perfil.

  4. Em Tipo de entidade confiável, escolha Política de confiança personalizada.

  5. No editor de políticas JSON, insira o exemplo de política JSON em Política de confiança na seção Informações adicionais desse padrão.

  6. Escolha Próximo.

  7. Em Políticas de permissões, escolha as TerraformResourceCreationAndArtifactAccessPolicy que você criou anteriormente.

  8. Escolha Próximo.

  9. Em Detalhes da função, na caixa Nome da função, insiraSCLaunch-product

    Importante: O nome da função deve começar comSCLaunch.

  10. Selecione Criar função.

Administrador da AWS

Adicione uma restrição de lançamento ao produto Service Catalog.

  1. Faça login no AWS Management Console como usuário com permissões administrativas.

  2. Abra o console do AWS Service Catalog.

  3. No painel de navegação, escolha Portfólios.

  4. Escolha o portfólio que você criou anteriormente.

  5. Na página Detalhes do portfólio, escolha a guia Restrições e escolha Criar restrição.

  6. Em Produto, selecione o produto Terraform que você criou anteriormente.

  7. Em Restrição de inicialização, em Método, escolha Inserir nome da função.

  8. Na caixa Nome da função, insiraSCLaunch-product.

  9. Escolha Criar.

Administrador da AWS

Conceda acesso ao produto.

  1. Abra o console do AWS Service Catalog.

  2. No painel de navegação, escolha Portfólios.

  3. Escolha o portfólio que você criou anteriormente.

  4. Escolha a guia Acesso e, em seguida, escolha Conceder acesso.

  5. Escolha a guia Funções e, em seguida, selecione a função que deve ter acesso para implantar esse produto.

  6. Escolha Conceder acesso.

Administrador da AWS

Lance o produto.

  1. Faça login no AWS Management Console como usuário com permissões para implantar o produto Service Catalog.

  2. Abra o console do AWS Service Catalog.

  3. No painel de navegação, escolha Produtos.

  4. Escolha o produto que você criou anteriormente e, em seguida, escolha Lançar produto.

  5. Insira o nome do produto e defina os parâmetros necessários.

  6. Escolha Lançar produto.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Valide a implantação.

Há duas máquinas de estado do AWS Step Functions para o fluxo de trabalho de provisionamento do Service Catalog:

  • ManageProvisionedProductStateMachine—O Service Catalog invoca essa máquina de estado ao provisionar um novo produto Terraform e ao atualizar um produto provisionado existente do Terraform.

  • TerminateProvisionedProductStateMachine—O Service Catalog invoca essa máquina de estado ao encerrar um produto provisionado existente do Terraform.

Você verifica os registros da máquina de ManageProvisionedProductStateMachine estado para confirmar se o produto foi provisionado.

  1. Faça login no AWS Management Console e, em seguida, abra o console do AWS Step Functions.

  2. No painel de navegação esquerdo, escolha Máquinas estaduais.

  3. EscolhaManageProvisionedProductStateMachine.

  4. Na lista Execuções, insira a ID do produto provisionado para localizar a execução.

    Observação: os nomes dos buckets de back-end do arquivo de estado começam comsc-terraform-engine-state-.

  5. Valide se todos os recursos necessários foram criados na conta.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Exclua produtos provisionados.

  1. Faça login no AWS Management Console como usuário com permissões para implantar o produto Service Catalog.

  2. Abra o console do AWS Service Catalog.

  3. No painel de navegação à esquerda, escolha Produtos provisionados.

  4. Selecione o produto que você criou.

  5. Na lista Ações, escolha Encerrar.

  6. Na caixa de texto de confirmaçãoterminate, insira e escolha Encerrar produto provisionado.

  7. Repita essas etapas para encerrar todos os produtos provisionados.

DevOps engenheiro

Remova o AWS Service Catalog Engine para Terraform.

  1. Faça login no AWS Management Console como usuário com permissões administrativas.

  2. Abra o console Amazon S3.

  3. No painel de navegação, escolha Buckets.

  4. Selecione o sc-terraform-engine-logging-XXXX bucket.

  5. Escolha Vazio.

  6. Repita as etapas de 4 a 5 para os seguintes buckets:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. Abra o CloudFormation console da AWS e, em seguida, valide que você está na região correta da AWS.

  8. No painel de navegação à esquerda, escolha Pilhas.

  9. Selecione eSAM-TRE, em seguida, escolha Excluir. Espere até que a pilha seja excluída.

  10. Selecione eBootstrap-TRE, em seguida, escolha Excluir. Espere até que a pilha seja excluída.

Administrador da AWS

Recursos relacionados

Documentação da AWS

Documentação do Terraform

Mais informações

Política de acesso

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

Política de confiança

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }