Amazon Web Services ブログ
GitOps を使用したサーバーレス時代における最新の CI/CD パイプライン構築
AWS コミュニティヒーローで、Datree.io の CTO 兼共同創設者、Shimon Tolts 氏によるゲスト投稿。彼は開発者向けのツールとインフラストラクチャが専門分野で、100% サーバーレスの会社を運営しています。
近年、ソフトウェアの構築と配信の方法に大きな変化がありました。主にマイクロサービスに関するもので、コードを小さなコンポーネントに分割し、インフラストラクチャをコードとして使用し、Git を信頼できる唯一のソースとして利用することでこれらすべてを結び付けたのです。
この記事では、最新のソフトウェア開発の推移とさまざまな手段について説明しながら、サーバーレスの世界での選択可能なソリューションをご紹介します。さらに、現代にふさわしい便利なツールもご紹介します。
サーバーレスとは
サーバーレスの開発とツーリングの魅力あふれる世界をご紹介する前に、サーバーレスとは何かを考えてみましょう。AWS のウェブサイトには、主に 4 つの利点があります。
- サーバー管理の必要がない。
- 適応性のあるスケーリング。
- 価値に対する支払い。
- 高可用性の自動化。
サーバーレスとは管理やスケーリングを必要としないインフラストラクチャであると、私は考えています。
私の会社の Datree.io では、ワークロードの 95% を AWS Fargate で、そして残りの 5% を AWS Lambda で実行しています。当社はサーバーレスの会社であるため、AWS アカウントには Amazon EC2 インスタンスがありません。詳細については、以下をご参照ください。
- io での導入事例
- Migrating to AWS ECS Fargate in production
- CON320: Operational Excellence w/ Containerized Workloads Using AWS Fargate (re:Invent 2018)
GitOps とは
Git は無料でオープンソースのバージョンコントロール分散システムで、小規模から大規模なプロジェクトまでを迅速かつ効率的に処理できるように設計されています。
CI/CD コンサルタントの Luis Faceira 氏によると、GitOps は作業方法の 1 つだといいます。すべてを Git で完結するアプローチと考える人もいます。Git の主なコンセプトは次のとおりです。
- システムにおける情報の唯一のソースとしての Git
- すべての環境を操作 (作成、変更、破棄) する唯一の場所としての Git
- あらゆる変更を観察および検証できる。
クラウド以前のソフトウェア構築方法
クラウドが誕生する前には、開発、テスト、セキュリティ、運用、モニタリングなどに別々のチームが必要でした。
今日ではほとんどの組織で開発者が完全に自律しており、実運用の流れ全体を担当するという方向に移行してきています。いわば、開発者は王者なのです。
以前は、Ops、セキュリティ、IT などのチームが管理者として、開発者が変更したものをすべて検証し、管理していました。しかし現在では、こうしたチームはポリシーを運用し、ベストプラクティスや基準を設定する衛星ユニットの意味合いがより強くなっています。これらの実施はもはや運用上の障壁ではなくなったため、チームは組織全体のプラットフォームと実現可能なソリューションを提供しています。
すべてを体系化する
パイプライン全体において開発者がすべてを担当するようになり、開発者はすべてを自動化するようになりました。当社では従来にも増して多くのコードを使っており、以前は手動であったプロセスも今はコードで記述しています。
この変化は良いことだと考えます。利点としては、次のようなものが挙げられます。
- 自動化: あらゆるものをコード化し保存することで、すべてを瞬時に自動化、再利用、再作成することができる。
- 不変: 問題が起こった場合、保存してある設定から再度作成できる。
- バージョン管理: 変更を適用したり元に戻したりでき、さらに変更を行った 1 人のユーザーを突き止めることができます。
GitOps: 信頼できる唯一のソースの Git
2 つ目に挙げられる大きな変化は、今やすべてがひとところに集合しているということです。 Git はすべてのコードを格納し、すべての操作を開始する場所です。テスト、構築、パッケージ、リリースであろうと関係なく、今日ではすべてがプル要求を通じてトリガーされます。
すべてを体系化することで、こうしたことがより加速します。
サーバーレス時代の便利なツール
マーケットには数多くの便利なツールがありますが、サーバーレス用に設計されたものを以下に挙げています。
コード
コードは必ずソース管理システムに保存しましょう。近年では、BI、オペレーション、セキュリティ、AI など、ますます多くの機能が体系化されてきています。ですが、いくつかの機能ではソース管理を行うべきであることを、新入りの開発者が必ず理解しているとは限らないためです。
構築とテスト
GUI で構築ジョブを手動で設定することはよく見られますが、これは行うべきではありません小さな POC には良いかもしれませんが、スケーラブルな方法ではないからです。ジョブを体系化し、Git リポジトリの中に置くのがよいでしょう。構築とテストに役立つツールを、以下でご紹介します。
セキュリティとガバナンス
サーバーレスで作業する場合、Git リポジトリを多数用意することになります。そのため、コードパッケージの数は膨大となる可能性があります。統一化したコード基準への要求は以前と変わりませんが、研究開発組織にとってこれを実施することは今でははるかに困難となっています。以下に、問題解決に役立つ可能性のあるツールを挙げています。
バンドルとリリース
サーバーレスアプリケーションの構築とは、マイクロサービスを 1 つのユニットに接続することです。Amazon API Gateway、AWS Lambda、Amazon DynamoDB を使用しているとしましょう。それぞれを個別に設定するのではなく、バンドラーを使用して設定を 1 か所にまとめるのがよいでしょう。これで、いくつかの環境でのアプリのバージョン管理とレプリケーションが簡単になります。バンドラーをいくつか挙げておきます。
パッケージ
さまざまなサーバーレスコンポーネントを扱う場合、いろんな Lambda 関数にわたりインポートができるように、小さなツールパッケージを作成する必要があります。npm や RubyGems のような言語固有のストアを使用したり、もっと包括的なソリューションを使うことが可能です。以下は、複数のプログラミング言語のホスティングを可能にするパッケージアーティファクトストアです。
モニタリング
この部分はすべてが細かく分割されているため、サーバーレスアプリケーションで作業する際には特に注意が必要です。このような作業をサポートするモニタリングツールを使用してください。サーバーレスに対応できるツールは次のとおりです。
まとめ
サーバーレスの時代には、サーバーレスへの移行だけでなく、パイプライン全体の体系化や信頼できる唯一のソースとしての Git への移行など多くの変化が生まれています。しかしながら、セキュリティ、ログ記録などこれまで私たちが頭を抱えてきた問題がこれで解決した訳ではありません。こうした問題に継続的に取り組みつつ、ビジネスにも集中できるように私たちを支援してくれるツールを利用する必要があるのです。