使用Terraform创建S3存储桶的方法
概要:对于以下内容,请用中文进行简略描述。
为了更深入地了解Terraform,我使用Terraform创建了AWS的s3存储桶。我将记录下来以供备忘。
目录结构
使用Terraform工具创建S3存储桶后,预计将得到以下目录结构。
.
├── .terraform
├── modules/
│ └── aws_s3_bucket.tf
├── .gitignore
├── .terraform.lock.hcl
├── main.tf
├── providers.tf
├── terraform.tfstate
├── terraform.tfstate.backup
├── terraform.tfvars
├── variables.tf
├── versions.tf
└── README.md
构建过程
这次的设置可以在一个文件中完成,但为了兼顾学习,我们决定将文件分离并进行构建。
版本.tf
由於需要設置Terraform和AWS的版本,所以需要在versions.tf中進行記述。
terraform {
// Terraform本体に対するバージョン制約
required_version = ">= 0.15"
required_providers {
aws = {
source = "hashicorp/aws"
// Providerに対するバージョン制約
version = "4.59.0"
}
}
}
创建 providers.tf
由于需要指定提供商,因此我们将创建一个providers.tf文件。本次我们使用AWS,因此需要指定AWS的提供商。此外,我们还需要写入连接AWS所需的认证信息。
※由于需要写入AWS的认证信息,我们将其定义为变量。
// 変数は、"${var.〇〇}"と記述する
provider "aws" {
region = "${var.region}"
profile = "${var.profile}"
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
}
创建variables.tf
在providers.tf中,我们已经写下了AWS的认证信息变量,因此在variables.tf中我们将详细说明AWS的认证信息。
※ 认证信息的设置有多种方法,您也可以参考下面的网站进行设置。
- Terraformでクレデンシャルを読み込む方法あれこれ
# 変数の設定
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "region"{}
variable "profile"{}
创建terraform.tfvars
在terraform.tfvars中记录AWS的身份验证信息。
aws_access_key="********************" // aws_access_key_idを記述
aws_secret_key="****************************************" // aws_secret_access_keyを記述
region="**************" // 好きなregionを設定
profile="*********" // 設定していれば記述する
创建 main.tf
由于在modules文件的aws_s3_bucket.tf中设置了创建S3存储桶的说明,需要写入加载aws_s3_bucket.tf的说明内容。
※ 文件名可以是任意名称。
module "s3" {
source = "./modules"
}
// moduleの書き方
module "リソースの名前" {
source = "モジュールを定義したフォルダのパス"
パラメーター名 = "パラメーター値"
}
创建 aws_s3_bucket.tf
首先,在根目录下创建一个名为”modules”的文件夹。接下来,在该文件夹内创建一个名为”aws_s3_bucket.tf”的文件,并在其中编写创建S3桶的代码。
* 文件名和文件夹名可以任意取名。
// S3のbucketを作成する
resource "aws_s3_bucket" "this" {
bucket = "terraform-sample-bucket"
tags = {
Name = "terraform-sample"
}
}
// パブリックアクセスをブロックする設定
resource "aws_s3_bucket_public_access_block" "this" {
bucket = aws_s3_bucket.this.bucket
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_account_public_access_block" "this" {
block_public_acls = false
block_public_policy = false
}
创建.gitignore文件
请在创建.gitignore文件后,写入以下代码。
**/.terraform/*
.terraform.lock.hcl
# .tfstate files
*.tfstate
*.tfstate.backup
*.tfstate.*
# .tfstate files
*.tfvars
*.tfvars.*
crash.log
override.tf
override.tf.json
*_override.tf
*_override.tf.json
到这里为止,代码的构建已经完成了。
使用方法(终端操作)
初始化Terraform配置文件。
执行terraform init命令,初始化包含Terraform配置文件的工作目录。
terraform init
确认构建的环境是否正常运行。
我会运行以下的命令来确认本次设置内容是否正常运行。如果出现错误,请阅读错误信息并修正。
terraform plan
将所建立的环境同步到AWS。
我想要基于构建的代码创建S3存储桶,所以执行以下命令。通过在选项中添加”-auto-approve”,可以强制全部确认都以”Yes”进行。
terraform plan
# -auto-approveを付与
terraform apply -auto-approve
删除在AWS上构建的环境。
如果您认为此次在AWS上建立的存储桶是不必要的,可以使用以下命令进行删除。通过添加选项”-auto-approve”,可以强制以”Yes”的方式进行所有确认。
terraform destroy
# -auto-approveを付与
terraform destroy -auto-approve
上传到git时的注意事项
请不要将以下文件上传到GitHub,出于安全考虑:
.terraform.lock.hcl
terraform.tfvars
terraform.tfstate
terraform.tfstate.backup
.gitignore
作者编写的代码
因为我已将我自己编写的代码上传到GitHub,请确认是否有任何需要检查的事项。
评论
这次我第一次使用Terraform进行了AWS配置的构建。我对构建方法、配置方法和操作方式有了大致的了解,所以我希望能利用我学到的知识,不断地创建所需的环境。