LoginSignup
17
7

More than 1 year has passed since last update.

【Terraform】terraform importを試す

Posted at

はじめに

以前、業務でterraform importコマンドを利用してAWSの既存インフラストラクチャをimportする機会があったので、知識定着のためにも記事にしてみたいと思います。

terraform importとは?

既存のインフラストラクチャをTerraformの管理下に置くためのコマンドになります。

AWS上で変更した内容をTerraform上にも反映させる時に使用します。

前提

今回は事前に作成したこちらのTerraformのコードを利用しております。

こちらの記事でご紹介しているコードと同様のものになります。

Terraformのバージョン情報は、以下になります。

% terraform --version
Terraform v1.1.8
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v4.22.0

Your version of Terraform is out of date! The latest version
is 1.2.5. You can update by downloading from https://www.terraform.io/downloads.html
%

terraform importするための手順

今回は、試験用にAWSにS3を作成してimportしてみたいと思います。

①S3の作成

AWSに手動で以下の設定のS3を作成しておきます。
※S3の作成方法や説明については割愛とさせて頂きます。

設定項目 内容 備考
BucketName testbucket0717 設定
AWS Region ap-northeast-1 デフォルト
Object Ownership ACLs disabled デフォルト
Block Public Access settings for this bucket Block all public access デフォルト
Bucket Versioning Disabled デフォルト
Tags Key:Name
Value:testbucket
設定
Default encryption Disable デフォルト

s3.tfの作成

作業ディレクトリ(ec2_create_code)直下に以下の内容でs3.tfファイルを作成します。
※この時点では、内容は空にしておきます。

s3.tf
# ----------------------------------
# S3
# ----------------------------------
resource "aws_s3_bucket" "s3" {
}

terraform importの実行

以下のコマンドを実行します。

実行例
terraform import aws_s3_bucket.s3 バケット名

Import successful!が出力されたら問題なし。

実行例
% terraform import aws_s3_bucket.s3 testbucket0717
aws_s3_bucket.s3: Importing from ID "testbucket0717"...
aws_s3_bucket.s3: Import prepared!
  Prepared aws_s3_bucket for import
aws_s3_bucket.s3: Refreshing state... [id=testbucket0717]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

%

実行すると、作業ディレクトリにterraform.tfstateが作成されます。
terraform.tfstateは、管理対象のインフラストラクチャと構成に関する状態を保存するためのファイルになります。

terraform.tfstate(一部省略)
{
  "version": 4,
  "terraform_version": "1.1.8",
  "serial": 70,
  "lineage": "*****************************",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "aws_s3_bucket",
      "name": "s3",
      "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "acceleration_status": "",
            "acl": null,
            "arn": "arn:aws:s3:::testbucket0717",
            "bucket": "testbucket0717",
            "bucket_domain_name": "testbucket0717.s3.amazonaws.com",
            "bucket_prefix": null,

terraform planの実行

terraform planを実行し、importされた内容が反映されていることを確認します。
※こちらのコマンドは、リソースに変更を加える前の確認で使用するコマンドであるため、何度実行しても問題ありません。

  # aws_s3_bucket.s3 will be updated in-place
  ~ resource "aws_s3_bucket" "s3" {
      + force_destroy               = false
        id                          = "testbucket0717"
      ~ tags                        = {
          - "Name" = "testbucket" -> null
        }
      ~ tags_all                    = {
          - "Name" = "testbucket"
        } -> (known after apply)
        # (8 unchanged attributes hidden)


        # (2 unchanged blocks hidden)
    }

s3.tfファイルについては変更されていないため、このまま apply を実行するとリソースが削除されてしまいます。
terraform importを実行しても、tfファイル自体は変更されません。

s3.tfの修正

terraform.tfstateを確認しながら、s3.tfを修正する。

s3.tf
# ----------------------------------
# S3
# ----------------------------------
resource "aws_s3_bucket" "s3" {
  bucket = "testbucket0717"

  tags = {
    Name = "testbucket"
  }

  tags_all = {
    Name = "testbucket"
  }
}

⑤再度、terraform planの実行

再度、terraform planを実行し、変更箇所が存在しないことを確認。

実行結果でNo changesが表示されていたら問題ありません。

No changes. Your infrastructure matches the configuration.

参考

17
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7