명령 및 이벤트 후크를 사용하여 Azure 개발자 CLI 워크플로 사용자 지정

Azure 개발자 CLI는 워크플로 및 배포를 사용자 지정하기 위한 다양한 확장 지점을 지원합니다. 후크 미들웨어를 사용하면 명령 및 azd 서비스 수명 주기 이벤트 전후에 사용자 지정 스크립트를 실행할 수 있습니다. 후크는 일치하는 azd 명령 또는 서비스 이벤트 이름에 접두사 및 사후 접두사를 사용하여 명명 규칙을 따릅니다.

예를 들어 다음 시나리오에서 사용자 지정 스크립트를 실행할 수 있습니다.

  • prerestore 후크를 사용하여 종속성 관리를 사용자 지정합니다.
  • 앱을 배포하기 전에 사전 배포 후크를 사용하여 외부 종속성 또는 사용자 지정 구성이 있는지 확인합니다.
  • 워크플로 또는 파이프라인의 끝에 있는 사후 후크를 사용하여 사용자 지정 클린업 또는 로깅을 수행합니다.

사용 가능한 후크

다음 azd 명령 후크를 사용할 수 있습니다.

  • prerestorepostrestore: 패키지 종속성이 복원되기 전과 후에 실행합니다.
  • preprovisionpostprovision: Azure 리소스를 만들기 전과 후에 실행합니다.
  • predeploypostdeploy: 애플리케이션 코드가 Azure에 배포되기 전과 후에 실행합니다.
  • preuppostup: 결합된 배포 파이프라인 전후에 실행합니다. Up는 순차적으로 실행되는 restoreprovisiondeploy 약식 명령입니다.
  • predownpostdown: 리소스가 제거되기 전과 후에 실행합니다.

다음 서비스 수명 주기 이벤트 후크를 사용할 수 있습니다.

  • prerestorepostrestore: 서비스 패키지 및 종속성이 복원되기 전과 후에 실행합니다.
  • prepackagepostpackage: 배포를 위해 앱을 패키지하기 전과 후에 실행합니다.
  • predeploypostdeploy: 서비스 코드가 Azure에 배포되기 전과 후에 실행합니다.

후크 구성

후크는 루트 또는 특정 서비스 구성 내에서 파일에 등록 azure.yaml 할 수 있습니다. 모든 유형의 후크는 다음 구성 옵션을 지원합니다.

  • shell: sh | pwsh (지정하지 않으면 실행에서 자동으로 유추됨).
    • 참고: PowerShell 7은 pwsh.
  • run: 인라인 스크립트 또는 파일 경로를 정의합니다.
  • continueOnError: 명령 후크 중에 스크립트 오류가 발생한 후에도 집합이 계속 실행됩니다(기본값 false).
  • interactive: 설정 시 실행 중인 스크립트를 콘솔 stdinstdout 바인딩합니다. & stderr (기본값 false).
  • windows: 중첩된 구성이 Windows OS에만 적용되도록 지정합니다. 이 구성 옵션을 제외하면 후크가 모든 플랫폼에서 실행됩니다.
  • posix: 중첩된 구성이 POSIX 기반 OS(Linux 및 MaxOS)에만 적용되도록 지정합니다. 이 구성 옵션을 제외하면 후크가 모든 플랫폼에서 실행됩니다.

후크 예제

다음 예제에서는 다양한 유형의 후크 등록 및 구성을 보여 줍니다.

루트 명령 등록

후크는 파일의 루트에서 특정 azd 명령에 대해 실행되도록 구성할 수 있습니다 azure.yaml .

프로젝트 디렉터리(파일이 있는 위치 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 .

서비스 디렉터리(파일의 서비스 구성 속성에 projectazure.yaml 정의된 것과 동일한 경로)는 서비스 후크의 기본값 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

후크로 환경 변수 사용

후크는 및 azd set <key> <value> 명령을 사용하여 파일에서 환경 변수를 .envazd env get-values 가져와서 설정할 수 있습니다. 후크는 구문을 사용하여 로컬 환경에서 환경 변수를 검색할 ${YOUR_ENVIRONMENT VARIABLE} 수도 있습니다. azd 명령을 실행할 때 파일의 .env 특정 환경 변수(예 AZURE_ENV_NAMEAZURE_LOCATION: )를 자동으로 설정합니다. 파일의 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 개발자 CLI에 대한 새 기능을 제안하는 방법에 대한 자세한 내용은 문제 해결 및 지원 페이지를 참조하세요.