dshimizu/blog/alpha

とりとめのないITブログ

Terraform meetup tokyo #2に行ってきた

Terraform meetup tokyo #2に行ってきた。

会場は大崎のオイシックス・ラ・大地株式会社様で、フードスポンサーであるHashcorp様からの飲み物や軽食のほかに各テーブルにシャインマスカットとVegeel for Womanという野菜ジュースが配られた。ありがとうございます。

当日はLT7本に加えて、間でワールドカフェが行われた。 ワールドカフェは討論のやり方の一つで、数人からなるいくつかのグループに別れて特定のテーマについて議論するもの、らしい

当日は、参加者が6名ずつのグループに別れてTerraformについて自由に対話する場が設けられた。 懇親会の場ではない中で他の参加者の方々と話する場が設けられたのはよかった。

前半セッション

Sales Director 奥るみ様

Terraform CloudやTerraformの認定試験のご紹介だった。

TerraformはOpenSource版とEnterprise版があるが、加えてTerraform Cloudがリリースされたこと、Terraform Cloudには無料利用枠がありそこで使える機能等についてご説明いただいた。

LT1 @kanga333 様 個々のアプリのリポジトリでTerraformを管理している話

UZOUという広告配信プラットフォームのシステムにおけるTerraformのお話 よくある(と思われる)Terraform用のリポジトリはインフラチーム/SREチームが管理する terraform 専用のリポジトリになっている事が多いと思われるが、Speee様のUZOUではアプリケーションコードの中にTerraformディレクトリを切ってTerraformコードを置いているらしい。 メリットとしては、アプリケーションが利用するインフラリソースがわかりやすいとかアプリとインフラの変更レビューを一緒にできるとか。 デメリットとしては、インフラ構成全体の把握に時間がかかるとか書き方にムラが出やすいとかがあるらしい。「インフラ構成全体の把握に時間がかかる」というのは各サービスが1つのAWSアカウント内にあるということなんだろうか。 Speee様のUZONのチームにはインフラチームがないとのことなので、開発チームがアプリもインフラも管理している、ということかと思うが、スキルセット的には理想的だと思った。

LT2 @_mpon 様 APIがある外部サービスはTerraformで管理できますよ

プロバイダーのない外部サービスは画面ポチポチするしかない、、そんなことはないです、カスタムプロパイダーを自作して解決しましょう!というお話でした。Twillioのプロパイダーを作成された際の知見を話されました。

Providerの存在しないサービスをTerraform管理するお話でした。

APIの公開されているサービス(本セッションではTwilio)のTerraformのProviderを自作して管理できるよ、というお話だった。

AWSGCPなどでインフラを構築する場合、Terraformで構成管理を行うことができるが、AWSGCP以外の外部サービスを利用するケースも多い。 それらのうち、Providerが存在しないサービスについてはTerraformで一括管理できない。別で画面ポチポチ等...

外部APIが公開されているサービスならそれを利用して自分でカスタムProviderを作成でき、TwilioのProviderを作成されたとのこと。 実際に作った時の方法(ファイルの構成や参考にしたもの)についてお話されていた。

Providerを自作したい、という方は下記の記事が参考になるらしい。

本題と関係ないところで、TerraformのProviderってこんなにたくさん種類があったんですね、と改めて知った。

LT3 @int_tt 様 Terraformerみて感動した話

Terraformerの概要、簡単な使い方、アーキテクチャの話、最後に、機能追加でPullReqを出されたときの知見のお話だった。

Terraformerのアーキテクチャは大きく以下の3つからなっているらしい。

  1. 前処理
  2. コマンドのParseを行う Providerごとの初期設定を行う 対応しているリソースかのチェック、対応していればリソースの一覧を取得してリソースとIDをセットする Providerとの通信の準備を行う。 http://github.com/GoogleCloudPlatform/terraformer/blob/master/cmd/import.go のfunc importの前半
  3. Providerとの通信
  4. 指定したリソースのRefresh(Read)から結果を受け取る rpcかgrpcで通信する http://github.com/GoogleCloudPlatform/terraformer/blob/master/cmd/import.go のfunc importの後半
  5. 取得結果のParse
  6. 取得した結果をParseしてtfファイル、tfstateファイルに出力する https://github.com/GoogleCloudPlatform/terraformer/blob/master/cmd/import.go#L139 func ImportFromPlan

LT4 @sion_cojp 様 FOLIOのterraform運用tips

FOLIO様でのTerraformを運用するにあたってのTipsのお話だった。 何故その値にしたか等をできる限りコメントとして書くとか、resource の定義をわかりやすくするとか、後からチームに入ってきた人でもわかりやすくする状態を把握しやすくすることを心がけておられるようです。 また、TerraformはいろんなAWSのリソースを細かく定義するため全体像が見えにくくなることの対策として、まずはステージング環境で動かす状態にしてその後に全体設計やレビューをおこなっているとのこと。 ちなみにTerraformの実行/CIにはAtlantisを使われているらしい。

後半セッション

LT5 @HikaruMiyazawa 様 Terraform WorkSpace機能を活用してきたノウハウを一挙公開

LT6 @ShandyGaffLover 様 TerraformとAzure Pipelinesを用いたプロビジョニングの自動化

LT7 @kangaechu 様 terraform-provider-awsのコントリビューターになろう

事前アンケート結果

参考