AWS Developer: Building on AWS | edX を Terraform を使ってやり直してみた

AWS が edX で開講している AWS Developer: Building on AWS を Terraform でやり直してみた。

www.edx.org

この講義では最終的に下図のようなシステムを構築する。

https://s3-us-west-2.amazonaws.com/us-west-2-tcdev/courses/AWS-100-ADG/v1.1.0/exercises/Arch+Diagram.jpg

以前にもこの講義を受講したことがあり、その時は講義どおりマネジメントコンソールからポチポチして構築していったが、今回は復習と Terraform の勉強を兼ねて、Terraform でできるところは全て Terraform でやってみた。

github.com

今まで雰囲気で使っていたところを理解しながら進めることが出来たと思う。 全てを Terraform でやるというのは慣れていない私のようなものからすると大変ではあったが、日々の業務にも役立つことが勉強できてとても有意義だった。

失敗談

Terraform を使った理由としては、もちろん Terraform の勉強と言う面もあったものの、もうひとつの理由として terraform destroy で手軽に使ったリソースを破棄できるところにあった。だが、destroy するときには少々気をつけねばならないことがあることも知った。

まず S3 と RDS はデフォルトの設定だと terraform destroy で破棄できないため、 S3 の場合は force_destroy を、RDS の場合は skip_final_snapshot をそれぞれ true にする必要があった。

www.terraform.io

www.terraform.io

それと今回のように勉強のために Terraform を使って最終的に destroy することが前提の場合、count を使うととても面倒になることもわかった。

Error: Invalid count argument

  on sg/sg.tf line 27, in resource "aws_security_group_rule" "ingress_sg":
  27:   count                    = "${var.security_group == "" ? 0 : 1}"

The "count" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the count depends on.

結局どう対処すればいいのかわからなくて手動でリソースを地道に消していった。