ようへいの日々精進XP

よかろうもん

【細かすぎて伝わらないかもしれない tips】Terraform でアロケーション済みの IP を EC2 にアタッチする方法

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 は奥深い