こんにちは、セキュリティエンジニアの田所です。
現地参加した AWS Summit Japan のセッションの模様をお届けします。

 

セッションについて

AWS-58 モダンな CI/CD ツールボックス:一貫性と信頼性を確保するための戦略

ソフトウェアデリバリーの規模と環境が多様化するにつれて、継続的インテグレーションと継続的デリバリー (CI/CD) における一貫性、セキュリティ、信頼性の維持はますます困難になっています。本セッションでは、ベストプラクティスと最新の手法を採用することで、増大する複雑さに対処する方法を示します。複数環境に対する一貫したデプロイメント、堅牢な構成管理、プログレッシなブデリバリー戦略の実現、インフラストラクチャのドリフト検出、生成 AI による自動監査を実現する方法を解説します。統一された CI/CD パイプラインによる変更の一元管理と、デリバリープロセスの標準化を通じて、信頼性、安全性、効率を向上させる実践的なアプローチを提示します。

CI/CD パイプラインにより開発速度や品質の向上が期待できる一方、デプロイの一貫性と柔軟性の両立が難しい、ベンダーロックが起こりやすいなどの課題も存在します。
それらを乗り越えるためのヒントをご紹介します。

 

1. CI/CD の基礎と GitOps

CI/CD はその名の通り、継続的インテグレーション (Continuous Integration) と継続的デリバリー (Continuous Delivery) を行います。
アプリやインフラのコードを変更した時に、そのコードをテストした上でアプリ/インフラに変更を反映します。
その一連を自動化することで、開発を高速、高頻度で行うことができる仕組みです。

変更には DB のパスワード変更、インフラの追加、アプリの修正など様々ありますが、
誰が、いつ、なぜ変更したのか分かること、それがポリシーやコンプライアンスに準拠していることが大切です。

そこでよく用いられる手法が GitOps です。
Git を唯一の信頼できる情報源としてアプリ、インフラをコード管理します。

開発者にデプロイの決定権を与えることで、開発サイクルの短縮が望めます。

AWS では GitOps に役立つ以下の機能を提供しています。

  • AWS CloudFormation とコードリポジトリの接続
  • AWS CodePipiline ブランチとプルリクエストのサポート
  • Cloud Native Operational Excellence (CNOE) で開発者向けのナレッジ共有

そして GitOps に生成 AI の力を組み込むこともできます。

以下の例では、コードに変更を加えた時に Amazon Bedrock でリリースサマリーを作成し、そのサマリーを見てリリースの承認を行う仕組みが紹介されています。
開発者がリリース内容をまとめて説明する労力、承認者がリリース内容を読んで理解する労力が軽減されそうですね。

 

2. CI/CD パイプラインの一貫性と柔軟性

CI/CD のメリットはプロジェクトを跨いでその仕組みを転用できることにあります。
しかしプロジェクトごとの要件の違いから、独自にパイプラインの構成を崩してしまうと一貫性は保てなくなってしまいます。

そこで鍵になるのが、パイプラインテンプレートとカスタムフックの活用です。

  • 共通アクションを定義した、ベースとなるパイプラインテンプレート(一貫性の確保)
  • 条件分岐やプロジェクト特有の処理を挿入するカスタムフック(柔軟性の確保)

これらを組み合わせてパイプラインを設定することで一貫性と柔軟性を両立できます。

またパイプラインの管理・運用についても触れていました。

  • 全てのパイプラインを専任チームが管理する集中型(一貫性偏重)
  • それぞれのパイプラインをそれぞれのチームが管理する分散型(柔軟性偏重)

これら2つが典型的な管理体制ですが、パイプラインテンプレートとカスタムフックの考えに沿って、
混合型の管理にすることで一貫性と柔軟性のバランスが取れると言います。
専任チームが標準テンプレートを管理・提供し、それぞれのチームがステップの修正を行います。

 

3. ポータブルな CI/CD

CI/CD の仕組みは便利である一方、移行のハードルがあるとベンダーロックがかかりやすいという課題もあります。
規制の変更などでベンダーを変えたい時はどうすれば良いのでしょうか。

導入や移行が簡単で、一貫性と柔軟性を両立できると理想です。

そのための一つの案として Projen-pipelines が紹介されていました。
Projen-pipelines とは CI/CD パイプラインの生成を自動化するオープンソースプロジェクトです。

抽象化した記述から、GitHub, GitLab など各ツールに対応したコード生成を行います。
そのため、ほとんど同じコードでツールの切り替えが可能になります。

CDK の指定変更だけで別のテンプレートを生成してくれます。

Projen-pipelines を活用することでプラットフォームに捉われないポータブルな CI/CD を実装できることが分かりました。
これで CI/CD のベンダーロック回避が可能となります。

 

まとめ

一貫性と柔軟性の両立、ポータブルな CI/CD について見てきました。
生成 AI 技術の普及も相まって、概念を抽象化した状態で管理するという発想は、今後さらに一般的になってくるのではないかと感じました。

おしまい