GitHub Actions ワークフローを使用して、Azure Functionsでコードを自動的にビルドして関数アプリにデプロイするワークフローを定義できます。
ワークフロー構成を定義する YAML ファイル (.yml) は、リポジトリの パスに保持されます。 この定義には、関数の開発言語に固有であるワークフローを構成するアクションとパラメーターが含まれます。 Functions のGitHub Actions ワークフローは、言語に関係なく、次のタスクを実行します。
- 環境を設定します。
- コード プロジェクトをビルドします。
- Azureで関数アプリにパッケージをデプロイします。
Azure Functions アクションは、Azure内の既存の関数アプリへのデプロイを処理します。
デプロイ用のワークフロー構成ファイルを手動で作成できます。 次のいずれかの方法で、一連の言語固有のテンプレートからファイルを生成することもできます。
- Azure ポータルで
- Azure CLIの使用
- GitHub リポジトリから
YAML ファイルを手動で作成しない場合は、記事の上部にある別の方法を選択してください。
前提条件
アクティブなサブスクリプションを持つAzure アカウント。 無料でアカウントを作成できます。
GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
GitHub リポジトリ内のソース コードを使用してAzureでホストされる動作する関数アプリ。
- Azure CLI(ローカルで開発する場合)。 Azure Cloud ShellでAzure CLIを使用することもできます。
デプロイ資格情報を生成する
GitHub Actionsはデプロイ時に発行プロファイルを使用して関数アプリにアクセスするため、最初に発行プロファイルを取得し、GitHub シークレットとして安全に格納する必要があります。
重要
発行プロファイルは、Azure リソースへのアクセスを許可する貴重な資格情報です。 常に安全に移動および保管するようにしてください。 GitHubでは、発行プロファイルはGitHubシークレットにのみ格納する必要があります。
発行プロファイルのダウンロード
関数アプリの発行プロファイルをダウンロードするには、次を操作を行います。
Azure ポータルで、関数アプリのページを見つけ、左側の列で Settings>Configuration を展開します。
[構成] ページで、[全般設定] タブを選択し、[SCM 基本認証の発行資格情報] が [オン] になっていることを確認します。 この設定が [オフ] の場合、発行プロファイルを使用できないため、[ オン] を選択してから [適用] を選択します。
関数アプリの [概要] ページに戻ってから、[発行プロファイルの取得] を選択します。
[発行プロファイルのダウンロード]
ファイルの内容を保存してコピーします。
GitHub シークレットを追加する
GitHubで、リポジトリに移動します。
[設定]に移動します。
[シークレットと変数] [アクション] を選択します。
[New repository secret]\(新しいリポジトリ シークレット\) を選択します。
発行プロファイル ファイルの内容に名前 と値が設定された新しいシークレットを追加します。
[Add secret]\(シークレットの追加\) を選択します。
GitHubは、Azureで関数アプリに対して認証できるようになりました。
テンプレートからワークフローを作成する
ワークフロー構成を手動で作成する最善の方法は、公式にサポートされているテンプレートから開始することです。
Windows または Linux を選択して、適切なオペレーティング システム用のテンプレートを確実に取得します。
- Windows
- Linux
Windowsへのデプロイでは、
runs-on: windows-latestを使用します。次のリンクを使用して、Azure Functions アクション リポジトリから言語固有のテンプレートをコピーします。
env.AZURE_FUNCTIONAPP_NAMEパラメーターを、Azureの関数アプリ リソースの名前で更新します。 必要に応じて、C# の など、アプリで使用される言語バージョンを設定するパラメーターを更新することが必要な場合があります。この新しい YAML ファイルをリポジトリの パスに追加します。
ポータルでワークフロー構成を作成する
ポータルを使用してGitHub Actionsを有効にすると、Functions はアプリケーション スタックに基づいてワークフロー ファイルを作成し、正しいディレクトリ内のGitHub リポジトリにコミットします。
ポータルによって発行プロファイルが自動的に取得され、リポジトリのGitHub シークレットに追加されます。
関数アプリの作成時
Azure ポータルで関数を作成する場合は、[デプロイ] タブを使用してGitHub Actionsをすばやく開始できます。 新しい関数アプリを作成するときにGitHub Actionsワークフローを追加するには:
Azure portal で、Create Function App フローで を選択します。Deployment [関数] メニューの [デプロイ] オプションのスクリーンショット。
Continuous Deployment を有効にします。各コードの更新でAzureポータルへのコード プッシュをトリガーする場合は、
GitHub組織、リポジトリ、ブランチを入力します。
関数アプリの構成を完了します。 GitHub リポジトリに、
/.github/workflows/に新しいワークフロー ファイルが含まれるようになりました。
既存の関数アプリの場合
既存の関数アプリにGitHub Actions ワークフローを追加するには:
Azure ポータルで関数アプリに移動し、Deployment Center を選択します。
Source GitHub を選択します。 既定のメッセージBuilding with GitHub Actions が表示されない場合は、Change provider GitHub Actions を選択し、OK を選択します。GitHubアクセスをまだ承認していない場合は、Authorize を選択>。 GitHub資格情報を入力し、Sign in を選択します。 別のGitHub アカウントを承認するには、Change Account を選択し、別のアカウントでサインインします。
GitHub Organization、Repository、および Branch を選択します。 GitHub Actionsを使用してデプロイするには、このリポジトリへの書き込みアクセス権が必要です。
認証設定で、ユーザー割り当ての IDまたは基本認証資格情報を使用して GitHub Actions を認証するかどうかを選択します。 基本認証の場合は、現在の資格情報が使われます。
Preview ファイル を選択して、
github/workflows/のGitHub リポジトリに追加されるワークフロー ファイルを表示します。[保存] を選択して、ワークフロー ファイルをリポジトリに追加します。
ワークフロー構成をリポジトリに追加する
コマンドを使用して、関数アプリ用の適切なテンプレートからワークフロー構成ファイルを生成できます。 新しい YAML ファイルは、指定したGitHub リポジトリ内の適切な場所 (/.github/workflows/) に格納され、アプリの発行プロファイル ファイルは同じリポジトリ内のGitHubシークレットに追加されます。
この コマンドを実行し、値 、、 を置き換えます。
az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-githubこのコマンドでは、対話型メソッドを使用して、GitHub アカウントの個人用アクセス トークンを取得します。
ターミナル ウィンドウに、次のようなメッセージが表示されます。
Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.一意の コードをコピーし、 にアクセスして、コピーしたコードを入力します。 コードを入力すると、次のようなメッセージが表示されます。
Verified GitHub repo and branch Getting workflow template using runtime: java Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: . Adding publish profile to GitHub Fetching publish profile with secrets for the app 'func-app-123' Creating new workflow file: .github/workflows/master_func-app-123.ymlGitHub リポジトリに移動し、Actions を選択します。 ワークフローが実行されたことを確認します。
ワークフロー構成ファイルを作成する
GitHub リポジトリから直接、Azure Functions テンプレートからGitHub Actionsワークフロー構成ファイルを作成できます。
GitHubで、リポジトリに移動します。
[Actions] および [New workflow] を選択します。
"functions" を検索します。
Microsoft Azureによって作成された表示関数アプリ ワークフローで、コード言語に一致するものを見つけて、Configure を選択します。
新しく作成した YAML ファイルで、
env.AZURE_FUNCTIONAPP_NAMEパラメーターを、Azureの関数アプリ リソースの名前で更新します。 必要に応じて、C# の など、アプリで使用される言語バージョンを設定するパラメーターを更新することが必要な場合があります。新しいワークフロー ファイルが に保存されていることを確認し、[Commit changes...] を選択します。
ワークフロー構成を更新する
何らかの理由で既存のワークフロー構成を更新または変更する必要がある場合は、リポジトリ内の の場所に移動し、特定の YAML ファイルを開き、必要な変更を加えてから、リポジトリに更新をコミットします。
例: ワークフロー構成ファイル
次のテンプレートの例では、認証に のバージョン 1 と を使用しています。 テンプレートは、選択した言語と、関数アプリをデプロイするオペレーティング システムによって異なります。
- Windows
- Linux
関数アプリを Linux で実行する場合は、[Linux] を選択します。
name: Deploy DotNet project to Azure Function App
on:
[push]
env:
AZURE_FUNCTIONAPP_NAME: 'your-app-name' # set this to your function app name on Azure
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your function app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')
jobs:
build-and-deploy:
runs-on: windows-latest
environment: dev
steps:
- name: 'Checkout GitHub Action'
uses: actions/checkout@v3
- name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: 'Resolve Project Dependencies Using Dotnet'
shell: pwsh
run: |
pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
dotnet build --configuration Release --output ./output
popd
- name: 'Run Azure Functions Action'
uses: Azure/functions-action@v1
id: fa
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
Azure Functions アクション
Azure Functions アクション (Azure/functions-action) は、コードをAzureの既存の関数アプリまたはアプリ内の特定のスロットに発行する方法を定義します。
パラメーター
すべての関数アプリのプランには、次のパラメーターが必要です。
| パラメーター | 説明 |
|---|---|
| app-name | 関数アプリの名前。 |
| package | これは、発行先のプロジェクト内の場所です。 既定では、この値は . に設定されます。つまり、GitHub リポジトリ内のすべてのファイルとフォルダーがデプロイされます。 |
Flex 従量課金プランには、次のパラメーターが必要です。
| パラメーター | 説明 |
|---|---|
| sku | publish-profile を使用して認証する場合は、これを に設定します。 RBAC 資格情報を使用するか、Flex 従量課金以外のプランにデプロイする場合、アクションで値を解決できるため、パラメーターを含める必要はありません。 |
| remote-build | パッケージが Flex 従量課金アプリにデプロイされたときに Kudu からのビルド アクションを有効にするには、これを に設定します。 Oryx ビルドは、Flex Consumption のリモート ビルド中に常に実行されます。 scm-do-build-during-deployment または enable-oryx-build は設定しないでください。 既定では、このパラメーターは に設定されます。 |
次のパラメーターは、従量課金プラン、Elastic Premium プラン、App Service (専用) プランに固有です。
| パラメーター | 説明 |
|---|---|
| SCM_DO_BUILD_DURING_DEPLOYMENT | (省略可能)Kudu サイト (たとえば、 ) が リモート ビルドなどの展開前操作を実行できるようにします。 既定では、これは に設定されています。 GitHub ワークフローの依存関係を解決するのではなく、Kudu を使用してデプロイ動作を制御する場合は、これを true に設定します。 詳細については、 の設定を参照してください。 |
| ENABLE_ORYX_BUILD | (省略可能) Kudu サイトで、Oryx を使用してプロジェクトの依存関係を解決できるようにします。 既定では、これは に設定されています。
Oryx を使用して、GitHub ワークフローではなく依存関係を解決する場合は、 scm-do-build-during-deployment と enable-oryx-build の両方を true に設定します。 |
すべての関数アプリ プランの省略可能なパラメーター:
| パラメーター | 説明 |
|---|---|
| slot-name | これは、デプロイ先のデプロイ スロットの名前です。 既定では、この値は空です。つまり、GitHub アクションは運用サイトに展開されます。 この設定が非運用スロットを指している場合は、 発行プロファイル パラメーターに、運用サイトではなくスロットの資格情報が含まれていることを確認します。 現在、Flex 従量課金ではサポートされていません。 |
| publish-profile | 発行プロファイルを含むGitHub シークレットの名前。 |
| respect-pom-xml | Java関数にのみ使用されます。 アプリのデプロイ成果物を pom.xml ファイルから派生させる必要があるかどうかを指定します。 Java関数アプリをデプロイするときは、このパラメーターを true に設定し、package を . に設定する必要があります。 既定では、このパラメーターは に設定されており、 パラメーターはアプリの成果物の場所 ( など) を指す必要があることを意味します。 |
| respect-funcignore | GitHub Actionsが .funcignore ファイルを受け入れ、その中で定義されているファイルとフォルダーを除外するかどうかを指定します。 リポジトリに .funcignore ファイルがあり、テキスト エディターの構成、.vscode/、Python仮想環境 (.venv/) などのパスとファイルを除外する場合は、この値を true に設定します。 既定の設定は です。 |
考慮事項
Azure Functionsアクションを使用する場合は、次の点に注意してください。
GitHub Actionsを使用する場合、次の表に示すように、コードのデプロイ方法はホスティング プランによって異なります。
ホスティング プラン デプロイ方法 Flex Consumption OneDeploy Elastic Premium Zip デプロイでアプリを 従量課金プランに配置する 専用 (App Service) プラン Zip デプロイでアプリを 従量課金プランに配置する 消費 Windows: Zip deploy
Linux: 外部パッケージの URL* 従量課金プランで Linux 上でアプリを実行する機能は、廃止される予定です。 詳細については、「Azure Functions 従量課金プランのホスティング」を参照してください。
GitHubがデプロイのためにAzureに接続するために必要な資格情報は、シークレットとしてGitHub リポジトリに格納され、
secrets.<SECRET_NAME>としてデプロイにアクセスされます。GitHub Actionsがデプロイ用のAzure Functionsで認証を行う最も簡単な方法は、発行プロファイルを使用することです。 サービス プリンシパルを使用して認証することもできます。 詳細については、このGitHub Actionsリポジトリを参照してください。
環境を設定してビルドを実行するためのアクションは、テンプレートから生成され、言語固有です。
テンプレートでは 要素を使用して、ビルドとデプロイに固有の設定を定義します。