Azure Developer CLI では、ワークフローとデプロイをカスタマイズするためのさまざまな拡張ポイントがサポートされています。 フック ミドルウェアを使用すると、azd
コマンドとサービス ライフサイクル イベントの前後にカスタム スクリプトを実行できます。 フックは、事前 を使用して名前付け規則に従い、一致する azd
コマンドまたはサービス イベント名のポスト プレフィックスを します。
たとえば、次のシナリオでカスタム スクリプトを実行できます。
- 依存関係管理をカスタマイズするには、プレリストア フックを使用します。
- 事前デプロイ フックを使用して、アプリをデプロイする前に外部の依存関係またはカスタム構成が配置されていることを確認します。
- カスタムクリーンアップまたはログ記録を実行するには、ワークフローまたはパイプラインの末尾にある ポストアップ フックを使用します。
使用可能なフック
次の azd
コマンド フックを使用できます。
-
prerestore
とpostrestore
: パッケージの依存関係が復元される前と後に実行されます。 -
preprovision
とpostprovision
: Azure リソースが作成される前後に実行されます。 -
predeploy
とpostdeploy
: アプリケーション コードが Azure にデプロイされる前と後に実行します。 -
preup
とpostup
: 結合されたデプロイ パイプラインの前後に実行します。Up
は、restore
、provision
、およびdeploy
を順番に実行する短縮コマンドです。 -
predown
とpostdown
: リソースが削除される前と後に実行されます。
次のサービス ライフサイクル イベント フックを使用できます。
-
prerestore
とpostrestore
: サービス パッケージと依存関係が復元される前と後に実行されます。 -
prebuild
とpostbuild
: サービスのソース コードまたはコンテナーがビルドされる前と後に実行されます。 -
prepackage
とpostpackage
: アプリがデプロイ用にパッケージ化される前と後に実行されます。 -
predeploy
とpostdeploy
: サービス コードが Azure にデプロイされる前と後に実行します。
フックの構成
フックは、ルートまたは特定のサービス構成内の azure.yaml
ファイルに登録できます。 すべての種類のフックでは、次の構成オプションがサポートされます。
-
shell
:sh
|pwsh
-
メモ:
pwsh
には PowerShell 7 が必要です。
-
メモ:
-
run
: インライン スクリプトまたはファイルへのパスを定義します。 -
continueOnError
: コマンド フック中にスクリプト エラーが発生した後も、設定が継続して実行されます (既定値は false)。 -
interactive
: 設定すると、実行中のスクリプトがコンソールstdin
にバインドされ、stdout
&stderr
されます (既定値は false)。 -
windows
: 入れ子になった構成が Windows OS にのみ適用されることを指定します。 この構成オプションが除外されている場合、フックはすべてのプラットフォームで実行されます。 -
posix
: 入れ子になった構成が POSIX ベースの OS (Linux & MaxOS) にのみ適用されることを指定します。 この構成オプションが除外されている場合、フックはすべてのプラットフォームで実行されます。
フックの例
次の例では、さまざまな種類のフックの登録と構成を示します。
ルート コマンドの登録
フックは、azure.yaml
ファイルのルートにある特定の azd
コマンドに対して実行するように構成できます。
プロジェクト ディレクトリ (azure.yaml
ファイルが配置されている場所) は、コマンド フックの既定の現在の作業ディレクトリ (cwd
) です。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
hooks:
prerestore: # Example of an inline script. (shell is required for inline scripts)
shell: sh
run: echo 'Hello'
preprovision: # Example of external script (Relative path from project root)
run: ./hooks/preprovision.sh
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
サービスの登録
フックは、.yaml
ファイルで定義されている特定のサービスに対してのみ実行するように構成することもできます。
サービス ディレクトリ (azure.yaml
ファイル内のサービス構成の project
プロパティで定義されているのと同じパス) は、サービス フックの既定の cwd
です。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
hooks:
prerestore: # Example of an inline script. (shell is required for inline scripts)
shell: sh
run: echo 'Restoring API service...'
prepackage: # Example of external script (Relative path from service path)
run: ./hooks/prepackage.sh
OS 固有のフック
必要に応じて、フックを Windows または Posix (Linux & MaxOS) で実行するように構成することもできます。 既定では、Windows または Posix の構成が除外されている場合、フックはすべてのプラットフォームで実行されます。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
hooks:
prerestore:
posix: # Only runs on Posix environments
shell: sh
run: echo 'Hello'
windows: # Only runs on Windows environments
shell: pwsh
run: Write-Host "Hello"
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
イベントごとに複数のフック
ルート登録レベルや特定のサービスなど、さまざまなスコープでイベントごとに複数のフックを構成できます。
name: example-project
services:
api:
project: src/api
host: containerapp
language: ts
hooks:
postprovision:
- shell: sh
run: scripts/postprovision1.sh
- shell: sh
run: scripts/postprovision2.sh
hooks:
postprovision:
- shell: sh
run: scripts/postprovision1.sh
- shell: sh
run: scripts/postprovision2.sh
フックで環境変数を使用する
フックは、azd env get-values
コマンドと azd set <key> <value>
コマンドを使用して、.env
ファイル内の環境変数を取得および設定できます。 フックは、${YOUR_ENVIRONMENT VARIABLE}
構文を使用してローカル環境から環境変数を取得することもできます。
azd
AZURE_ENV_NAME
や AZURE_LOCATION
など、コマンドの実行時に、.env
ファイル内の特定の環境変数が自動的に設定されます。
main.bicep
ファイルからの出力パラメーターも、.env
ファイルに設定されます。 環境変数の管理 ページには、環境変数ワークフローに関する詳細情報が含まれています。
フックは、次の例に示すように、環境変数をインラインで、または参照されるスクリプトを使用して取得および設定できます。
name: azure-search-openai-demo
metadata:
template: azure-search-openai-demo@0.0.2-beta
services:
backend:
project: ./app/backend
language: py
host: appservice
hooks:
postprovision:
windows: # Run referenced script that uses environment variables (script shown below)
shell: pwsh
run: ./scripts/prepdocs.ps1
interactive: true
continueOnError: false
posix:
shell: sh
run: ./scripts/prepdocs.sh
interactive: true
continueOnError: false
postdeploy: # Pull environment variable inline from local device and set in .env file
shell: sh
run: azd env set REACT_APP_WEB_BASE_URL ${SERVICE_WEB_ENDPOINT_URL}
参照先: prepdocs.sh
スクリプト:
echo "Loading azd .env file from current environment"
# Use the `get-values` azd command to retrieve environment variables from the `.env` file
while IFS='=' read -r key value; do
value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
export "$key=$value"
done <<EOF
$(azd env get-values)
EOF
echo 'Creating python virtual environment "scripts/.venv"'
python3 -m venv scripts/.venv
echo 'Installing dependencies from "requirements.txt" into virtual environment'
./scripts/.venv/bin/python -m pip install -r scripts/requirements.txt
echo 'Running "prepdocs.py"'
./scripts/.venv/bin/python ./scripts/prepdocs.py './data/*'
--storageaccount "$AZURE_STORAGE_ACCOUNT"
--container "$AZURE_STORAGE_CONTAINER"
--searchservice "$AZURE_SEARCH_SERVICE"
--openaiservice "$AZURE_OPENAI_SERVICE"
--openaideployment "$AZURE_OPENAI_EMB_DEPLOYMENT"
--index "$AZURE_SEARCH_INDEX"
--formrecognizerservice "$AZURE_FORMRECOGNIZER_SERVICE"
--tenantid "$AZURE_TENANT_ID" -v
ヘルプを要求する
バグの報告、ヘルプの要求、または Azure Developer CLI の新機能の提案方法については、のトラブルシューティングとサポートの に関するページを参照してください。