Ubie Engineering Advent Calendar 2023 の22日目の記事では、Ubieのプラットフォームで生じていた課題と、それを解決するためにサービステンプレーティングツールを開発・導入した取り組みについて紹介します。
続きを読むTerraformのvariables.tfを生成するツールを作った
Terraformのvariablesあるある(?)
variables
ブロックを変数ごとに書くのがめんどくさい。- 色々インフラの変更をした結果、未使用の
variables
が放置されがち
1つ目に関しては変数の数が増えてきたら特にめんどくさくなります。大体の変数がstringかnumber型なので、variables
ブロックも大体同じ感じの定義がずっと続くことになります。
2つ目はtflintを毎回実行して未使用の変数を除去すれば良いのですが、不幸にもそれができていないまま変数が1000個くらいに膨れ上がってしまったプロジェクトもあったりします。
そんなわけでvariables.tfをいい感じに生成してくれるツールを書きました。
できたもの
これがやることはシンプルで、
- 不足している
variables
ブロックを追加したvariables.tfを出力する - syncモードの時は、↑に加えてさらに未使用の
variables
ブロックも削除する - オプションをつけると、tfvarsファイルも一緒に整理する
例
それぞれ次のように定義されていたとします。
my_resource.tf
resource "my_resource" "myvar" { url = "http://semvar.co.jp/${var.appname}/${var.env}" # title = var.moge expiration = var.expiration_days }
variables.tf
variable "env" {} variable "unused" { description = "my variable" } variable "appname" { description = "" }
dev.tfvars
env = "dev" unused = { "abc" = "def" "bird" = "owl" } appname = "myapp"
実行結果はこうなります。
$ tfv -sync --tfvars-file dev.tfvars variable "env" {} variable "appname" { description = "" } variable "expiration_days" { description = "" }
使われてないunused
を除去し、定義されていないexpiration_days
を追加したものが出力されます。
また、dev.tfvars.generatedにはこのようなファイルが生成されます。
env = "dev" appname = "myapp"
できないこと
真面目にパーサを書いてないので、%{}
を含む構文には対応していません。つまり、%{}
で囲まれているvar.foo
のような変数の利用があっても正しく認識されない場合があります。
そもそも%{}
をあまり見ないのでこれは何?って感じなんですが、これは文字列の中に制御構文を埋め込む記法です。
公式サイトの例にあがっているのが次のような書き方です。
"Hello, %{ if var.name != "" }${var.name}%{ else }unnamed%{ endif }!"
%{}
は再帰的な構造を持つことができるので、行ごとにGoのregexpでパターンマッチする方針だと上手く扱えませんでした。ただ%{}
を使うことがあまりないので、大体のケースでなんとかなると思います。
Request is missing Authentication Token: OperationErrorになる
StepFunctionをlambda(Go 1.x)からキックするようなコードを書いてる時に、StartExecution
を呼び出すと次のようなエラーが出た。
operation error SFN: StartExecution, https response error StatusCode: 400, RequestID: xxxx-xxxx-xxx-xxxx, api error MissingAuthenticationTokenException: Request is missing Authentication Token: OperationError
lamdbaのロールを変更してみても解決せず、ggってもそれらしいのが出てこないのでなんだこれってなってた。
続きを読むECSヘルスチェックベストプラクティス
ISUCON11のベンチマーカーを高速化
ISUCON12に向けて過去問をやっていたら、ISUCON11のベンチマーカーの実行に時間がかかっていたので高速化してみました。
続きを読むTerraformerでNewRelicのリソースをTerraformに取り込めるようにした
あるプロダクトの監視にはNewRelicを使っているが、手作業で作られたNewRelicのアラートが大量に放置されていた。 そのため、どのアラートが作成されているのかがわからない、不要なものもわからない、レビューがやりにくいといった問題があった。
そこでTerraformerを使ってそれらを取り込みコード化することができたので、方法を記載する。
続きを読むAWS SESで信頼性の高いメール送信(SPF, DKIM, DMARC) with Terraform
メール認証の仕組みと、SESでのTerraformを使った設定方法について紹介します。
続きを読む