【Terraform】TF管理下S3の再取り込み

IT
  • すでにTerraform化したリソースをコンソール上から変更してしまった場合に、その変更をtfファイルに反映させる流れを確認
  • 今回は【Terraform】S3のdeployでapplyしたS3バケットにライフサイクル設定をコンソールから追加
  • 追加したライフサイクル設定をtfファイルに取り込む
  • 大まかな流れは【Terraform】既存S3の取り込みと共通

手順

  • ①tfファイルにライフサイクル設定を追加
  • ②リソースのインポート
  • ③planで差分比較→修正
  • ④tfファイルと既存リソースの紐付け(apply)

①tfファイルにライフサイクル設定を追加

  • 元々の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バケットのライフサイクル設定
  • s3-lifecycle-test
    • tfファイルでの定義名。任意の値でOK
      • プログラムコードで設定する関数名や変数名のイメージ
    • importコマンド実行時に使用する
  • bucket = aws_s3_bucket.s3-terraform-test.bucket
    • tfファイル上で定義したS3バケットを指定
    • バケット名を直接入力しても良いが、変数化しておいた方がスマート
  • rule{} = ライフサイクルルールの定義ブロック。idはこの時点で必要
    • id = tfファイルの定義名。任意の値でOK

②リソースのインポート

  • importコマンドを実行
terraform import aws_s3_bucket_lifecycle_configuration.s3-lifecycle-test 【バケット名】

③planで差分比較→修正

  • planコマンドを実行
terraform plan
  • 先ほど作成したtfファイルでは具体的な設定値の定義が足りなかったため、ライフサイクル設定を以下のように修正
    • tfstateファイルから値を参照して、転記
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
    • 差分のないapplyのため、リソースには影響なし
terraform apply
  • 【推測】このコマンド実行によって、システム的にmain.tfと実際のリソースが紐づくのでやっておいた方が良い?
  • 差分が無い場合はNo changesApply complete! Resources: 0 added, 0 changed, 0 destroyed.が出力される

コメント

タイトルとURLをコピーしました