tl;dr
EC2 を作るときに一緒に EIP を払い出すようなサンプルはよく見かけるんだけど, 既に払い出している EIP に EC2 をアタッチする場合, Terraform ではどう書くのか調べたのでメモしておきます.
尚, 検証に利用した環境は以下の通りです. 最新でなくてごめんなさい.
$ terraform version Terraform v0.11.11 + provider.random v2.1.0 Your version of Terraform is out of date! The latest version is 0.11.13. You can update by downloading from www.terraform.io/downloads.html
俺はこうした
その前に
EC2 と EIP を一緒のタイミングで作って, EC2 にアタッチする場合の tf ファイルは以下のような感じで書きました.
resource "aws_eip" "my-eip" {
instance = "${aws_instance.your-instance.id}"
vpc = true
}
resource "aws_instance" "your-instance" {
...
subnet_id = "${random_shuffle.launch_subnet_id.result[0]}"
vpc_security_group_ids = ["${aws_security_group.your-security-group.id}"]
...
}
アロケーション済みの EIP を EC2 にアタッチする場合
aws_eip_association リソースを使うと良かったです.
variable "eip-allocation-id" {
default = "eipalloc-1234567890abcdefg"
}
resource "aws_eip_association" "eip-association" {
instance_id = "${aws_instance.your-instance.id}"
allocation_id = "${var.eip-allocation-id}"
}
resource "aws_instance" "your-instance" {
...
subnet_id = "${random_shuffle.launch_subnet_id.result[0]}"
vpc_security_group_ids = ["${aws_security_group.your-security-group.id}"]
...
}
EIP と関係ないですが, 複数の Availability Zone に別れたサブネットのどちらかに EC2 を所属させたい時に random_shuffle リソースを使うと良かったです. このネタは別の記事にて.
以上
- Terraform は奥深い