Terraform
もっといい方法があったので一番下に追記 最新のAMIみたいな情報は今どきはSSMで提供してくれるようになってきています。 Amazon ECS 最適化 AMI バージョン - Amazon Elastic Container Service aws ssm get-parameters --names /aws/service/ecs/optimized…
変えようと思った理由 GitHubという設計図共有サイトがMicrosoftに買収されたのでAtomなくなりそうと思ったからです。ちなみに今までvimとか使いこなせてなくていつもAtom使ってました。 ※この記事は社内に数ヶ月前に書いたやつなのでネタが古いw なんかref…
Local Valuesがない世界 例えば、S3のバケットの名前をnameとenvっていう変数を使って"${var.name}-${var.env}"ってしたいとする。 resource "aws_s3_bucket" "b" { bucket = "${var.name}-${var.env}" } んで、例えば、このbucketの名前を他で使いたいとき…
true or falseで作られないかもしれないresourceの値を取得したい 例えばこのようにneed_instanceみたいなBooleanで作るか作らないかを決めるみたいなresourceがあったときに variable "need_instance" { default = false } resource "aws_instance" "hoge" …
providerごとにrepositoryが分裂した https://www.hashicorp.com/blog/upcoming-provider-changes-in-terraform-0-10 0.9系まではhashicor/terraformで全てのprovider(AWSやGCPやいろんなもの)を管理してた。なのでそこに全ての要望やバグ報告がくるのでis…
terraformでECSのclusterとserviceを作成するにあたって実際の運用を通して少し変わってきたのでまとめておく。 最初のterraformのmodule構成で起きた問題点 以前は、aws_ecs_clusterとaws_autoscaling_groupを同一moduleにおいていた。 問題その1: インスタ…
入門三部作ラスト www.mpon.me www.mpon.me ここまでで、簡単にTerraformの機能をおおざっぱに説明してきました。 今回は、そこそこ現実に即したインフラを作るまでの流れを追いながら、徐々にリファクタリングしていくことで実践的な考え方を身につけていき…
Terraform入門 #1の続きです。 Terraformを始めるのに一番の障壁 既存のインフラコードで試してみたいけどアクセスキーの準備とかアカウント申請が面倒だし、なんか壊しそうで怖い:scream: 自分でやるにしても、AWS契約しないと試せないんでしょと思って面倒…
前書き 人が書いたterraformのメンテぐらいは見よう見まねでやってるけど、一からやれと言われたらよく分からない。そう思ってた1年前ぐらいの自分を思い出しながら気軽に入門してもらうにはどうすればいいか考えてみました。 Terraformはこわくないしほんと…
remote configがdeprecatedになる terraform0.9.0からterraformコマンド実行するとdeprecated warningがでてきます。 3行 remote configコマンドがなくなってinitコマンドが導入される backendという概念が導入されterraform.tfstateファイルを保存する設定…
0.9.1 changlog :tada: https://github.com/hashicorp/terraform/blob/master/CHANGELOG.md#091-march-17-2017 provider/aws: Validate CIDR Blocks in SG and SG rule resources (#12765) planで未然に防げる つい間違ってcidr_blocksの方にsecurity_group…
v0.8から導入された模様。俗に言うREPL。今のtfstateをもとにsyntaxを試すことができる。planやapplyなどを発行することはできないので安全。単にこういう時はterraformではどう書くんだろう??みたいなのを試したいときに便利。 例1: moduleのoutputを呼び…
そもそもGoogle Cloud Platformとは Googleが出してるAWS的なやつ。GCPと略す。だいたいの比較表。 dev.classmethod.jp なんでAWS使わないの? コンテナでぽんぽんアプリケーションをdeployしたいんだけどそれをAWSでやろうとすると、ECSというサービスを使…
usecase EC2インスタンス、ELB、security_groupあたりがまとまったmoduleがあるんだけど、特定の役割のインスタンスにだけiam_roleにSNSFullAccessをつけたい。 設定内容 allow_sns_full_accessっていう変数宣言しとく。 variable "allow_sns_full_access" {…
IPアドレスを定義した共通のsecurity groupを作りたい あるプロジェクトで外部のIPアドレスなどをまとめたものをsecurity groupとしてmodule化している。このアイディア自体はいいんだけど、環境ごとにこれを利用しようとした場合に失敗する。 例えば、こん…
🎉 https://www.hashicorp.com/blog/terraform-0-8.html#conditional
バグだったようだ。mergeされたのでそのうち修正版がリリースされるはず。それまでは"${replace(aws_ecr_repository.test.repository_url, "https://", "")}"でしのぐ。 github.com 追記 terraform v0.8.5 で取り込まれた。
社内のプロジェクトのを参考にできる恵まれた環境なのでまずはそれを見る。 他にもterraform公式リポジトリにあるexampleも参考になった。 terraform/examples at master · hashicorp/terraform · GitHub
基本的にはサポートされてない。 けど、こちらの方のやり方を参考にして、こんな風にすればできるっちゃできる。 If you set count to 1 on a resource, you get one copy of that resource and if you set count to 0, that resource is not created at all…
module "hoge" { source = "${path.module}/hoge" } とやっても、 * hoge: module source cannot contain interpolations で、はじかれる
前にこれを書いたんだけど、こんなことする必要なかった。 mpon.hatenablog.com こっちでよかったじゃないか。AWSのこと何も分かってない証拠ですね。 docs.aws.amazon.com
github.com quipper.hatenablog.com Good
追記:そもそもuser-dataがあることを知らなかったのでこっちを使おう www.mpon.me elastic ipで接続されない こんな風に素直に(自分的には)書くとElastic IPよりも先にEC2を先に作ろうとしちゃう。 で、private ipでssh接続しようとするから、そりゃあいつ…
moduleの誤解 何もわかってなかった。 module使うと変数とかをscope化できるからいいなーって思ってたけど、resourceもscope化されるってことだった。 まぁ逆に言えば、module内にresource名は被らないように気をつける必要がないとも言えるけど。 terraform…
NAMEにTYPEを入れるかどうか 結構プロジェクトによってバラバラで他の言語でよくあるガイドラインみたいなのがない気がする。 個人的にはresourceのTYPEで特定できるから入れない方がいいかなという気になっている。 resource "aws_vpc" "dev_vpc_01" {} res…
どう入門するか 今まで人が作ったterraformの設定をいじって適用とかはしてきたけど自分で一から作ったことない。仕組みを理解するには、一から自分で作ってみるのが早そうだと思ったので自分で一から作ってみることにした。 ので、素直にこれをやることにし…