tl;dr
EC2 を作るときに一緒に Instance Profile をアタッチするサンプルはよく見かけるんだけど, 既に動いている EC2 に Instance Profile をアタッチする場合, Terraform ではどう書くのか調べたのでメモしておきます.
尚, 検証に利用した環境は以下の通りです. 最新でなくてごめんなさい.
$ terraform version Terraform v0.11.11 + provider.aws v2.12.0 Your version of Terraform is out of date! The latest version is 0.12.0. You can update by downloading from www.terraform.io/downloads.html
俺はこうした
残念ながら...
Terraform リソースとして提供されているわけではないので...
terraform import を使う
一旦, 動いている EC2 を terraform 管理下にする為に, terraform import
で最低限のリソース定義を取り込んでから追加のパラメータとして設定する必要があります.
resource "aws_instance" "your-instnace01" { }
↑これだけ書いておいてから, 以下のように terraform import
を実行する.
terraform import aws_instance.your-instnace01 i-xxxxxxxx
import
した後, 最低限必要なリソース定義と合わせて, iam_instance_profile
を定義する. (差分が発生しない状態まで terraform plan
を繰り返す.)
resource "aws_instance" "your-instnace01" { ami = "ami-xxxxxxxx" instance_type = "m4.large" iam_instance_profile = "${aws_iam_instance_profile.ec2-instance-profile.name}" ebs_optimized = true disable_api_termination = true tags = { Name = "your-instnace01" Environment = "production" } }
最低限必要なパラメータは ami
と instance_type
ですが, 既に稼働しているインスタンスで設定しているパラメータは設定しておく必要があります. 例えば, your-instnace01
であれば...
ebs_optimized
disable_api_termination
上記の二つのパラメータの定義が必要になりました. ebs_optimized
は m4.large
では有効になっている為に必要になりますね. disable_api_termination
は任意で指定が可能ですが, たまたまこのインスタンスは指定されていました.
以上
- メモでした