[レポート]Terraform meetup tokyo#2に行ってきました #terraformjp

2019.10.03

こんにちは、大阪オフィスのかずえです。たまたま出張と重なったので、Terraform meetup tokyo#2 に参加してきました。

会場は大崎のオイシックス・ラ・大地さん。
びっくりしたのが、HashiCorpさんがフードスポンサーを担当されたそうなのですが、各テーブルにシャインマスカットとVegeel for Womanという野菜ジュースを提供してくださったこと。どちらもこれまで勉強会で見たことないですよね!すごい!(というか個人的にはマスカット食べたことがそもそもあまりない)
お酒もソフトドリンクも大量に提供くださりました。ありがとうございます!

ではここからセッションレポートです。

HashiCorp Sales オクさん

「営業ですが、営業臭を出さないようにしますのでもししたらおしらせください」とのことw
Terraform Cloudと、Terraformの認定試験についてお話しされました。

Terraform Cloud

現在TerraformはOpen SourceとCloudと、Enterprize Private Installationの三種類あるとのこと。Terraform Cloudはさらに無料利用枠があり、無料利用枠だけでも色々便利なコラボレーション機能が使えます。

無料利用枠でも使えるTerraform Cloudの便利な機能を色々ご紹介されました。

Product Certifications

今までパートナー向け限定の認定資格はありましたが、今回あらゆる方向けの認定資格を始められたとのこと。ただまだbeta版で現在はHashiConf会場でしか実施されていないそうです。将来的にはオンラインで受験できるようになる予定。

(筆者感想)

認定試験受けてみたいですねー興味津々です。Terraform Cloudもチェックします!Secure Storage of Variablesが気になりました。
※ 弊社社員によるTerraform Cloudやってみたブログはこちら↓

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

Terraform周りのリポジトリ分離方法として、

  • これまで、一つのTerraform専用のリポジトリを作りそこでモジュールを作り込んで各アプリや機能に展開する方法に慣れ親しんでいた
  • が、現在の部署では各アプリ毎(機能毎)のアプリケーションコードなどが格納されているレポジトリにTerraformコードも同居させている。
  • それぞれの構成のメリットデメリットをご紹介

と言った内容でした。

良かったこと

  • アプリが使用するインフラリソースがわかりやすい
  • Terraform変更の影響範囲が明確
  • Terraformのアップグレードを必要に応じてできる
  • Planが早い
  • アプリの変更とインフラの変更を一緒にレビューできる

良くないこと

  • 同じ修正を何度もしないといけない
    • v0.12へのupgradeを何度もしないと、、
  • 書き方にムラが出やすい
  • CI/CDが大変
  • インフラ全体把握が難しい

工夫している点

  • AWSのタグで、リソース管理元のリポジトリがわかるようにしている

まとめ

(筆者感想)

個人的にはアプリの各レポジトリにTerraformコードを一緒に置く、今されているやり方の方が小回りが利いて良いのではと思いますが、おっしゃっている通りコンウェイの法則的な部分が多分に影響するでしょうね。設計時にコンウェイの法則も念頭に置いた方がいいなという学びがありました。またタグでリソース管理元リポジトリをわかるようにしているのは便利そうですね!真似したいと思います。

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

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

  • Providerの中身(構成)
  • どのようにキャッチアップしたか

(筆者感想)

Provider作ってみようという発想を持ったことがなかったのですごいなぁと。
Terraform Provider実装入門もざっと目を通してみましたがすごい情報量ですね!

LT3 @int_ttさん Terraformerみて感動した話

Terraformerの機能追加PRを送られた時の知見を話されました。

Terraformerとは

既存リソースからtfstateやtfファイルを作成できる

  • 使い方
  • 生成されるコード

Terraformerのアーキテクチャー

  • 前処理
  • providerとの通信
  • 取得結果のparse

機能追加の仕方

簡単!

調べてみて

  • terraformerもすごいけどterraformのplugin機構がすごい
    • 各種pluginはSaasのresourceのCRUD部分を抽象化してくれてすごい

(筆者感想)

一つ前のLTと同じくTerraformerに機能追加してみようという姿勢が素敵ですね。私はまずはTerraformer使ってみるところからやりたいと思います。

※弊社社員によるTerraformerやってみたブログはこちら↓

LT4 @sion_cojpさん FOLIOのterraform運用tips

MakeでTerraformを実行されているそう。そのあたりの点について話されていました。

