概要
Terraform
について理解を深める為、Terraform
を使用してAWSのs3バケットを作成してみました。毎度ながら、備忘録の意味も含めて記載します。
ディレクトリー構成
Terraform
を使用してS3 bucket
の作成が完了すると下記のディレクトリー構成になるかと思われます。
.
├── .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
構築手順
今回の設定ですと1つのファイルでできますが、勉強も兼ねてる為、ファイルを分離させて構築を行なっております。
versions.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の認証情報も記述しています。
※ 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の認証情報を記載します。
※ 認証情報の設定は、他にもやり方があるので、下記のサイトを参考に設定して頂いても大丈夫です。
# 変数の設定
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の作成
S3バケットを作成する記述をmodules
ファイルのaws_s3_bucket.tf
に設定している為、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 apply
# -auto-approveを付与
terraform apply -auto-approve
AWSに構築した環境を消去
今回AWSに構築したバケットが不要であれば、下記のコマンドを叩き消去します。オプションに、-auto-approve
を付与する事で、強制的に全ての確認をYes
で進める事ができます。
terraform destroy
# -auto-approveを付与
terraform destroy -auto-approve
gitにあげる際の注意事項
下記に記載するファイルはセキュリティーの観点から、git hubにあげないで下さい。
.terraform.lock.hcl
terraform.tfvars
terraform.tfstate
terraform.tfstate.backup
.gitignore
著者の作成したコード
自信が作成したコードをgit hub
に上げましたので、確認事項があればご確認頂ければと思います。
感想
今回初めてTerraform
を使用してAWSの設定の構築を行いました。一通りの構築方法や設定方法、動かし方について理解したので、今回学んだ事を活かして、構築したい環境をどんどん作成してきたいと思います。