はじめに
Terraform 始めました。
使っていてこれはどーすりゃよいのかしらと思っていたことが実装できたのでメモを残します。
(1)AWS Security Groupを用いて内部通信ツーツーの設定を作りたい
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 } }
(2) 起動するinstance数を指定したい
同一のロールをもつインスタンスが複数台あるとき(たとえばwwwとか) resource "aws_instance"
を並べるのは苦行以外の何物でもありません。
ドキュメントには記載されていませんが count
が指定できます。
resource "aws_instance" "hogehoge" { ami = "ami-1234" instance_type = "t2.micro" count = 10 tags { Name = "hogehoge" } }
(3) terraform apply実行時にThrottlingエラー
ひたすら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」