Terraform初心者が「Terraform meetup tokyo#2」に参加した

インフラ構成管理ツールの1つであるTerraformの勉強会に参加してきた. Terraformは昨今のクラウド環境でよく使用されていて,AWSGCP,Azureなど幅広いインフラに対応している. 自分はTerraformを今から取り入れようかなという感じで,それにあたり何か知見を得れればと思い参加した.

terraform-jp.connpass.com

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

表題の通りTerraformの管理をアプリケーションごとに書いているという話.

  • 良かったこと
    • アプリが使用するインフラリソースがわかりやすい
    • Terraform変更の影響範囲が明確
    • Terraformのアップグレードを必要に応じてできる
    • Planが早い
    • アプリの変更とインフラの変更を一緒にレビューできる
  • 良くないこと
    • 同じような修正が何度も必要
    • 書き方にムラが出やすい
    • CI/CDが大変
    • インフラ構成全体の把握に時間がかかる

感想

プロジェクトが少なかったりチームが小さいと小回りがきくのでやりやすそう.またタグでリソース管理元リポジトリがわかるようにしているのは便利そう!

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

Providerのない外部サービスでもそのサービスがAPIさえ提供していてくれればCustom Providerを作って構成管理できるという話.TwilioのProviderを作成された際の知見を話された.

  • クラウド以外の外部サービスを使う場合でも有名なサービスであればTerraformにProviderが用意されている
  • APIを提供している外部サービスはTerraformのProviderを自作すればTerraformで管理できる
  • Providerの作り方
    • 公式ドキュメントをやる
    • TerraformProvider実践を読む
    • 既存のProviderコードを読む

感想

Terraform側が提供しているProviderもまぁまぁあるが,APIさえあれば管理できちゃうともなるとWebで使っているサービスに関してはほとんど管理できるのではと感じた.

Terraformerのおはなし

Terraformerのアーキテクチャと機能追加のプルリクエストを送った際の知見を話された.

  • Terraformerとは,対応しているSaaS,IaaSの既存情報を元にtfstateとtfファイルを作成してくれる
  • Terraformのアーキテクチャ
    • 前処理
    • Providerとの通信
    • 取得結果のparse
  • 機能追加で実際コードを書くのはアーキテクチャでいう前処理部分だけ,簡単!
  • TerrafomerもすごいけどTerraformのplugin機構もすごい
    • 各種pluginはSaaSのresourceのCRUD部分を抽象化してくれてすごい

感想

機能追加のプルリクエストなのにコード書いてる部分少なくてお手軽に実装できそうだなと思った. Terraformすら触っていない自分としては,既存のAWS環境をTerraformerでimportしてみてどのようなstateが出力されるのか,1から作成するよりも作業が少なくなるのか試してみようと思う.

FOLIOのTerraform運用tips

FOLIOさんでTerraformを運用しているやり方が全体的に見えるようなお話をされた.

  • Terraformコマンドの運用
    • Makefileを通してTerraformコマンドを打つことによりバージョンを固定している.最近のアップデート(0.11->0.12)では破壊的な書式の変更があったがバージョンを固定していて役に立った.Makefileなのは各自のローカル環境の依存が少ないから.
  • ディレクトリ構成
    • 各アカウントごとにディレクトリを切ってtfファイル等を置いている.rootディレクトリにはUserのRoleなどのstateが入っているらしい.
    • applyの影響範囲を小さくし,実行時間も短くするためにディレクトリを分けるのだが,塩梅は経験と気合い
  • 変数の格納
    • アカウントを超えて全体で使う変数とアカウント固有の変数で分けている
  • Terraformの書き方
    • 属人化を防ぐことやTerraformの破壊的変更への対策等の理由からコメントは重要視していた.特にresourceに対するコメントは必須らしい
  • 全体設計レビュー
    • Terraformの設計はさまざまなコンポーネントをcommitしていくため,会社では中間や完成後にがっつりレビューするスタイル.途中のプルリクエストなどはさっとレビューでバンバン通す.

感想

