次の方法で共有


GitHub Actions を使用して API Center に API を登録する

この記事では、API 仕様ファイルが GitHub リポジトリに追加されたときに、組織の API Center に API を登録するための基本的な GitHub Actions ワークフローを設定する方法について説明します。

GitHub Actions ワークフローを使用して API を API Center に登録すると、新しい API または更新された API ごとに一貫性のある反復可能な CI/CD プロセスが提供されます。 このワークフローを拡張して、API 登録にメタデータを追加するなどのステップを含めることができます。

次の図は、GitHub Actions ワークフローを使用して API Center への API 登録を自動化する方法を示しています。

GitHub Actions ワークフローをトリガーして、Azure API Center に API を登録するステップを示す図。

  1. API 定義ファイルを追加する pull request がマージされたときにトリガーされる GitHub Actions ワークフローをリポジトリに設定します。
  2. GitHub リポジトリのメイン ブランチからブランチを作成します。
  3. API 定義ファイルを追加し、変更をコミットして、新しいブランチにプッシュします。
  4. pull request を作成して新しいブランチをメイン ブランチにマージします。
  5. pull request をマージします。
  6. マージによって、API Center に API を登録する GitHub Actions ワークフローがトリガーされます。

前提条件

  • Azure サブスクリプション内の API センター。 まだ作成していない場合は、「クイック スタート: API センターを作成する」を参照してください。

  • Microsoft Entra ID テナントにサービス プリンシパルを作成するためのアクセス許可

  • シークレットと GitHub Actions ワークフローを構成できる GitHub アカウントと GitHub リポジトリ

  • Azure CLI の場合

    • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

    • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

      • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

      • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

      • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

    Note

    az apic コマンドには、apic-extensionAzure CLI 拡張機能が必要です。 az apic コマンドを使用していない場合は、最初の az apic コマンドの実行時に拡張機能を動的にインストールするか、拡張機能を手動でインストールできます。 Azure CLI 拡張機能の詳細については、こちらを参照してください。

    apic-extension の最新の変更と更新については、リリース ノートを参照してください。

    Note

    この記事の Azure CLI コマンドの例は、PowerShell または bash シェルで実行できます。 変数の構文が異なるために必要な場合は、2 つのシェルで個別のコマンド例が提供されています。

GitHub Actions ワークフローを設定する

このセクションでは、このシナリオ用に GitHub Actions ワークフローを設定します。

  • ワークフローで Azure 資格情報に使用するサービス プリンシパルを作成します。
  • 資格情報をシークレットとして GitHub リポジトリに追加します。
  • API 定義ファイルを追加する pull request がマージされたときにトリガーされる GitHub Actions ワークフローを構成します。 ワークフロー YAML ファイルには、Azure CLI を使用して定義ファイルから API Center に API を登録するステップが含まれています。

サービス プリンシパル シークレットを設定する

次のステップでは、Microsoft Entra ID サービス プリンシパルを作成します。これは、Azure で認証するためのワークフローに資格情報を追加するために使用されます。

Note

サービス プリンシパルの構成は、デモの目的で示されています。 Azure で GitHub Actions を認証するための推奨方法は、有効期間の短いトークンを使用する認証方法である OpenID Connect を使用することです。 GitHub Actions を使用して OpenID Connect を設定する場合、より複雑な作業になりますが、セキュリティが強化されます。 詳細情報

az ad sp create-for-rbac コマンドを使用して、サービス プリンシパルを作成します。 次の例では、最初に az apic show コマンドを使用して、API Center のリソース ID を取得します。 その後、API Center の投稿者ロールを使用してサービス プリンシパルが作成されます。

#! /bin/bash
apiCenter=<api-center-name>
resourceGroup=<resource-group-name>
spName=<service-principal-name>

apicResourceId=$(az apic show --name $apiCenter --resource-group $resourceGroup --query "id" --output tsv)

az ad sp create-for-rbac --name $spName --role Contributor --scopes $apicResourceId --json-auth

次のような JSON 出力をコピーします。

{
  "clientId": "<GUID>",
  "clientSecret": "<GUID>",
  "subscriptionId": "<GUID>",
  "tenantId": "<GUID>",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  [...other endpoints...]
}

サービス プリンシパルを GitHub シークレットとして追加します

  1. GitHub でリポジトリを参照します。 設定を選択します。

  2. [セキュリティ] で、[シークレットと変数]>[アクション] を選択します

  3. [New repository secret](新しいリポジトリ シークレット) を選択します。

  4. Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS という名前を付けます。 [Add secret](シークレットの追加) を選択します。

    シークレットが [リポジトリ シークレット] の下に一覧表示されます。

    GitHub リポジトリの Actions のシークレットのスクリーンショット。

後で GitHub ワークフロー ファイルを構成するときに、Azure/login アクションの入力 creds にシークレットを使用します。 次に例を示します。

- uses: azure/login@v1
  with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}

GitHub リポジトリにワークフロー ファイルを追加する

GitHub Actions ワークフローは、YAML (.yml) 定義ファイルによって表されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。 詳細情報

以下は、この例に使用または変更できる基本的なワークフロー ファイルです。

次の点に注意してください。

  • APIs パスに JSON 定義を追加する pull request がメイン ブランチで閉じられると、ワークフローがトリガーされます。
  • 定義の場所は、既定の GitHub トークンで認証される GitHub スクリプトを使用して pull request から抽出されます。
  • リポジトリに保存されている Azure 資格情報は、Azure へのサインインに使用されます。
  • az apic register コマンドは、環境変数で指定された API Center に API を登録します。

