Terraform リソースについて - AWS 規範ガイダンス

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

Terraform リソースについて

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 リソース仕様によって厳密に定義されますが、Terraform にはそのような要件はありません。Terraform では、リソースの概念は少し不明瞭です。

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