まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

Terraform

Terraformで最新のECS Optimized AMIのidをとってくる方法

もっといい方法があったので一番下に追記 最新のAMIみたいな情報は今どきはSSMで提供してくれるようになってきています。 Amazon ECS 最適化 AMI バージョン - Amazon Elastic Container Service aws ssm get-parameters --names /aws/service/ecs/optimized…

Terraformを書くのに今までAtomを使ってたんだけどVS Codeに鞍替えしてみたらこっちの方がよさそうだった

変えようと思った理由 GitHubという設計図共有サイトがMicrosoftに買収されたのでAtomなくなりそうと思ったからです。ちなみに今までvimとか使いこなせてなくていつもAtom使ってました。 ※この記事は社内に数ヶ月前に書いたやつなのでネタが古いw なんかref…

Terraformで変数を組み合わせることができるlocal valuesというのが使えるようになってた

Local Valuesがない世界 例えば、S3のバケットの名前をnameとenvっていう変数を使って"${var.name}-${var.env}"ってしたいとする。 resource "aws_s3_bucket" "b" { bucket = "${var.name}-${var.env}" } んで、例えば、このbucketの名前を他で使いたいとき…

Terraformのoutputで空になるかもしれないlistでindexで値を取得したいときのハック

true or falseで作られないかもしれないresourceの値を取得したい 例えばこのようにneed_instanceみたいなBooleanで作るか作らないかを決めるみたいなresourceがあったときに variable "need_instance" { default = false } resource "aws_instance" "hoge" …

terraformが0.10になってからproviderがpluginで取り込むようになってた

providerごとにrepositoryが分裂した https://www.hashicorp.com/blog/upcoming-provider-changes-in-terraform-0-10 0.9系まではhashicor/terraformで全てのprovider(AWSやGCPやいろんなもの)を管理してた。なのでそこに全ての要望やバグ報告がくるのでis…

terraformでECSのクラスタ、サービスのモジュールの構成を変更した

terraformでECSのclusterとserviceを作成するにあたって実際の運用を通して少し変わってきたのでまとめておく。 最初のterraformのmodule構成で起きた問題点 以前は、aws_ecs_clusterとaws_autoscaling_groupを同一moduleにおいていた。 問題その1: インスタ…

Terraform実践入門 #3

入門三部作ラスト www.mpon.me www.mpon.me ここまでで、簡単にTerraformの機能をおおざっぱに説明してきました。 今回は、そこそこ現実に即したインフラを作るまでの流れを追いながら、徐々にリファクタリングしていくことで実践的な考え方を身につけていき…

Terraform入門 #2 Terraformはこわくない!!

Terraform入門 #1の続きです。 Terraformを始めるのに一番の障壁 既存のインフラコードで試してみたいけどアクセスキーの準備とかアカウント申請が面倒だし、なんか壊しそうで怖い:scream: 自分でやるにしても、AWS契約しないと試せないんでしょと思って面倒…

Terraform入門 #1 Terraformはいいぞ

前書き 人が書いたterraformのメンテぐらいは見よう見まねでやってるけど、一からやれと言われたらよく分からない。そう思ってた1年前ぐらいの自分を思い出しながら気軽に入門してもらうにはどうすればいいか考えてみました。 Terraformはこわくないしほんと…

Terraform0.9.0からremote configがdeprecatedになる

remote configがdeprecatedになる terraform0.9.0からterraformコマンド実行するとdeprecated warningがでてきます。 3行 remote configコマンドがなくなってinitコマンドが導入される backendという概念が導入されterraform.tfstateファイルを保存する設定…

terraform0.9.1からplanレベルでsecurity_groupのcidr_blocksのvalidateが入るようになった

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…

terraform consoleっていうREPLみたいなやつがあるの知らなかった

v0.8から導入された模様。俗に言うREPL。今のtfstateをもとにsyntaxを試すことができる。planやapplyなどを発行することはできないので安全。単にこういう時はterraformではどう書くんだろう??みたいなのを試したいときに便利。 例1: moduleのoutputを呼び…

