なぜIaC・CI/CDが必要なのか

IaC
Infrastructure as Code(IaC) はコンピューティング・インフラ(プロセス、ベアメタルサーバー、仮想サーバーなど)の構成管理・機械処理可能な定義ファイルの設定・プロビジョニングを自動化するプロセスである。
…
IaCの価値は、測定可能な3つのカテゴリに分類できる:コスト(削減)、スピード(実行の高速化)、リスク(エラーとセキュリティ違反の除去)。
https://ja.wikipedia.org/wiki/Infrastructure_as_Code
IaCはインフラの構成をコードで管理する考え方で、Amazon Web Services(以下AWS)やGoogle Cloud Platform(以下GCP)などクラウドの広がりを受けるかたちで近年重要性が高まっています。まず設計図をコードで書いておき、それに沿ってインフラの構築・管理を行うイメージです。
「構築手順書」を使ってインフラを構築する場合と比較すると、IaCがなぜ必要かが見えてきます。また【準備編】git・コードの管理で紹介したGitを組み合わせることで、インフラ開発時にGitのメリットを享受することができます。これによりインフラにおける「システムの可用性」や「原因調査の精度」向上が望めます。
構築手順書 | IaC | |
コスト | ・本番デプロイの度に作業人数✕デプロイ時間が必要 | ・システムデプロイのため人的コスト不要 ・設計によりシステムコストも削減可能 |
スピード | ・手順確認等でデプロイ時間が必要 | ・システムデプロイのため短い(数分~) |
リスク | ・確認ミス等でデプロイが失敗する ・場合によっては本番環境を壊してしまう可能性あり | ・デプロイ方法がコード化されているため安全 |
CI/CD
CI / CDは、アプリケーションの構築、テスト、および展開の自動化を実施することにより、開発および運用アクティビティとチームの間のギャップを埋める。現代のDevOpsプラクティスには、継続的開発、継続的テスト、継続的インテグレーション、継続的デプロイ、および開発ライフサイクル全体にわたるソフトウェアアプリケーションの継続的モニタリングが含まれる。 CI / CDプラクティスまたはCI / CDパイプラインは、現代のDevOpsオペレーションのバックボーンを形成する。
https://ja.wikipedia.org/wiki/CI/CD
CI/CDは構築やテストなどの自動化を行う手法のことで、IaCとの関連で行くとIaCの設計図を書いた際に、自動でデプロイシステムを起動させる際に用います。これによってIaCの設計図に当たるコードを編集し、Gitで本番ブランチにマージするだけで構築まで自動で行うシステムを組むことができます。これによりIaCのメリットをIaC単体よりも多く享受することができます。
IaCの種類
IaCは環境によっていくつか種類がありますが、その中で有名なものをいくつかご紹介します。
管理対象 | 特徴 | |
Chef | サーバー | 主にサーバー内の環境構築が可能で、 ユーザー作成やパッケージインストールなど 様々な環境構築が行える |
terraform | AWS・GCPなどの リソース | providerを切り替えることで複数サービスを対象とでき、 クラウド環境のIaCで利用されることが多い |
AWS Cloud Formation | AWSのリソース | AWS性のIaCサービス 更新も可能だがterraformと比較すると、 主に構築側に特化しているように感じられます |
GCP Cloud Deployment Manager | GCPのリソース | GCP性のIaCサービス GCP Marketplaceに公開されているテンプレートがあり、 それによってwordpressなどが簡単に構築可能 |
システム構成例(IaC + CI/CD)
今回はIaCとCI/CDを組み合わせた場合のAWS・GCPのシステム構成例をご紹介します。
AWS

構成
サービス | 備考 | |
IaC | terraform | githubにterraformファイルを管理し、stateファイルS3に保管する |
CI/CD | AWS CodeBuild | AWS CodeBuild(or AWS CodeDeploy)を使うことで、 サーバーを準備せずにterraformコマンドを実行できます |
その他 | AWS CodePipeline | CI/CDとして機能させるためにGitHubの変更をフックとして、 AWS CodeBuildを起動させるために必要 |
設定方法
- AWS CodePipelineにてGitHubとの接続設定を行う
- イベント:stgはfeature/developへのpush、prdはmasterへのpush等分けておく
- ソース:terraform構成ファイルを配置するリポジトリ
- AWS CodePipelineのデプロイにおいてAWS CodeBuildの作成及び接続を行う
- リポジトリ側を編集し、イベントに合致する形で編集を行うとCIが自動で起動するようになります
GCP

構成
サービス | 備考 | |
IaC | terraform | githubにterraformファイルを管理し、stateファイルGCSに保管する |
CI/CD | Cloud Build | Cloud Buildを使うことで、 サーバーを準備せずにterraformコマンドを実行できます |
設定例
- CloudStorageにてterraform設定ファイルを置くバケットを作成
- デフォルトのロケーションはUSになっているため注意
- CloudBuild APIを有効化する
- CloudBuildのトリガーを設定する
- イベント:stgはpull request、prdはmasterへのpush等分けておく
- ソース:terraform構成ファイルを配置するリポジトリ
- リポジトリ側を編集し、イベントに合致する形で編集を行うとCIが自動で起動するようになります
※ 機密情報を使う場合
- SecretManagerのAPIを有効化する
- SecretManagerにてシークレットを追加する
- こちらを参考に追加したシークレットをcloudbuild.yamlにて利用
まとめ
今回同時に用いられることの多いIaCとCI/CDの概要を紹介させていただきました。IaC・CI/CDは少し学習コストがかかりますが、開発効率を上げて中長期的におおかな効果が得られる技術なので初心者の方も早い段階で習得することをおすすめします。最後のシステム構成例は実運用で用いることも多いものであり、まだ導入したことがない方はテストで導入してみてもらえると幸いです。
コメント