🐡

terraform導入と構成について

2023/07/12に公開

はじめに

sweeep株式会社エンジニアの五十嵐です。
terraformを実際にプロジェクトで導入してみました。

インフラ改修の背景

これらの背景から弊社ではインフラを改修しました。
今回の記事ではterraformの導入に焦点を当てて紹介していきたいと思います。

  • 開発のアジリティをあげたい
  • 組織に合わせた操作難易度のインフラを構築する
  • 安全にリリースしたい
  • コストの最適化

想定される運用

弊社の運用フロー上これらの条件を満たす必要がありました。

  • QAチームがCloud Buildでトリガーを手動実行してデプロイ
  • FEとBEをそれぞれ別でデプロイ
  • dev,stg,prodで環境が分かれている

Terraformの構成

構成は運用をカバーできるようにという観点と以下のベストプラクティスを参考に考えました。
https://cloud.google.com/docs/terraform/best-practices-for-terraform?hl=ja
FEのリソースとBEのリソースは別々で管理できるようにしたかったのでディレクトリを切っています。
また、サービスはそれぞれCloud Runを使用しています。

-- SERVICE-DIRECTORY/
   -- cd/
      -- cloudbuild.yaml
   -- modules/
      -- <service-name>/
         -- main.tf
         -- variables.tf
         -- outputs.tf
      -- ...other…
   -- environments/
      -- dev/
         -- shared_locals.tf
         -- web/
            -- backend.tf
            -- main.tf
         -- BE/
            -- backend.tf
            -- main.tf

      -- stg/
         -- shared_locals.tf
         -- web/
            -- backend.tf
            -- main.tf
         -- BE/
            -- backend.tf
            -- main.tf

      -- prod/
         -- shared_locals.tf
         -- web/
            -- backend.tf
            -- main.tf
         -- BE/
            -- backend.tf
            -- main.tf
   -- shared/
      -- shared_provider.tf

cd

cloud buildでapplyするためのyamlを配置しています。

modules

environmentsから呼び出すモジュールを定義しています。

environments

環境ごとにterraformファイルを配置しています。
shared_locals.tfは環境毎に共通で使用できるlocals.tfを定義します。

shared

環境毎に差分がないものをここに作成します。
各環境でシンボリックリンクを作成します。

今後の課題

tfvarsをsecret managerで管理するようにしてセキュリティ面でも安全に使用できるようにしつつ、テストや静的解析ツールの導入もしていきたいです。

さいごに

まだterraform歴が浅いのでこれから、改善をしつつ運用していきたいです。

最後に、弊社では絶賛エンジニア募集中なので、気になる方は以下を覗いてみてください!
https://www.wantedly.com/companies/sweeep/projects

Discussion