カスタム プロンプトをワークフローに追加する

既定では、 azd up 環境の名前、サブスクリプション、場所の 3 つを確認するメッセージが表示されます。 ただし、実際のプロジェクトでは、多くの場合、環境の種類、プロジェクト所有者、チーム名などの追加の入力が必要です。 この記事では、最も単純なものから柔軟性の高いものまで、カスタム プロンプトを追加するための 3 つの方法について説明します。 同じテンプレート内の 3 つのアプローチをすべて組み合わせることができます。

オプション 1: @allowed デコレーターを使用した選択リスト

カスタム プロンプトを追加する最も簡単な方法は、Bicep パラメーターで @allowed デコレーターを使用することです。 azd @allowed値を持つパラメーターが検出され、値が指定されていない場合は、組み込みのサブスクリプションと場所の選択ウィンドウと同様に、対話型の選択リストが表示されます。

修飾されたパラメーターを infra/main.bicep ファイルに追加します。

@description('The environment type')
@allowed([
  'dev'
  'staging'
  'prod'
])
param environmentType string

azd upを実行すると、azdこのパラメーターの選択リストが自動的に表示されます。 ユーザーは、サブスクリプション ピッカーと同様に、方向キーと種類を使用して移動してフィルター処理できます。

追加の構成は必要ありません。 パラメーターを Bicep ファイルに追加し、azd が残りの部分を処理します。

ヒント

既定の選択を強調表示するには、@metadataで azd.default デコレーターを使用します。

@allowed(['dev', 'staging', 'prod'])
@metadata({
  azd: {
    default: 'dev'
  }
})
param environmentType string

その他のデコレーター オプションについては、「Work with Azure Developer CLI metadata for Bicep input parameters」を参照してください。

オプション 2: フリー テキスト入力

固定リストの代わりにオープンエンド入力が必要な場合は、既定値のないパラメーターを宣言します。 azd main.parameters.jsonに既定値と値がない必須パラメーターが検出されると、ユーザーに自由テキスト入力を求められます。

infra/main.bicep ファイルにパラメーターを追加します。

@description('Who owns this project')
param projectOwner string

azd upを実行すると、ユーザーは値を入力し、Enter キーを押します。

オプション 3: カスタム ロジックのフック

Bicepデコレーターはほとんどのシナリオに対応しますが、API からの動的リストや条件付きプロンプト、検証、カスタムメニュー形式のUIなど、さらに柔軟な対応が必要な場合もあります。 このような場合は、 preprovision フックを使用して、 azd provisionする前にカスタム スクリプトを実行します。

フローを理解する

フックアプローチは、次のチェーンを通じて機能します。

  1. フック スクリプトが実行され、カスタム メニュー、検証、またはその他のロジックを使用してユーザーにメッセージが表示されます。
  2. スクリプトは、 azd env set VARIABLE_NAME valueを使用して値を格納します。
  3. 値は .azure/<env>/.envに保持されます。
  4. main.parameters.json は値を ${VARIABLE_NAME}として参照します。
  5. Bicepは、プロビジョニング中に通常のパラメーターとして受け取ります。

フック スクリプトを作成する

ユーザーにプロンプトを表示し、結果を格納するフック スクリプトを作成します。 次の例には、値が既に設定されている場合に再実行時にプロンプトをスキップする冪等性ガードと、無効な入力を処理するdefault ケースが含まれています。

hooks/preprovision.ps1 ファイルを作成します。

Write-Host "========================================"
Write-Host "  Custom Pre-Provision Configuration"
Write-Host "========================================"

# Skip prompt if value is already set
$existingTeam = $null
$output = azd env get-value CUSTOM_TEAM_NAME 2>&1
if ($LASTEXITCODE -eq 0 -and $output) {
    $existingTeam = $output.Trim()
}

if ($existingTeam) {
    Write-Host "Team name is already set to: $existingTeam"
    exit 0
}

Write-Host "Available teams:"
Write-Host "  1) platform-engineering"
Write-Host "  2) app-development"
Write-Host "  3) data-science"
Write-Host "  4) devops"
Write-Host "  5) Enter custom value"

$choice = Read-Host "Select a team (1-5)"
$teamName = switch ($choice) {
    "1" { "platform-engineering" }
    "2" { "app-development" }
    "3" { "data-science" }
    "4" { "devops" }
    "5" { Read-Host "Enter custom team name" }
    default {
        Write-Error "Invalid selection: $choice"
        exit 1
    }
}

# Store in azd environment
azd env set CUSTOM_TEAM_NAME $teamName
Write-Host "Team name set to: $teamName"

変数を Bicep パラメーターにマップする

main.parameters.json ファイルで、環境変数を参照します。

{
  "parameters": {
    "customTeamName": {
      "value": "${CUSTOM_TEAM_NAME}"
    }
  }
}

main.bicep ファイルで、パラメーターを既定値で宣言して、azdがパラメーターの入力を求めないようにします。

@description('Team name - set by preprovision hook')
param customTeamName string = ''

フックを有効にする

フック構成を azure.yamlに追加します。

hooks:
  preprovision:
    windows:
      shell: pwsh
      run: hooks/preprovision.ps1
      interactive: true
    posix:
      shell: sh
      run: hooks/preprovision.sh
      interactive: true

interactive: true設定は、スクリプトをコンソールにバインドして、ユーザー入力を読み取ることができるようにします。 フックの構成の詳細については、「コマンドとイベント フックを使用してAzure Developer CLI ワークフローをカスタマイズするを参照してください。

適切なアプローチを選択する

シナリオ 方法
固定値の一覧から選択します。 @allowed デコレーター (オプション 1)
フリー テキスト入力を収集します。 既定値のないパラメーター (オプション 2)
動的リスト、API 呼び出し、または条件付きロジック。 フック スクリプト (オプション 3)
CI/CD 内のすべてのプロンプトをスキップします。 事前設定された値 (次のセクションを参照)

CI/CD でプロンプトをスキップする

3 つのオプションはすべて非対話型モードをサポートしています。 azdを実行する前に値を事前に設定し、--no-prompt渡します。

# Set hook values
azd env set CUSTOM_TEAM_NAME "platform-engineering"

# Set Bicep parameter values
azd env config set infra.parameters.environmentType "prod"
azd env config set infra.parameters.projectOwner "ci-bot"

# Run with no prompts
azd up --subscription <subscription-id> --location eastus --no-prompt

必要な値がない場合、 azd は不足しているパラメーターを正確に報告し、修正に必要な azd env config set コマンドを表示します。