

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

# Entendendo os recursos do Terraform
<a name="resources"></a>

O principal motivo da existência de ambos AWS CloudFormation e do Terraform é a criação e manutenção de recursos em nuvem. Mas o que exatamente é um recurso de nuvem? E CloudFormation recursos e recursos do Terraform são a mesma coisa? A resposta é... sim e não. Para ilustrar isso, este guia fornece um exemplo do uso CloudFormation e, em seguida, do Terraform para criar um bucket do Amazon Simple Storage Service (Amazon S3).

O exemplo de CloudFormation código a seguir cria uma amostra de bucket do Amazon S3.

```
{
    "myS3Bucket": {
        "Type": "AWS::S3::Bucket",
        "Properties": {
            "BucketName": "my-s3-bucket",
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "ServerSideEncryptionByDefault": {
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "PublicAccessBlockConfiguration": {
                "BlockPublicAcls": true,
                "BlockPublicPolicy": true,
                "IgnorePublicAcls": true,
                "RestrictPublicBuckets": true
            },
            "VersioningConfiguration": {
                "Status": "Enabled"
            }
        }
    }
}
```

O exemplo de código do Terraform a seguir cria um bucket Amazon S3 idêntico.

```
resource "aws_s3_bucket" "myS3Bucket" {
  bucket = "my-s3-bucket"
}

resource "aws_s3_bucket_server_side_encryption_configuration" "bucketencryption" {
  bucket = aws_s3_bucket.myS3Bucket.id
  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"
    }
  }
}

resource "aws_s3_bucket_public_access_block" "publicaccess" {
  bucket                  = aws_s3_bucket.myS3Bucket.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

resource "aws_s3_bucket_versioning" "versioning" {
  bucket = aws_s3_bucket.myS3Bucket.id
  versioning_configuration {
    status = "Enabled"
  }
}
```

Para o Terraform, um provedor define o recurso e, em seguida, os desenvolvedores declaram e configuram esses recursos. Provedores são um conceito que este guia abordará na próxima seção. O exemplo do Terraform cria recursos completamente separados para várias configurações do bucket do S3. Criar recursos separados para configurações não é necessariamente típico de como o Terraform AWS Provider trata AWS os recursos. No entanto, esse exemplo mostra uma distinção importante. Embora um CloudFormation recurso seja estritamente definido pela [especificação do CloudFormation recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html), o Terraform não tem esse requisito. No Terraform, o conceito de recurso é um pouco mais nebuloso.

Embora as ferramentas possam diferir em relação às grades de proteção exatas que definem o que é um único recurso, em geral, um *recurso de nuvem* é qualquer entidade específica que existe na nuvem e que pode ser criada, atualizada ou excluída. Portanto, independentemente de quantos recursos estejam envolvidos, os dois exemplos anteriores criam exatamente a mesma coisa com exatamente as mesmas configurações em um Conta da AWS.