了解 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 中,資源的概念更模糊。

雖然工具在定義單一資源的確切護欄方面可能不同,但通常來說,雲端資源是存在於雲端中且可建立、更新或刪除的任何特定實體。因此,無論涉及多少資源,上述兩個範例都會在 中建立完全相同的設定 AWS 帳戶。