AWS CodePipelineでTerraformパイプラインを実装する

AWS

2024.3.28

Topics

はじめに

こんにちは、フクナガです。
約2年ほど前、実行するだけでTerraform実行環境がデプロイできるCloudFormationテンプレートを記事でご紹介しました。

Terraform を運用するについて考える ~第2回 Terraformを始める~

個人的にもかなり使っているテンプレートで、非常に有益な記事だなと自分でも思っています。しかし、中身の設計思想などについてはあまり触れていなかったので、そういった部分をご紹介しながら、AWS CodePipelineでTerraformパイプラインを構築すると何がうれしいのかご説明できればと思います。

Terraformパイプラインの概要

Terraform実行フロー

Terraformパイプラインの処理フロー図

【各リソースについて】

(1) AWS CodeCommit

プライベートGitリポジトリをホストするマネージドサービスです。今回は、Terraformソースコードの管理に利用します。
参考:AWS CodeCommit(プライベート Git リポジトリでのコードの保存)

(2) AWS CodePipeline

CI/CDパイプラインを構築できるマネージドサービスです。S3やCodeCommitなどとの統合をサポートしており、ソースの変更を検知してパイプラインを自動で実行することが可能です。
参考:AWS CodePipeline(継続的デリバリーを使用したソフトウェアのリリース)

(3) AWS CodeBuild

事前に定義された設定ファイルをもとに、コンパイルやデプロイなどのコマンドを実行します。AWS CodePipelineと組み合わせることで、CI/CDパイプラインを構築できます。
参考:AWS CodeBuild(継続的スケーリングによるコードのビルドとテスト)

インフラ管理/設定変更作業

(1) 状態管理

AWS CodeCommitの特定のブランチ(本記事ではmainブランチ)が更新されると、必ず環境更新用パイプラインが作動します。そのため、AWS CodeCommitの特定のブランチの中身を確認することで、現状のインフラ構成や状態を把握することが可能です。
細かな設定値や各リソースの関係を把握するのにとても良いです。

(2) 変更作業

変更作業は、下記のフローで行われます。

①CodeCommit上から取得した最新のソースコードを修正し、マージリクエストを実施
②レビュー者がマージリクエストで表示されるソースの更新内容を確認し、マージ
➂マージされたことをトリガーにパイプラインが実行される
④1つ目のCodeBuildでterraform planが実行される
➄terraform planの内容に問題がなければ手動承認
⑥terraform applyにより、環境変更が実行

変更方法や実行環境を統一することで、予期せぬエラーやレビューなしの環境変更などを防ぐことが可能です。
また、AWS CodeCommitのマージリクエスト機能では、レビュワーを設定することも可能ですので、より安全に運用することが可能です。
参考:プルリクエストの承認ルールを作成する

レビュープロセス

(1) CodeCommitにおけるコードレビュー

マージリクエストを実行すると、レビュー者は下記のような画面で更新差分を確認できます。
AWS CodeCommit上でマージリクエストを実行_ソースコードの差分比較

環境を把握しているメンバーが「何を変更しようとしているのか」をレビューすることで、予期せぬ環境差分が生まれることを防ぎます。また、変更の履歴(コミットの履歴)についても確認ができるため、「いつ」「誰が」「何を」変更したのか後から確認することも可能です。
参考:AWS CodeCommit でコミットの詳細を表示する

(2) AWS CodeBuildにおけるterraform plan差分レビュー

terraform plan用のAWS CodeBuildログを参照することで、terraform planの結果を確認することが可能です。
変更後のTerraformソースコードと現環境の状態の差分をチェックし、変更内容を出力する「terraform plan」コマンドの結果を確認することで、予期せぬ変更や削除が発生しないことを確認します。
基本的には、AWS CodeCommitにソースコードを格納する前にterraform planを実行することが推奨されますが、このような最終チェックをフローに組み込むことでより安全なデプロイを実現します。
パイプライン設計においては「自動」と「手動」をいかに組み合わせるかが非常に重要な要素です。

まとめ

本記事では、以前ご紹介したCloudFormationテンプレートの設計思想やプロセスについてご説明しました。
この記事を見て、改めて「使えそう!」と思った方はぜひこちらの記事も読んでいただけると嬉しいです。
※執筆したのが2022年10月26日となりますので、利用時はご注意ください

フクナガ

インフラエンジニア歴5年のフクナガです。AWS(特にBedrockとCodePipeline)が得意分野。休日はベースを弾いてます。技術力と発信力を高め、Top Engineerを目指しています。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら