手順
- ①tfファイルにライフサイクル設定を追加
- ②リソースのインポート
- ③planで差分比較→修正
- ④tfファイルと既存リソースの紐付け(apply)
①tfファイルにライフサイクル設定を追加
provider "aws" {
region = "ap-northeast-1" # 使用するAWSリージョン
}
resource "aws_s3_bucket" "s3-terraform-test" {
bucket = "【バケット名】" # ユニークなS3バケット名
}
- そこに以下のライフサイクル設定のリソースを定義して、追加
- Terraform上ではS3バケットとライフサイクル設定は別リソース扱いとなる
resource "aws_s3_bucket_lifecycle_configuration" "s3-lifecycle-test" {
bucket = aws_s3_bucket.s3-terraform-test.bucket
rule {
id = "test-lifecycle"
status = "Enabled"
}
}
aws_s3_bucket_lifecycle_configuration
= リソースの種類を定義
s3-lifecycle-test
- tfファイルでの定義名。任意の値でOK
- プログラムコードで設定する関数名や変数名のイメージ
- importコマンド実行時に使用する
bucket = aws_s3_bucket.s3-terraform-test.bucket
- tfファイル上で定義したS3バケットを指定
- バケット名を直接入力しても良いが、変数化しておいた方がスマート
rule{}
= ライフサイクルルールの定義ブロック。id
はこの時点で必要
②リソースのインポート
terraform import aws_s3_bucket_lifecycle_configuration.s3-lifecycle-test 【バケット名】
③planで差分比較→修正
terraform plan
- 先ほど作成したtfファイルでは具体的な設定値の定義が足りなかったため、ライフサイクル設定を以下のように修正
resource "aws_s3_bucket_lifecycle_configuration" "s3-lifecycle-test" {
bucket = aws_s3_bucket.s3-terraform-test.bucket
rule {
id = "test-lifecycle"
status = "Enabled"
# 必要なルールの詳細を追加
expiration {
days = 1
expired_object_delete_marker = false
}
}
}
- 修正したら、再度
plan
コマンドを実行し、差分がなくなるまで繰り返す
No changes
と出力されたら差分がなくなったのでOK
④tfファイルと既存リソースの紐付け(apply)
- 差分がなくなったら、
apply
コマンドでリソースをdeploy
terraform apply
- 【推測】このコマンド実行によって、システム的にmain.tfと実際のリソースが紐づくのでやっておいた方が良い?
- 差分が無い場合は
No changes
、Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
が出力される
コメント