

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

# Conceitos básicos do suporte Terraform para AWS SAM CLI
<a name="gs-terraform-support"></a>

Este tópico aborda como começar a usar a interface de linha de AWS Serverless Application Model comando (AWS SAMCLI) comTerraform.

Para fornecer feedback e enviar solicitações de atributos, crie um [Problema GitHub](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform).

**Topics**
+ [Pré-requisitos AWS SAM CLI Terraform](#gs-terraform-support-prerequisites)
+ [Usando comandos AWS SAMCLI com Terraform](#gs-terraform-support-using)
+ [Configurado para projetos Terraform](#gs-terraform-support-projects)
+ [Configurar para o Terraform Cloud](#gs-terraform-support-cloud)

## Pré-requisitos AWS SAM CLI Terraform
<a name="gs-terraform-support-prerequisites"></a>

Preencha todos os pré-requisitos para começar a usar o AWS SAMCLI com seus projetos Terraform.

1. 

**Instalar ou atualizar a AWS SAM CLI**

   Para verificar se você tem o AWS SAMCLI instalado, execute o seguinte:

   ```
   $ sam --version
   ```

   Se o AWS SAMCLI já estiver instalado, a saída exibirá uma versão. Para atualizar para a versão mais recente, consulte [Atualizar o AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

   Para obter instruções sobre como instalar o AWS SAMCLI junto com todos os seus pré-requisitos, consulte [Instale o AWS SAM CLI](install-sam-cli.md).

1. 

**Instalar o Terraform**

   Para verificar se você instalou o Terraform, execute o seguinte:

   ```
   $ terraform -version
   ```

   Para instalarTerraform, consulte [Instalar Terraform](https://developer.hashicorp.com/terraform/downloads) no *registro Terraform*.

1. 

**Instale Docker para testes locais**

   O AWS SAM CLI exige Docker para testes locais. Para instalar o Docker, consulte [Instalando o Docker para usar com o AWS SAMCLI](install-docker.md).

## Usando comandos AWS SAMCLI com Terraform
<a name="gs-terraform-support-using"></a>

Ao executar um comando AWS SAMCLI compatível, use a `--hook-name` opção e forneça o `terraform` valor. Este é um exemplo:

```
$ sam local invoke --hook-name terraform
```

Você pode configurar essa opção em seu arquivo AWS SAMCLI de configuração com o seguinte:

```
hook_name = "terraform"
```

## Configurado para projetos Terraform
<a name="gs-terraform-support-projects"></a>

Conclua as etapas deste tópico para usar o AWS SAMCLI com projetos Terraform .

Nenhuma configuração adicional é necessária se você criar seus AWS Lambda artefatos fora do Terraform projeto. Veja [Usando o AWS SAMCLI with Terraform para depuração e teste locais](using-samcli-terraform.md) para começar a usar AWS SAMCLI o.

Se você criar seus artefatos Lambda em seus projetos Terraform, deverá fazer o seguinte:

1. Instalar o Python 3.8 ou mais recente

1. Instale a ferramenta Make.

1. Defina sua lógica de construção de artefatos Lambda em seu projeto Terraform.

1. Defina um recurso `sam metadata` para informar sua lógica de construção AWS SAMCLI.

1. Use o AWS SAMCLI `sam build` comando para criar seus artefatos do Lambda.

### Instalar o Python 3.8 ou mais recente
<a name="gs-terraform-support-projects-python"></a>

Python3.8 ou mais recente é necessário para uso com o. AWS SAMCLI Quando você executa `sam build`, cria AWS SAMCLI que contêm comandos `makefiles` Python para criar seus artefatos do Lambda.

Para obter instruções de instalação, consulte [Descarregando Python](https://wiki.python.org/moin/BeginnersGuide/Download) no *Guida para iniciantes* do Python.

Verifique se o Python 3.8 ou mais recente foi adicionado ao caminho da sua máquina executando:

```
$ python --version
```

A saída deve exibir uma versão do Python que seja 3.8 ou mais recente.

### Instale a ferramenta Make
<a name="gs-terraform-support-projects-make"></a>

O GNU [Make](https://www.gnu.org/software/make/) é uma ferramenta que controla a geração de executáveis e outros arquivos não fonte para seu projeto. O AWS SAMCLI cria `makefiles` que dependem dessa ferramenta para criar seus artefatos Lambda.

Se você não tiver Make instalado em sua máquina local, instale-o antes de prosseguir.

Para Windows, você pode instalar usando o [Chocolatey](https://chocolatey.org/). Para obter instruções, consulte [Usando o Chocolatey](https://www.technewstoday.com/install-and-use-make-in-windows/#using-chocolatey) em *Como instalar e usar o “Make”* no Windows

### Defina a lógica de construção dos artefatos Lambda
<a name="gs-terraform-support-projects-logic"></a>

Use o tipo de recurso `null_resource` Terraform para definir sua lógica de criação do Lambda. Veja a seguir um exemplo que usa um script de construção personalizado para criar uma função do Lambda.

```
resource "null_resource" "build_lambda_function" {
    triggers = {
        build_number = "${timestamp()}" 
    }

    provisioner "local-exec" {
        command =  substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function"
    }
}
```

### Defina o recurso sam metadata
<a name="gs-terraform-support-projects-metadata"></a>

O recurso `sam metadata` é um tipo de recurso `null_resource` Terraform que AWS SAMCLI fornece as informações necessárias para localizar seus artefatos do Lambda. É necessário um recurso `sam metadata` exclusivo para cada função ou camada do Lambda em seu projeto. Para saber mais sobre esse tipo de recurso, consulte [null\$1resource](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) no *registro Terraform*.

**Para definir um recurso sam metadata**

1. Nomeie seu recurso começando com `sam_metadata_` para identificá-lo como um recurso sam metadata.

1. Defina as propriedades do artefato Lambda dentro do bloco `triggers` do seu recurso.

1. Especifique o `null_resource` que contém sua lógica de construção do Lambda com o argumento `depends_on`.

   Veja um exemplo de modelo a seguir:

   ```
   resource "null_resource" "sam_metadata_..." {
     triggers = {
       resource_name = resource_name
       resource_type = resource_type
       original_source_code = original_source_code
       built_output_path = built_output_path
     }
     depends_on = [
       null_resource.build_lambda_function # ref to your build logic
     ]
   }
   ```

   O seguinte é um exemplo do recurso `sam metadata`:

   ```
   resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" {
       triggers = {
           resource_name = "aws_lambda_function.publish_book_review"
           resource_type = "ZIP_LAMBDA_FUNCTION"
           original_source_code = "${local.lambda_src_path}"
           built_output_path = "${local.building_path}/${local.lambda_code_filename}"
       }
       depends_on = [
           null_resource.build_lambda_function
       ]
   }
   ```

O conteúdo do seu recurso `sam metadata` variará com base no tipo de recurso Lambda (função ou camada) e no tipo de embalagem (ZIP ou imagem). Para obter mais informações e exemplos, consulte [recurso de metadados do sam](terraform-sam-metadata.md).

Quando você configura um recurso `sam metadata` e usa um comando AWS SAMCLI compatível, o AWS SAMCLI gera o arquivo de metadados antes de executar o comando AWS SAMCLI. Depois de gerar esse arquivo, você pode usar a `--skip-prepare-infra` opção with future AWS SAMCLI commands para pular o processo de geração de metadados e economizar tempo. Essa opção só deve ser usada se você não tiver feito nenhuma alteração na infraestrutura, como criar novas funções do Lambda ou novos endpoints de API.

### Use o AWS SAMCLI para criar seus artefatos Lambda
<a name="gs-terraform-support-projects-build"></a>

Use o AWS SAMCLI `sam build` comando para criar seus artefatos do Lambda. Quando você executa `sam build`, o AWS SAM CLI faz o seguinte:

1. Procura recursos `sam metadata` em seu projeto Terraform para conhecer e localizar seus recursos do Lambda.

1. Inicia sua lógica de criação do Lambda para criar seus artefatos do Lambda.

1. Cria um `.aws-sam` diretório que organiza seu Terraform projeto para uso com os AWS SAMCLI `sam local` comandos.

**Para compilar com sam build**

1. No diretório que contém seu módulo raiz Terraform, execute o seguinte:

   ```
   $ sam build --hook-name terraform
   ```

1. Para criar uma função ou camada específica do Lambda, execute o seguinte

   ```
   $ sam build --hook-name terraform lambda-resource-id
   ```

   O ID do recurso Lambda pode ser o nome da função do Lambda ou o endereço completo do Terraform recurso, como `aws_lambda_function.list_books` ou `module.list_book_function.aws_lambda_function.this[0]`.

Se o código-fonte da função ou outros arquivos de configuração Terraform estiverem localizados fora do diretório que contém o módulo raiz Terraform, você precisará especificar o local. Use a opção `--terraform-project-root-path` para especificar o caminho absoluto ou relativo para o diretório de nível superior que contém esses arquivos. Este é um exemplo:

```
$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo
```

#### Crie usando um contêiner
<a name="gs-terraform-support-projects-build-container"></a>

Ao executar o AWS SAMCLI `sam build` comando, você pode configurar o AWS SAMCLI para criar seu aplicativo usando um Docker contêiner local.

**nota**  
Você deve ter a Docker instalada e configurada. Para instruções, consulte [Instalando o Docker para usar com o AWS SAMCLI](install-docker.md).

**Para construir usando um contêiner**

1. Crie um `Dockerfile` que contenha as ferramentas Terraform, Python e Make. Você também deve incluir o runtime da função do Lambda.

   O seguinte é um exemplo de `Dockerfile`:

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:2
   
   RUN yum -y update \
       && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
       less libcurl-devel openssl openssl-devel readline-devel xz-devel \
       zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
       && rm -rf /var/cache/yum
   
   RUN yum -y install make \
       && yum -y install zip
   
   RUN yum install -y yum-utils \
       && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
       && yum -y install terraform \
       && terraform --version
   
   # AWS Lambda Builders
   RUN amazon-linux-extras enable python3.8
   RUN yum clean metadata && yum -y install python3.8
   RUN curl -L get-pip.io | python3.8
   RUN pip3 install aws-lambda-builders
   RUN ln -s /usr/bin/python3.8 /usr/bin/python3
   RUN python3 --version
   
   VOLUME /project
   WORKDIR /project
   
   ENTRYPOINT ["sh"]
   ```

1. Use [https://docs.docker.com/engine/reference/commandline/build/](https://docs.docker.com/engine/reference/commandline/build/) para criar sua Docker imagem.

   Este é um exemplo:

   ```
   $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
   ```

1. Execute o AWS SAMCLI `sam build` comando com `--use-container` as `--build-image` opções e.

   Este é um exemplo:

   ```
   $ sam build --use-container --build-image terraform-build:v1
   ```

### Próximas etapas
<a name="gs-terraform-support-projects-next"></a>

Para começar a usar o AWS SAM CLI com seus projetos Terraform, consulte [Usando o AWS SAMCLI with Terraform para depuração e teste locais](using-samcli-terraform.md).

## Configurar para o Terraform Cloud
<a name="gs-terraform-support-cloud"></a>

É altamente recomendável que você use Terraform v1.6.0 ou mais recente. Se estiver usando uma versão mais antiga, deverá gerar um arquivo de plano Terraform no local. O arquivo do plano local AWS SAM CLI fornece as informações necessárias para realizar testes e depuração locais.

**Para gerar um arquivo de plano local**
**nota**  
Essas etapas não são necessárias para Terraform v1.6.0 ou são mais recentes. Para começar a usar o AWS SAM CLI comTerraform Cloud, consulte[Uso do AWS SAM CLI com a Terraform](using-samcli-terraform.md).

1. **Configure um token de API** – O tipo de token dependerá do seu nível de acesso. Para saber mais, consulte [Implantações](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens) na *documentação do Terraform Cloud*.

1. **Defina sua variável de ambiente de token de API** – Veja a seguir um exemplo da linha de comando:

   ```
   $ export TOKEN="<api-token-value>"
   ```

1. **Obtenha seu ID de execução** — No Terraform Cloud console, localize o ID de Terraform execução da execução que você gostaria de usar com AWS SAMCLI o.

   O ID da execução está localizado no caminho do rastro de navegação da sua execução.  
![\[Caminho do rastro em Terraform Cloud que exibe o ID de execução.\]](http://docs.aws.amazon.com/pt_br/serverless-application-model/latest/developerguide/images/terraform-01.png)

1. **Busque o arquivo do plano** – Usando seu token de API, obtenha seu arquivo de plano local. Veja a seguir um exemplo da linha de comando:

   ```
   curl \
      --header "Authorization: Bearer $TOKEN" \
      --header "Content-Type: application/vnd.api+json" \
      --location \
      https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \
      > custom_plan.json
   ```

Agora você está pronto para usar o AWS SAM CLI com Terraform Cloud. Ao usar um comando AWS SAMCLI compatível, use a opção `--terraform-plan-file` para especificar o nome e o caminho do seu arquivo de plano local. Este é um exemplo:

```
$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json
```

Veja a seguir um comando de exemplo que usa a `sam local start-api`:

```
$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json
```

Para um aplicativo de amostra que você pode usar com esses exemplos, consulte [api\$1gateway\$1v2\$1tf\$1cloud](https://github.com/aws-samples/aws-sam-terraform-examples/tree/main/ga/api_gateway_v2_tf_cloud) no *repositório aws-samples GitHub*.

### Próximas etapas
<a name="gs-terraform-support-cloud-next"></a>

Para começar a usar o  AWS SAMCLI com Terraform Cloud, consulte [Usando o AWS SAMCLI with Terraform para depuração e teste locais](using-samcli-terraform.md).