本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
了解 Terraform 资源
两者兼 AWS CloudFormation 而有之 Terraform 的主要原因是云资源的创建和维护。但是云资源到底是什么? CloudFormation资源和 Terraform 资源是一回事吗? 答案是... 是的和不是。为了说明这一点,本指南提供了一个示例,说明如何使用 CloudFormation 然后使用 Terraform 创建亚马逊简单存储服务 (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 Prov AWS ider 处理 AWS 资源的典型方式。但是,这个例子显示了一个重要的区别。虽然 CloudFormation 资源是由CloudFormation资源规范严格定义的,但 Terraform 没有这样的要求。在 Terraform 中,资源的概念更加模糊。
尽管在定义单一资源的确切护栏方面,这些工具可能有所不同,但一般而言,云资源是指存在于云中的任何特定实体,可以创建、更新或删除。因此,不管涉及多少资源,前面的两个示例都创建了完全相同的东西,其中的设置完全相同 AWS 账户。