使用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配置的构建。我对构建方法、配置方法和操作方式有了大致的了解,所以我希望能利用我学到的知识,不断地创建所需的环境。

广告
将在 10 秒后关闭
bannerAds