Terraformで迷いそうなディレクトリの構成や開発の仕方など全体に渡って実用例を解説していただけてとても参考になった. 運用の話においては,誰が見てもわかるようにコメントを残すことを徹底されているところに共感した.

World Cafe

ここからはWorld Cafeというディスカッションを各テーブルで行う時間. 簡単に言うとWorld Cafeとは,あるトークテーマについてみんなで話し合う場である.詳しくは以下の資料を参考にしていただければと思う.

docs.google.com

自分は初めてのWorld Cafeだったが,控えめに言ってとてもすばらしいイベントだった. 勉強会に集まったみんなと情報共有することで新たな知見を得ることができるし,悩み相談もできる. World Cafeでは,その場にいる参加者同士でコミュニケーションを取ることの良さを改めて感じた. 勉強会によりけりかもしれないが,どの勉強会もWorld Cafeを取り入れてくれると嬉しい.

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

Terraform WorkSpace機能の紹介.Terraform WorkSpace機能はThe Twelve-Factor App (日本語訳)を考える上でも役に立つとお話しされていた.

  • The Twelve-Factor Appの1つである開発/本番環境の一致をTerraform WorkSpaceで実現できる
    • resource_countを使って不要な環境では立ち上げない
  • インフラ用dev環境がWorkspaceで作れる
    • アプリケーションの構成をインフラでも再現したい時,Workspaceを作成してTerraformで記述されたリソースがどのように立ち上がっていくのか確認できる
  • Workspaceを使ってて辛かったこと
    • 使っている人が少ないので情報量が少ない
    • Workspaceやめましたみたいなブログがあって悲しくなる

感想

自分が初心者なのでTerraform WorkSpaceについての情報量が少ないのは心もとないがメリットはありそうなので検討してみたい.

www.slideshare.net

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

TerraformとAzureの組み合わせで実現できたことできなかったこと,こけそうなポイント,今後の課題などをお話しされた.

  • 実現できなかったこと
    • Event Hubsのイベントサブスクリプションの構成
      • 技術的に可能そうだが,実現できなかった
    • Key Valutのアクセスポリシー
      • ポータルから手動で構成したほうが運用しやすい
  • こけそうなポイント
    • App ServiceにApplication Insightsを構成する際,APPINSIGHTS_INSTRUMENTATIONKEYを記載しただけでは有効化されない
    • SQL ServerのセキュリティはTerraformで構成不可
    • Traffic Managerのステータスコードの範囲はTerraformで構成不可
  • 今後の課題
    • Azure Pipelinesのymlファイルを含めたときのフォルダ構成のベストプラクティス

感想

Azureは普段から触っていないが,社内のサービスで利用しているところはあるのでそのサービスでTerraformを使うことがあれば参考になりそう.

onedrive.live.com

Terraform-provider-awsのコントリビュータになろう!

Terraform-provider-awsコントリビュータになるまでをお話しをされた.

  • コントリビュートへの道
    • コードを書かないコントリビュートもある
    • 一番大変なのは「課題を見つけること」
    • とりあえずやってみよう
  • コードを書かないコントリビュートもある
    • ドキュメントの修正
      • typo
      • ドキュメントが追従してない etc…
    • 不具合の報告
  • 一番大変なのは「課題を見つけること」

    • GitHubのIssueを眺める
      • 「Refactor」「technical-debt」などで検索
  • とりあえずやってみよう

    • 事前準備
    • コード修正
    • プルリクエスト作成
      • プルリクエストテンプレートがある
    • プルリクエスト作成に必要な項目
      • 関連するIssue
      • リリースノートに記述する文(なければNONE)
      • テストの実行結果

感想

Terraform Providerに限らず他のOSSでも使えそうで参考になる.コードほぼかかなくていいのはお手軽!

docs.google.com

まとめ

Terraformを今後使っていこうとしている身としては参考になる情報満載でとても有意義な時間だった! 特に,World Cafeでたくさん運用Tipsを聞くことができて,また参加しようという気持ちになった! 次の機会までに,自分も使ってみたtipsや感想を共有できるようになっていたいと思う.