前書き
Terraform import については、Qiitaでお2人も記載してくれていますので、参照ください。
tyasuさん:terraform importの使い方メモ
kt_higaさん:terraform importを試してみた
同じスタンスで記載してもしょうがないので、勉強している最中に違う観点でいくつかTerraform import について記載します。
環境
Windows にTerraform(2017/7/18時点:v0.9.11)をインストール
AWSには、EC2,ELB,RDS,S3 など以前手作業で作った環境があります。
準備
まずは、最低限Terraformの利用には、access_key, secret_keyが必要です。
こちらを参照してキーを確認しましょう。
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>
ここでは、こんな感じでコマンドを叩いてみました。
もともとの環境では、タグ名を「batchserver01」という名前を付けていましたが、ここではわざと「batch01」に変更しています。
タグ名と合わせても勿論OKです。
無事、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したらどうなるんだ?
別に問題なくコマンド終了。
先ほど作成されたterraform.tfstate は、terraform.tfstate.backup にCOPYされ、terraform.tfstate に2台目が追記されました。
(省略)
★ S3をimport しても大丈夫だよね?
C:\work> terraform import aws_s3_bucket.<任意の名前> <バケット名>
わざとバケット名を間違えて見ました。
★ ALBをimport !!
C:\work> terraform import aws_alb.<任意の名前> <ARN>
結果、terraform.tfstate ファイルにはどんどんimport すればしただけ、追記されていきました。
どんどん下に追記されていくわけではなく、DataSource(aws_s3_bucket, aws_instance, aws_albなど)の名前で順に並んでいくようです。
参考サイト
対応しているDataSource をはじめ、オプション確認にはやっぱりここは外せません。