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_optimizeddisable_api_termination
上記の二つのパラメータの定義が必要になりました. ebs_optimized は m4.large では有効になっている為に必要になりますね. disable_api_termination は任意で指定が可能ですが, たまたまこのインスタンスは指定されていました.
以上
- メモでした