2022.04.03  

【terraform】importをS3で試す

Terraform    

terraform importコマンドを実行するとクラウド環境のリソースをterraformで管理できるようになります。

試しにAWSで下記のS3バケットを作成します。

次にimport用のコードを記述します。
config.tfは基本的な設定で、importするリソースについてのコードはS3.tfに記述しています。

# config.tf

terraform {
  required_version = "~> 1.1"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.5"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}
# S3.tf

resource "aws_s3_bucket" "tf-bucket-20220403-1" {
}

下記のようにimportコマンドを実行します。

$ # フォーマット
$ terraform import aws_s3_bucket.bucket bucket-name
$ # 実行例
$ terraform import aws_s3_bucket.tf-bucket-20220403-1 tf-bucket-20220403-1

aws_s3_bucket.tf-bucket-20220403-1: Import prepared!
  Prepared aws_s3_bucket for import

Import successful!

importの後にterraform planを実行すると、terraform.tfstateファイルにリソース情報が記録されたことを確認できます。(tagsの"Name" = "tf-bucket1"は最初のマネージメントコンソールで設定しています。)

$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions
are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_s3_bucket.tf-bucket-20220403-1 will be updated in-place
  ~ resource "aws_s3_bucket" "tf-bucket-20220403-1" {
      + acl                         = "private"
      + force_destroy               = false
        id                          = "tf-bucket-20220403-1"
      ~ tags                        = {
          - "Name" = "tf-bucket1" -> null
        }
      ~ tags_all                    = {
          - "Name" = "tf-bucket1"
        } -> (known after apply)
        # (8 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

ただ、importはあくまでクラウド環境のリソースをterraform管理下にするだけなので、この状態でterraform applyを実行するとS3.tfファイルの内容でリソースの設定が更新されます。

つまり、クラウド環境の設定は下記の設定で上書きされます。

# S3.tf

resource "aws_s3_bucket" "tf-bucket-20220403-1" {
}

上書きしないようにするには更新されたterraform.tfstateファイルを参考にパラメータを設定する必要があります。

設定完了後、terraform planを実行し、差分が表示されなければクラウド環境とs3.tfの内容が同期できたということになります。

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信