Terraform 始めました。
使っていてこれはどーすりゃよいのかしらと思っていたことが実装できたのでメモを残します。
Security GroupにAll trafficを許可するInboundルールを書くことがあると思います。
Management Consoleから作成した All Traffic を選択してセキュリティグループのIDを登録するだけで良いです。
では Terraform で実装する時は、aws_security_group リソースの ingress に self を指定すると自身のセキュリティグループのIDを登録できますが、All trafficはどう指定したらよいのかとドキュメント読んでも見当たらなかったのでソースを眺めた所、 protocol が string型で定義されていたぐらいなので、コードの中で指定可能な値を定義しているところはありませんでした。
ということは protocol で指定した値をそのままAWSのAPIサーバへPOSTしているだけであれば、Amazon EC2ドキュメントの IpProtocol に指定可能なパラメータは指定できると思い、下記の様な resource を記述して terraform apply を実行すると上手く出来ました。
resource "aws_security_group" "common" {
name = "common-sg"
description = "common security group"
vpc_id = "${aws_vpc.hogehoge.id}"
ingress {
from_port = 0
to_port = 65535
protocol = "-1"
self = true
}
}
同一のロールをもつインスタンスが複数台あるとき(たとえばwwwとか) resource "aws_instance" を並べるのは苦行以外の何物でもありません。
ドキュメントには記載されていませんが count が指定できます。
resource "aws_instance" "hogehoge" {
ami = "ami-1234"
instance_type = "t2.micro"
count = 10
tags {
Name = "hogehoge"
}
}
ひたすらAPIサーバへPOSTしている模様なのでresourceが多いと頻発する。 terraform apply をリトライしたらよい。
Error applying plan: 1 error(s) occurred: * Error retrieving ELB: Throttling: Rate exceeded Terraform does not automatically rollback in the face of errors. Instead, your Terraform state file has been partially updated with any resources that successfully completed. Please address the error above and apply again to incrementally change your infrastructure.
元記事はこちらです。
「Infrastructure as 脳筋のためのterraform tips」