

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 AWS Service Catalog usando um repositório de código
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Resumo
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [oferece suporte ao provisionamento de autoatendimento com governança para suas HashiCorp configurações do Terraform.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Se você usa o Terraform, pode usar o Service Catalog como a única ferramenta para organizar, controlar e distribuir suas configurações do Terraform em grande escala. AWS Você pode acessar os principais recursos do Service Catalog, incluindo catalogação de modelos padronizados e pré-aprovados de infraestrutura como 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 pessoas e marcação. Contas da AWS 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 AWS recursos 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 AWS Launch Wizard produtos 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 ou GitLab. 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](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Pré-requisitos e limitações
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Um GitHub, BitBucket, ou outro repositório que contenha arquivos de configuração do Terraform no formato ZIP.
+ AWS Serverless Application Model [Interface de linha de comando (AWS SAM CLI), instalada.](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Vá, [instalado](https://go.dev/doc/install).
+ [Python versão 3.9, instalado.](https://www.python.org/downloads/release/python-3913/) AWS SAM A CLI requer essa versão do Python.
+ Permissões para escrever e executar AWS Lambda funções e permissões para acessar e gerenciar produtos e portfólios do Service Catalog.

## Arquitetura
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Diagrama de arquitetura do provisionamento de um produto Terraform no Service Catalog a partir de um repositório de código\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


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.

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

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

## Ferramentas
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**Serviços da AWS**
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda 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.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)ajuda você a gerenciar centralmente catálogos de serviços de TI aprovados. 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**
+ O [Go](https://go.dev/doc/install) é uma linguagem de programação de código aberto compatível com o Google.
+ [Python](https://www.python.org/) é 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](https://github.com/aws-samples/aws-macie-customization-terraform-samples) Setup Using Terraform. O uso das amostras de código neste repositório não é obrigatório.

## Práticas recomendadas
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ 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.
+ 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 [Conceder privilégios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [melhores práticas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) na documentação AWS Identity and Access Management (IAM).

## Épicos
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Configure sua estação de trabalho local.
<a name="set-up-your-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| (Opcional) Instale o Docker. | Se você quiser executar as AWS Lambda funções em seu ambiente de desenvolvimento, instale o Docker. Para obter mais informações, consulte [Install Docker Engine](https://docs.docker.com/engine/install/) (Instalar mecanismo do Docker) na documentação do Docker. | DevOps engenheiro | 
| Instale o AWS Service Catalog motor para o Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps engenheiro, administrador da AWS | 

### Conecte o GitHub repositório
<a name="connect-the-github-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma conexão com o GitHub repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 

### Crie um produto Terraform no Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o produto Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Crie um portfólio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Adicione o produto Terraform ao portfólio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Crie a política de acesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Crie uma política de confiança personalizada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Adicione uma restrição de lançamento ao produto Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Conceda acesso ao produto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 
| Lance o produto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide a implantação. | Há duas máquinas de AWS Step Functions estado para o fluxo de trabalho de provisionamento do Service Catalog:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Você verifica os registros da máquina de `ManageProvisionedProductStateMachine` estado para confirmar se o produto foi provisionado.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps engenheiro | 

### Limpeza da infraestrutura
<a name="clean-up-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua produtos provisionados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps engenheiro | 
| Remova o AWS Service Catalog motor do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrador da AWS | 

## Recursos relacionados
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS documentação**
+ [Começando com um produto Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Documentação do Terraform**
+ [Instalação do Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Configuração de backend do Terraform](https://developer.hashicorp.com/terraform/language/backend)
+ [Documentação do Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Mais informações
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**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*"
                    ]
                }
            }
        }
    ]
}
```