個人的にプラットフォームエンジニアリングがアツいのでキャッチアップをしているのですが、以下のサイトからAtlantisというツールを見つけたので触ってみました。
この図ではInfrastructure Controle Plane
に属するらしく、他サービスとの統合は特になさそう。
Atlantis is 何?
What is Atlantis?
A self-hosted golang application that listens for Terraform pull request events via webhooks.
めちゃくちゃシンプル!
GitHubのREADMEにあるように「セルフホストして、WebHook経由でPRからterraform実行できるサービスですぜ」ってやつらしい。
何に使えそう?
類似サービスとの比較はこの記事がわかりやすいと思います。(クラメソさんいつもありがとう)
例えば以下のようなワークフローで運用している場合、applyが正常に終わればよいのですがたまにapplyでコケる時があると思います。
- PR出す :
terraform plan
の実行 - PRのマージ :
terraform apply
の実行
理解は浅いですが、AtlantisはPRで完結するためapply結果に合意してからのマージが可能になりそうです。
使ってみる
こちらを元に進めます。
検証環境
terraform moduleが提供されているのでECS Fargateで構築します。
タスクがイメージをプルできない場合は以下の対処法があります。
- nat gatewayがあることを前提に作られているようなので構築する
- ECS パブリックIP自動割り当ての変更はCLI経由で実施しようを参考にCLIから設定する(クラメソさんいつもありがとう)
ディレクトリ構造
.
├── modules
│ ├── s3.tf
│ └── variables.tf
└── services
├── prod
│ ├── main.tf
│ └── provider.tf
└── stg
├── main.tf
└── provider.tf
認証情報
GithubのPATとWebhookのシークレットを作成しました。
それぞれご参考に.
動作
サンドボックス環境を作ったのでこのPRを元に一連の流れを書いていきます。
terraform planの実行
atlantis plan
とコメントすると:eyes:
の絵文字がついてplan結果がコメントされます。
ディレクトリごとに実行されているし、差分のないパスには実行されないようです
applyも同様にatlantis apply
で実行できます。applyコケても大丈夫
ダッシュボード
planを行うとロックし、applyが終わると解除されるのですがセルフホストしたAtlantisのurlを叩くと以下のような画面が出てきます。
デフォルトでは認証がないので気をつけてください
実行ログを確認する
画面下側Jobs
の右に日付付きのリンクを押すとお馴染みの実行ログが出ます。
所感
マージ前にapplyができたりは嬉しいが、セルフホストするのは少々大変。
なのでGitHub Actionsで同じ仕組みを作るのが魅力的に感じました。
まとめると、PRベースでapplyできるのは素敵だが手段としてAtlantisを使うのがベストとは思えない。
更に、パイプラインが既に整備されているならば移行・管理コストに比べメリットは少ない。