はじめに

クラウドインテグレーション事業部の三木です。
今回は既存のAWS環境を、tfstateファイルとしてローカルに読み込むterraform importを試しました。

準備

今回terraform importする対象のVPC

今回はこのVPCを読み込みます。

Terraformに必要なファイルの作成

ディレクトリ構造

miki1:Downloads miki$ tree
.
├── backend.tf
├── main.tf
└── variable.tf

0 directories, 3 files
miki1:Downloads miki$

backend.tfの内容

backend.tfでは読み込むリソースのプロバイダー情報を記載しています。

miki1:Downloads miki$ cat backend.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.44.0"
    }
  }

  required_version = "~> 1.2.5"
}

provider "aws" {
  region     = "ap-northeast-1"
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
}
miki1:Downloads miki$

main.tfの内容

main.tfでは読み込むAWSリソース情報を記載しています。
今回はVPCの情報をterraform importで読み込みます。
したがって、main.tfのresourceブロックではVPC情報を宣言しています。
また、引数は不要です。

miki1:Downloads miki$ cat main.tf
resource "aws_vpc" "main" {
}

miki1:Downloads miki$

variable.tfの内容

variable.tfでは他のファイルで利用している変数定義を記載しています。

miki1:Downloads miki$ cat variable.tf
variable "aws_access_key" {}
variable "aws_secret_key" {}
miki1:Downloads miki$

terraform import実行

main.tfがあるディレクトリ上で、terraform initを実行します。

miki1:Downloads miki$ ls
backend.tf  main.tf     variable.tf
miki1:Downloads miki$
miki1:Downloads miki$ terraform init

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 3.44.0"...
- Installing hashicorp/aws v3.44.0...
- Installed hashicorp/aws v3.44.0 (signed by HashiCorp)
.....省略
miki1:Downloads miki$

今回読み込むVPC IDを確認します。

公式ドキュメントを参考に、確認したVPC IDを用いてterraform importコマンドを実行します[1]。
なお、 以下コマンドで利用しているaws_vpc(リソースタイプ)、main(ローカル名)に関してはmain.tfで宣言している内容です[2]。
コマンド実行後アクセスキー、シークレットアクセスキーを問われるので入力します。

miki1:Downloads miki$ terraform import aws_vpc.main vpc-xxxxxxxxxxxxxxxxx
var.aws_access_key
  Enter a value: 

var.aws_secret_key
  Enter a value: 

.....省略
miki1:Downloads miki$

tfstateファイルが作成されていることを確認します。

miki1:Downloads miki$ ls -la
total 56
drwx------@  9 miki  IRET\Domain Users   288  7 19 00:38 .
drwxr-xr-x+ 53 miki  IRET\Domain Users  1696  7 18 23:55 ..
-rw-r--r--@  1 miki  IRET\Domain Users  6148  7 18 23:42 .DS_Store
drwxr-xr-x   3 miki  IRET\Domain Users    96  7 19 00:26 .terraform
-rw-r--r--   1 miki  IRET\Domain Users  1109  7 19 00:26 .terraform.lock.hcl
-rw-r--r--   1 miki  IRET\Domain Users   272  7 18 23:35 backend.tf
-rw-r--r--   1 miki  IRET\Domain Users    31  7 19 00:01 main.tf
-rw-r--r--   1 miki  IRET\Domain Users  1545  7 19 00:38 terraform.tfstate
-rw-r--r--   1 miki  IRET\Domain Users    57  7 18 23:39 variable.tf
miki1:Downloads miki$

tfstateファイルの中身を確認します。
attributesに記載されているものが、 読み込んだVPCの情報です。

miki1:Downloads miki$ cat terraform.tfstate
{
  "version": 4,
  "terraform_version": "1.2.5",
  "serial": 1,
  "lineage": "4a947d89-561d-ebda-4746-cef0340d1858",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "aws_vpc",
      "name": "main",
      "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
      "instances": [
        {
          "schema_version": 1,
          "attributes": {
            "arn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:vpc/vpc-xxxxxxxxxxxxxxxxx",
            "assign_generated_ipv6_cidr_block": false,
            "cidr_block": "10.0.0.0/16",
            "default_network_acl_id": "acl-XXXXXXXXXXXXXXXXX",
            "default_route_table_id": "rtb-XXXXXXXXXXXXXXXXX",
            "default_security_group_id": "sg-XXXXXXXXXXXXXXXXX",
            "dhcp_options_id": "dopt-XXXXXXXX",
            "enable_classiclink": false,
            "enable_classiclink_dns_support": false,
            "enable_dns_hostnames": false,
            "enable_dns_support": true,
            "id": "vpc-xxxxxxxxxxxxxxxxx",
            "instance_tenancy": "default",
            "ipv6_association_id": "",
            "ipv6_cidr_block": "",
            "main_route_table_id": "rtb-XXXXXXXXXXXXXXXXX",
            "owner_id": "xxxxxxxxxxxx",
            "tags": {
              "Name": "terraform-import"
            },
            "tags_all": {
              "Name": "terraform-import"
            }
          },
          "sensitive_attributes": [],
          "private": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=="
        }
      ]
    }
  ]
}
miki1:Downloads miki$

まとめ

一からTerraformで環境を作成するのは挑戦しにくく感じていたのですが、既存のAWS環境をterraform importで読み込むことでTerraformの理解を少しずつ深めることができると思いました。
コンソールでAWSリソースを作成、terraform importをすることで簡単にコードを書くことができるので、AWSリソースを作成するコードを書きたいものの、どの様に書けば良いか分からない人におすすめです。

参考記事

[1]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc#import
[2]https://www.terraform.io/language/resources/syntax


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/