Google Cloud Platformの環境をterraformで作る

そもそもGoogle Cloud Platformとは Googleが出してるAWS的なやつ。GCPと略す。だいたいの比較表。 dev.classmethod.jp なんでAWS使わないの? コンテナでぽんぽんアプリケーションをdeployしたいんだけどそれをAWSでやろうとすると、ECSというサービスを使…

terraformでif文的なものを使ったユースケース例

usecase EC2インスタンス、ELB、security_groupあたりがまとまったmoduleがあるんだけど、特定の役割のインスタンスにだけiam_roleにSNSFullAccessをつけたい。 設定内容 allow_sns_full_accessっていう変数宣言しとく。 variable "allow_sns_full_access" {…

terraformでsecurity groupをmodule化するときに気をつけること

IPアドレスを定義した共通のsecurity groupを作りたい あるプロジェクトで外部のIPアドレスなどをまとめたものをsecurity groupとしてmodule化している。このアイディア自体はいいんだけど、環境ごとにこれを利用しようとした場合に失敗する。 例えば、こん…

あれれ、terraform0.8から条件書けるようになってるぞ

🎉 https://www.hashicorp.com/blog/terraform-0-8.html#conditional

terraformのecs_registry.repository_urlにhttpsがついてるのを消す

バグだったようだ。mergeされたのでそのうち修正版がリリースされるはず。それまでは"${replace(aws_ecr_repository.test.repository_url, "https://", "")}"でしのぐ。 github.com 追記 terraform v0.8.5 で取り込まれた。

terraformで作るときに参考にするもの

社内のプロジェクトのを参考にできる恵まれた環境なのでまずはそれを見る。 他にもterraform公式リポジトリにあるexampleも参考になった。 terraform/examples at master · hashicorp/terraform · GitHub

terraformというかHCLでif文使いたい

基本的にはサポートされてない。 けど、こちらの方のやり方を参考にして、こんな風にすればできるっちゃできる。 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…

terraformでmoduleのsourceにinterpolationは使えない

module "hoge" { source = "${path.module}/hoge" } とやっても、 * hoge: module source cannot contain interpolations で、はじかれる

remote-execでEC2インスタンスの起動時の処理書いたけどuser-dataがあった

前にこれを書いたんだけど、こんなことする必要なかった。 mpon.hatenablog.com こっちでよかったじゃないか。AWSのこと何も分かってない証拠ですね。 docs.aws.amazon.com

terraformのディレクトリ構造とかは何を参考にすればいいか

github.com quipper.hatenablog.com Good

EC2をremote-execでprovisioningする方法

追記:そもそもuser-dataがあることを知らなかったのでこっちを使おう www.mpon.me elastic ipで接続されない こんな風に素直に(自分的には)書くとElastic IPよりも先にEC2を先に作ろうとしちゃう。 で、private ipでssh接続しようとするから、そりゃあいつ…

terraformのmoduleで定義したresouseにアクセスするにはoutputしないとダメ

moduleの誤解 何もわかってなかった。 module使うと変数とかをscope化できるからいいなーって思ってたけど、resourceもscope化されるってことだった。 まぁ逆に言えば、module内にresource名は被らないように気をつける必要がないとも言えるけど。 terraform…

terraformのresourceのNAMEの命名規則について

NAMEにTYPEを入れるかどうか 結構プロジェクトによってバラバラで他の言語でよくあるガイドラインみたいなのがない気がする。 個人的にはresourceのTYPEで特定できるから入れない方がいいかなという気になっている。 resource "aws_vpc" "dev_vpc_01" {} res…

terraform入門時のメモ

どう入門するか 今まで人が作ったterraformの設定をいじって適用とかはしてきたけど自分で一から作ったことない。仕組みを理解するには、一から自分で作ってみるのが早そうだと思ったので自分で一から作ってみることにした。 ので、素直にこれをやることにし…