

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Terraform リソースについて
<a name="resources"></a>

 AWS CloudFormation と Terraform の両方が存在する主な理由は、クラウドリソースの作成とメンテナンスです。しかし、クラウドリソースとは具体的に何でしょうか。また、CloudFormation リソースと Terraform リソースは同じものですか? 答えは...はい、いいえです。このガイドでは、CloudFormation と Terraform を使用して Amazon Simple Storage Service (Amazon S3) バケットを作成する例を示します。

次の CloudFormation コード例では、サンプル 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"
            }
        }
    }
}
```

次の Terraform コード例では、同じ Amazon S3 バケットを作成します。

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

Terraform の場合、プロバイダーはリソースを定義し、開発者はそれらのリソースを宣言して設定します。プロバイダーは、次のセクションでこのガイドで説明する概念です。Terraform の例では、S3 バケットの設定のいくつかに対して完全に別々のリソースを作成します。設定用に個別のリソースを作成することは、必ずしも Terraform AWS プロバイダーが AWS リソースを処理する方法の典型ではありません。ただし、この例は重要な違いを示しています。CloudFormation リソースは [CloudFormation リソース仕様](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html)によって厳密に定義されますが、Terraform にはそのような要件はありません。Terraform では、リソースの概念は少し不明瞭です。

単一のリソースが何であるかを定義する正確なガードレールについてはツールが異なる場合がありますが、一般的に、*クラウドリソース*とは、クラウド内に存在し、作成、更新、または削除できる特定のエンティティです。したがって、関係するリソースの数に関係なく、前の 2 つの例ではどちらも、 内でまったく同じ設定でまったく同じモノを作成します AWS アカウント。