TerraformでAWSの構成を読み取るぞ（Terraform import)

# 前書き
Terraform import については、Qiitaでお2人も記載してくれていますので、参照ください。

[tyasuさん：terraform importの使い方メモ](http://qiita.com/tyasu/items/32b23dd76d25f7af712f)
[kt_higaさん：terraform importを試してみた](http://qiita.com/kt_higa/items/b0ae7024fd20947a2f87)


同じスタンスで記載してもしょうがないので、勉強している最中に違う観点でいくつかTerraform import について記載します。

#環境
Windows にTerraform(2017/7/18時点：v0.9.11)を[インストール](http://qiita.com/miwato/items/b7e66cb087666c3f9583)
AWSには、EC2,ELB,RDS,S3 など以前手作業で作った環境があります。

# 準備
まずは、最低限Terraformの利用には、access_key, secret_keyが必要です。
[こちら](http://qiita.com/miwato/items/291c7a8c557908de5833)を参照してキーを確認しましょう。
Windowsの作業フォルダにファイルを作成して、確認したキーを記載します。
※ ファイル名は、<任意の名前>.tf としてください。
   ここでは、c:\work フォルダを作業フォルダとします。

```
provider "aws" {                                            ・・・・決め打ちです。
	region		= "ap-northeast-1"                          ・・・・リージョンを記載（ap-notheast-1：日本リージョン）
	access_key 	= "XXXXXXXXXXXXXXXXX"                       ・・・・access_keyを登録
	secret_key	= "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ・・・・secret_keyを登録
}

※ ほとんどが決め打ちです。
   今回は、AWS環境のため"aws" となります。

```

# インポート！

叩くコマンドは、簡単！

```
AWSのマネジメントコンソールから、インスタンスID（赤枠部分）を確認して、コマンドのオプションに指定します。
C:\> cd work
C:\work> terraform import aws_instance.<任意の名前> <インスタンスID>

```
![題.png](https://qiita-image-store.s3.amazonaws.com/0/109620/b3ebb13b-b714-83fc-461b-7970780f5751.png)

ここでは、こんな感じでコマンドを叩いてみました。
もともとの環境では、タグ名を「batchserver01」という名前を付けていましたが、ここではわざと「batch01」に変更しています。
タグ名と合わせても勿論OKです。


![import02.png](https://qiita-image-store.s3.amazonaws.com/0/109620/3f7a7ef9-16fc-6178-e662-ccffe917240b.png)

無事、terraform.tfstate ファイルが作成されました。

```
※ <> 部分は、修正しています。

{
    "version": 3,
    "terraform_version": "0.9.11",
    "serial": 0,
    "lineage": "XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {},
            "resources": {
                "aws_instance.batch01": {
                    "type": "aws_instance",
                    "depends_on": [],
                    "primary": {
                        "id": "<INSTANCE_ID>",
                        "attributes": {
                            "ami": "<AMI_ID>",
                            "associate_public_ip_address": "false",
                            "availability_zone": "<AvailabilityZone_ID>",
                            "disable_api_termination": "false",
                            "ebs_block_device.#": "0",
                            "ebs_optimized": "false",
                            "ephemeral_block_device.#": "0",
                            "iam_instance_profile": "",
                            "id": "<INSTANCE ID>",
                            "instance_state": "running",
                            "instance_type": "<INSTANCE_TYPE>",
                            "ipv6_addresses.#": "0",
                            "key_name": "<KEY_NAME>",
                            "monitoring": "false",
                            "network_interface.#": "0",
                            "network_interface_id": "<NW_INTERFACE_ID>",
                            "primary_network_interface_id": "<NW_INTERFACE_ID>",
                            "private_dns": "<DNS_NAME>",
                            "private_ip": "<PRIVATE_IP>",
                            "public_dns": "",
                            "public_ip": "",
                            "root_block_device.#": "1",
                            "root_block_device.0.delete_on_termination": "false",
                            "root_block_device.0.iops": "100",
                            "root_block_device.0.volume_size": "10",
                            "root_block_device.0.volume_type": "gp2",
                            "security_groups.#": "0",
                            "source_dest_check": "true",
                            "subnet_id": "<SUBNET_ID>",
                            "tags.%": "1",
                            "tags.Name": "batchserver01",
                            "tenancy": "default",
                            "volume_tags.%": "0",
                            "vpc_security_group_ids.#": "1",
                            "vpc_security_group_ids.2148762998": "<SECURITY_GROUP_ID>"
                        },
                        "meta": {
                            "schema_version": "1"
                        },
                        "tainted": false
                    },
                    "deposed": [],
                    "provider": "aws"
                }
            },
            "depends_on": []
        }
    ]
}

```

#ここから本題

★ EC2を1台しかimportしていないので、もう1台importしたらどうなるんだ？

![import01.png](https://qiita-image-store.s3.amazonaws.com/0/109620/6f77a259-5d24-97b0-1b42-e7c287d61ae1.png)

別に問題なくコマンド終了。
先ほど作成されたterraform.tfstate は、terraform.tfstate.backup にCOPYされ、terraform.tfstate に2台目が追記されました。
(省略)

★ S3をimport しても大丈夫だよね？

```
C:\work> terraform import aws_s3_bucket.<任意の名前> <バケット名>

```

わざとバケット名を間違えて見ました。

![import03.png](https://qiita-image-store.s3.amazonaws.com/0/109620/42dd0e18-a0c4-1cc3-7d26-897ffbd98070.png)


★ ALBをimport !!

```
C:\work> terraform import aws_alb.<任意の名前> <ARN>

```

![import04.png](https://qiita-image-store.s3.amazonaws.com/0/109620/6fcef8e1-0986-7983-fcb9-3bdc8a30adda.png)


結果、terraform.tfstate ファイルにはどんどんimport すればしただけ、追記されていきました。
どんどん下に追記されていくわけではなく、DataSource（aws_s3_bucket, aws_instance, aws_albなど）の名前で順に並んでいくようです。

# 参考サイト
対応しているDataSource をはじめ、オプション確認にはやっぱりここは外せません。

[本家HashiCorp：AWS Provider](https://www.terraform.io/docs/providers/aws/)