API Management の CI/CD パイプラインをビルドする

2019年3月6日 に投稿済み

Senior Program Manager, Azure API Management

API は日常的に使用されており、アプリ、データ、サービスを接続するためのデファクト スタンダードになっています。さらに視点を広げるなら、API は組織のデジタル トランスフォーメーションを推進するものにもなっています。

API の持つ戦略的価値ゆえに、継続的インテグレーション (CI) と継続的配置 (CD) パイプラインは、API 開発の重要な側面となっています。組織はこのパイプラインを使用することにより、エラーが発生しやすい手動の手順を挟まずに API の変更を自動的にデプロイし、問題を初期段階で検出し、最終的には一層スピーディにエンド ユーザーに価値を提供できます。

このブログでは、Azure API Management で公開された API への変更をデプロイするための CI/CD パイプラインの実装に関する概念的なフレームワークを概観します。

問題点

現代の組織では、通常、デプロイ環境が複数あり (開発、テスト、運用など)、それぞれの環境で別個の API Management インスタンスを使用します。これらのインスタンスの中には複数の開発チームによって共有されるものがあり、それらのチームはそれぞれ異なるリリース間隔で異なる API を担当しています。

その結果、ユーザーから次のような疑問がしばしば寄せられます。

  • API を API Management にデプロイする処理を自動化するにはどうしたらよいか。
  • どうすれば 1 つの環境から別の環境に構成を移行できるか。
  • 同じ API Management インスタンスを共有している別個の開発チーム間の干渉を避けるにはどうしたらよいか。

下記のアプローチは、これらの課題すべてに対処する助けになるはずです。

API Management を使用した CI/CD

API Management を使用した CI/CD のワークフロー図

お勧めのアプローチを上図に示します。この例では、デプロイ環境が 2 つあります。開発環境と運用環境です。それぞれに独自の API Management インスタンスが指定されています。運用インスタンスは、"API 発行元" という名称の専属チームによって管理されています。"API 開発者" は開発インスタンスにのみアクセスできます。 

お勧めのこのアプローチで重要なのは、すべての構成が Azure Resource Manager テンプレートに保持されていることです。これらのテンプレートはソース管理システム内に保持される必要があります。例として、Git を使ってみましょう。図で示したとおり、発行元リポジトリがあり、これには運用 API Management インスタンスの構成すべてがテンプレートのコレクションの形で格納されています。

  • サービス テンプレート: サービスレベルの構成すべて (価格レベルやカスタム ドメインなど) を格納します。
  • 共有テンプレート: API Management インスタンス全体の共有リソース (グループ、製品、ID プロバイダーなど) を格納します。
  • API テンプレート:API とそのサブリソースの構成 (操作やポリシーなど) を格納します。
  • マスター テンプレート: すべてのテンプレートとリンクして、すべてを 1 つにまとめます。

API 開発者は、発行元リポジトリをフォークし、複製します。多くの場合、API 開発者が注意を向けるのは使用する API の API テンプレートであり、共有テンプレートやサービス テンプレートには変更を加えません。

Resource Manager テンプレートを操作する場合、API 開発者にとって課題が 2 つあります。

  • 第一に、API 開発者は通常 Open API 仕様に基づいて作業をしているため、Resource Manager スキーマに精通していない場合があります。テンプレートの作成を簡略化するため、Microsoft は Open API 仕様に基づき API テンプレートを自動作成するユーティリティ ツールを作成しました。
  • 第二に、既に API Management を使用しているお客様の場合、既存の構成をどのように Resource Manager テンプレートに抽出するかが課題になります。そのため、既存の構成に基づいてテンプレートを生成するための別のツールも作成しました。

API の開発とテストが済み、API テンプレートを生成したら、開発者は pull request を発行元リポジトリに送信します。API 発行元は、pull request を検証し、変更が安全かつ準拠していることを確認できます。検証の大半は、CI/CD パイプラインの一部として自動化できます。変更が許可され、正常にマージされると、API 発行元はその変更を運用インスタンスにデプロイします。このデプロイ処理も、Azure Pipelines を使用して簡単に自動化できます。

このアプローチを使えば、API の変更を API Management インスタンスにデプロイする処理を自動化でき、1 つの環境から別の環境に簡単に変更をレベル上げできます。異なる API 開発チームは異なる API テンプレート セット上で作業を行うことになるため、チーム間の干渉の可能性も減らすことができます。

次のステップ

ガイダンス、サンプル、ツールは、GitHub リポジトリで見つけることができます。ぜひお試しになり、フィードバックや質問をお寄せください。

Microsoft はお客様が導入しているエンジニアリング文化や既存の自動化ソリューションが広範に及ぶことを理解しています。本記事で提供されたアプローチやツールは、万能のソリューションではありません。そのため、ユーザーがソリューションを拡張してカスタマイズできるよう、GitHub にすべてを公開し、オープンソース化しています。