ワークフロー ファイルを構成するには:

  1. ファイルをコピーして、register-api.yml などの名前で保存します。
  2. Azure の API Center と一致するように環境変数の値を更新します。
  3. API 定義ファイルを追加するリポジトリ フォルダー (APIs) の名前を確認または更新します。
  4. このワークフロー ファイルを GitHub リポジトリの /.github/workflows/ パスに追加します。

ヒント

Azure API Center の Visual Studio Code 拡張機能を使用すると、拡張機能コマンドを実行して開始ワークフロー ファイルを生成できます。 コマンド パレットで、[Azure API Center: API の登録] を選択します。 [CI/CD]>[GitHub] を選択します。 その後、実際のシナリオに合わせてファイルを変更できます。

name: Register API Definition to Azure API Center
on:
  pull_request:
    types: [closed]
    branches:
      - main
    paths:
      - "APIs/**/*.json"
permissions:
  contents: read
  pull-requests: read
env:
  # set this to your Azure API Center resource group name
  RESOURCE_GROUP: <YOUR_RESOURCE_GROUP>
  # set this to your Azure API Center service name
  SERVICE_NAME: <YOUR_API_CENTER>
jobs:
  register:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v2
    
      - name: Get specification file path in the PR
        id: get-file-location
        uses: actions/github-script@v5
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const pull_number = context.payload.pull_request.number;
            const owner = context.repo.owner;
            const repo = context.repo.repo;
            const files = await github.rest.pulls.listFiles({
              owner,
              repo,
              pull_number
            });
            if (files.data.length === 1) {
              const filename = files.data[0].filename;
              core.exportVariable('API_FILE_LOCATION', hfilename);
              console.log(`API_FILE_LOCATION: ${{ env.API_FILE_LOCATION }}`);
            }
            else {
              console.log('The PR does not add exactly one specification file.');
            }
      - name: Azure login
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
          
      - name: Register to API Center
        uses: azure/CLI@v2
        with:
          azcliversion: latest
          inlineScript: |
            az apic api register -g ${{ env.RESOURCE_GROUP }} -n ${{ env.SERVICE_NAME }} --api-location ${{ env.API_FILE_LOCATION }}

リポジトリに API 定義ファイルを追加する

リポジトリに API 定義ファイルを追加して、ワークフローをテストします。 次の大まかなステップに従います。これは開発ワークフローの一般的なステップです。 GitHub ブランチの操作の詳細については、GitHub のドキュメントを参照してください。

  1. リポジトリのメイン ブランチから新しい作業ブランチを作成します。

  2. APIs パスのリポジトリに API 定義ファイルを追加します。 たとえば、APIs/catfacts-api/07-15-2024.json のようにします。

  3. 変更をコミットし、作業ブランチにそれらをプッシュします。

  4. pull request を作成して作業ブランチをメイン ブランチにマージします。

  5. 確認後、pull request をマージします。 マージによって、API Center に API を登録する GitHub Actions ワークフローがトリガーされます。

    GitHub でのワークフローの実行が成功したことを示すスクリーンショット。

API 登録を確認する

API が API Center に登録されていることを確認します。

  1. Azure portal で、API センターに移動します。
  2. 左側のメニューにある [資産] で、[API] を選択します。
  3. 新しく登録された API が API の一覧に表示されることを確認します。

ワークフロー後に API Center に登録された API のスクリーンショット。

新しい API バージョンを追加する

API Center の既存の API に新しいバージョンを追加するには、少し変更を加えて、前のステップに従います。

  1. リポジトリ内の同じ作業ブランチに変更するか、新しい作業ブランチを作成します。
  2. 既存の API のフォルダー内の APIs パスのリポジトリに、新しい API 定義ファイルを追加します。 たとえば、以前に Cat Facts API 定義を追加した場合は、APIs/catfacts-api/07-22-2024.json などの新しいバージョンを追加します。
  3. 変更をコミットし、作業ブランチにそれらをプッシュします。
  4. pull request を作成して作業ブランチをメイン ブランチにマージします。
  5. 確認後、pull request をマージします。 マージにより、新しい API バージョンを API Center に登録する GitHub Actions ワークフローがトリガーされます。
  6. Azure portal で API Center に移動し、新しいバージョンが登録されていることを確認します。

シナリオを拡張する

GitHub Actions ワークフローを拡張して、API 登録のメタデータの追加など、他のステップを含めることができます。 次に例を示します。

  1. API Center でメタデータ スキーマを使用して、API 登録にメタデータ値を適用するメタデータ JSON ファイルを作成します。

    たとえば、メタデータ スキーマに approverteamcost center などのプロパティが含まれている場合、メタデータ JSON ファイルは次のようになります。

    {
      "approver": "diego@contoso.com",
      "team": "Store API dev team",
      "costCenter": "12345"  
    }
    
  2. リポジトリ内の各 API のフォルダーにメタデータ JSON ファイルをアップロードします。

  3. az apic api update コマンドを使用して、メタデータを API 登録に適用するワークフロー ステップを追加します。 次の例では、API ID とメタデータ ファイルが環境変数で渡されます。環境変数は、ワークフロー ファイル内の別の場所で設定されます。

    [...]
    - name: Apply metadata to API in API Center
        uses: azure/CLI@v2
        with:
          azcliversion: latest
          inlineScript: |
            az apic api update -g ${{ env.RESOURCE_GROUP }} -n ${{ env.SERVICE_NAME }} --api-id {{ env.API_ID }} --custom-properties {{ env.METADATA_FILE }}