Terraformコマンドの運用

  • ローカル or Atlantis

Version固定

  • Makefileを通してterraformコマンドを打つことで実現

Atlantisとは

  • webhookを介してTerraformプルリクエストイベントをリッスンするアプリケーション

ディレクトリ構成

  • envs
  • bin
  • applyの影響を少なくするためのディレクトリにしてる

Terraformの書き方、よくレビューするポイント

  • なぜその閾値にしたか理由をコメントに書く
  • resourceにはコメント
  • resource "aws_iam_role" "iam_role_hoge"は自明なので resource "aws_iam_role" "this" などにしよう

運用するということ

  • 後から入社する人でもわかるようにするのが大事

(筆者感想)

深く考えずにresource "aws_iam_role" "iam_role_hoge" にしてました。確かに参照時もaws_iam_role.iam_role_hogeになったりするので冗長ですね。

Terraform-JP World Cafe

ここからWorld Cafeということで、1チーム最大6人でお酒飲みながらおかし食べながらTerraformについてワイワイ話し合う時間になりました。25分やって、違うメンバーでもう25分。色々な話が聞けて面白かったです!話のネタにということで、開始前に以下の事前アンケートの結果が共有されました。

そして懇親会タイムですが、懇親会タイムもLTが続きます。

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

WorkSpace機能の紹介とTipsを話されました。Twelve-Factor Appの話も絡めて、そこで言及されてることをWorkspaceでできるよ!と紹介されてました。

WorkSpace機能の基本操作

  • コマンドの流れ例
  • 実行は全てCircleCIでしてる

State Fileはどうなるか

  • 環境ごとにStateファイルのS3オブジェクトパスを切り替えている

環境毎のOutput値を使える

  • Data Resourceを記述する際、StateファイルS3オブジェクトパスの中に ${terraform.workspace} と変数を入れることで、環境毎のOutput値を使えるようにしている

WorkSpaceはTwelve-Factor Appとシナジーがある

  • コードベース
  • 依存関係
  • 開発と本番の一致
  • 環境変数の使用
  • ログ

全Resourceにcountを使って値を変数で定義

  • リソース不要な環境では立ち上げない
  • インフラ用dev環境が簡単に作れる

WorkSpace辛いこと

  • やっている人少ない
  • 情報少ない

(筆者感想)

ディレクトリ派ですが、WorkSpaceもやってみたくなりました!countを使って環境上げ下げする方法がとても良さそうと感じました。

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

Terraform x Azureというパターンの情報が少なすぎる、今日は情報交換、収集してくて来た、登壇したとのこと。実現できたことできなかったこと、学んだことなどを話されました。

すみません、Azureよくわからなくてあまりメモが取れていません。。

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

「オレ、Terrafromのコントリビューターですから」と言えたらかっこいいですよね?ということでコントリビューターになる方法をご紹介されました。

コントリビュートへの道

  • コードを書かないコントリビュートもある
    • ドキュメントの修正
    • typo
    • ドキュメントが追従してないetc
  • 大変なのは課題を見つけること
    • Issueを眺める
    • Terraform-provider-awsは初心者に優しい
    • Refactor や Technical-left というキーワードで探すのがオススメ
  • やってみた例
    • 一箇所関数書き換えるだけで終わるIssueもある
    • 影響調査も終わっている
    • Issue例
    • 事前準備
    • コード修正
    • ぷるり作成
    • 必要項目
      • 関連Issue
      • リソースノートに記述する文
      • テストの実行結果
        • 修正した関数に対するテストを実行
    • すぐマージされた!

難しそう?

→ 次回のTerraform Source Code Reading参加しましょう!

(筆者感想)

ドキュメント修正でコントリビュートするという方法があるのは知っていましたが、一行コード修正するだけのIssueもあるというのは驚きでした。最終LTの方のまとめが次回のイベントの宣伝になるのはとても綺麗ですね笑

おまけ

実践Terraform AWSにおけるシステム設計とベストプラクティスの著者@tmknomさんもこのミートアップに参加されていたので、書籍の紹介をされていました。(私もWorld Cafeで同テーブルになった方にオススメしておきました)

※改定前のバージョンの弊社社員の書評はこちら↓

まとめ

やりたいやりたいと言いすぎてやるやる詐欺になりそうでちょっと怖いですが、それだけ刺激を受けたミートアップでした!Terraform好き・使ってみたいという方は今後のイベントも要チェックです!