【クラウド基盤準備編】IaC・CI/CDによる開発・運用環境の効率化

infrastructure データINPUT

なぜ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サーバー主にサーバー内の環境構築が可能で、
ユーザー作成やパッケージインストールなど
様々な環境構築が行える
terraformAWS・GCPなどの
リソース
providerを切り替えることで複数サービスを対象とでき、
クラウド環境のIaCで利用されることが多い
AWS Cloud FormationAWSのリソースAWS性のIaCサービス
更新も可能だがterraformと比較すると、
主に構築側に特化しているように感じられます
GCP Cloud Deployment ManagerGCPのリソースGCP性のIaCサービス
GCP Marketplaceに公開されているテンプレートがあり、
それによってwordpressなどが簡単に構築可能
※筆者の利用経験からまとめているため、一部情報が古いor正確でない可能性があります

システム構成例(IaC + CI/CD)

今回はIaCとCI/CDを組み合わせた場合のAWS・GCPのシステム構成例をご紹介します。

AWS

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

GCP

構成
サービス備考
IaCterraformgithubにterraformファイルを管理し、stateファイルGCSに保管する
CI/CDCloud BuildCloud Buildを使うことで、
サーバーを準備せずにterraformコマンドを実行できます
設定例
  1. CloudStorageにてterraform設定ファイルを置くバケットを作成
    • デフォルトのロケーションはUSになっているため注意
  2. CloudBuild APIを有効化する
  3. CloudBuildのトリガーを設定する
    • イベント:stgはpull request、prdはmasterへのpush等分けておく
    • ソース:terraform構成ファイルを配置するリポジトリ
  4. リポジトリ側を編集し、イベントに合致する形で編集を行うとCIが自動で起動するようになります

※ 機密情報を使う場合

  1. SecretManagerのAPIを有効化する
  2. SecretManagerにてシークレットを追加する
  3. こちらを参考に追加したシークレットをcloudbuild.yamlにて利用

まとめ

今回同時に用いられることの多いIaCとCI/CDの概要を紹介させていただきました。IaC・CI/CDは少し学習コストがかかりますが、開発効率を上げて中長期的におおかな効果が得られる技術なので初心者の方も早い段階で習得することをおすすめします。最後のシステム構成例は実運用で用いることも多いものであり、まだ導入したことがない方はテストで導入してみてもらえると幸いです。

本記事内容をご利用される前にご確認お願いします

  • SinkCapitalギルドメンバーが記載したギルド内部向け記事を一般公開したものです
  • 記載内容の情報鮮度や正確性に問題があった場合も、本記事の内容を利用したことによるあらゆる問題には一切責任を負いかねます
  • 要望や指摘、意見等あれば気軽にコメントいただけると幸いです
  • 弊社にご興味のあるかたは是非弊社HP相談フォームを御覧ください

コメント

タイトルとURLをコピーしました