Azure 개발자 CLI FAQ

이 문서에서는 Azure 개발자 CLI에 대한 일반적인 질문에 답변합니다.

일반

Azure Developer CLI를 어떻게 할까요? 제거하시겠습니까?

원래 설치한 방법에 따라 다른 제거 옵션이 azd 있습니다. 자세한 내용은 설치 페이지를 방문하세요.

Azure 개발자 CLI와 Azure CLI의 차이점은 무엇인가요?

Azure 개발자 CLI (azd)와 Azure CLI (az)는 모두 명령줄 도구이지만 다른 작업을 수행하는 데 도움이 됩니다.

azd 는 상위 수준의 개발자 워크플로에 중점을 둡니다. Azure 리소스를 프로비전/관리하는 것 외에도 클라우드 구성 요소, azd 로컬 개발 구성 및 파이프라인 자동화를 완전한 솔루션으로 통합하는 데 도움이 됩니다.

Azure CLI는 가상 머신, 가상 네트워크 및 스토리지와 같은 Azure 인프라를 만들고 관리하기 위한 컨트롤 플레인 도구입니다. Azure CLI는 특정 관리 작업에 대한 세분화된 명령을 중심으로 설계되었습니다.

환경 이름이란?

Azure 개발자 CLI는 환경 이름을 사용하여 Azure 개발자 CLI 템플릿에서 사용하는 AZURE_ENV_NAME 환경 변수를 설정합니다. AZURE_ENV_NAME은 Azure 리소스 그룹 이름의 접두사로도 사용됩니다. 각 환경에는 고유한 구성 집합이 있으므로 Azure Developer CLI는 모든 구성 파일을 환경 디렉터리에 저장합니다.

├── .Azure                          [This directory displays after you run add init or azd up]
│   ├── <your environment1>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └── <your environment2>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └──config.json 

둘 이상의 환경을 설정할 수 있나요?

예. 다양한 환경(예: 개발, 테스트, 프로덕션)을 설정할 수 있습니다. azd env를 사용하여 이러한 환경을 관리할 수 있습니다.

환경 구성(.env) 파일은 어디에 저장되나요?

.env 파일 경로는 <your-project-directory-name>\.azure\<your-environment-name>\.env입니다.

.env 파일은 어떻게 사용되나요?

Azure Developer CLI azd 에서 명령은 환경 구성에 대한 .env 파일을 참조합니다. db 연결 문자열 및 Azure Key Vault 엔드포인트와 같은 azd deploy 명령도 .env 파일을 업데이트합니다.

Codespaces에서 'azd up'을 실행했습니다. 로컬 개발 환경에서 작업을 계속할 수 있나요?

예. 로컬에서 개발 작업을 계속할 수 있습니다.

  1. 로컬 컴퓨터에 템플릿 프로젝트를 복제하려면 실행 azd init -t <template repo> 합니다.
  2. Codespaces를 사용하여 만든 기존 env를 풀다운하려면 다음을 실행 azd env refresh합니다. 이전과 동일한 환경 이름, 구독 및 위치를 제공해야 합니다.

azure.yaml 파일은 어떻게 사용되나요?

azure.yaml 파일은 템플릿에 포함된 Azure 리소스의 앱 및 형식을 설명합니다.

'secretOrRandomPassword' 함수의 동작은 무엇인가요?

키 자격 증명 모음 이름 및 비밀에 대한 매개 변수가 제공되는 경우 함수는 secretOrRandomPassword Azure Key Vault에서 비밀을 검색합니다. 이러한 매개 변수가 제공되지 않거나 비밀을 검색할 수 없는 경우 함수는 대신 사용할 임의로 생성된 암호를 반환합니다.

다음 예제에서는 파일의 secretOrRandomPasswordmain.parameters.json 일반적인 사용 사례를 보여 줍니다. 및 sqlAdminPassword 변수는 ${AZURE_KEY_VAULT_NAME} Key Vault 및 비밀의 이름에 대한 매개 변수로 전달됩니다. 값을 검색할 수 없는 경우 임의 암호가 대신 생성됩니다.

  "sqlAdminPassword": {
    "value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
  } 

또한 향후 실행을 위해 Bicep을 사용하여 Key Vault에 출력 secretOrRandomPassword 을 저장해야 합니다. 배포에서 동일한 비밀을 검색하고 다시 사용하면 새 값을 반복적으로 생성할 때 표시할 수 있는 오류 또는 의도하지 않은 동작을 방지할 수 있습니다. Key Vault를 만들고 생성된 비밀을 저장하려면 아래 Bicep 코드를 사용합니다. Azure Developer CLI GitHub 리포지토리에서 이러한 모듈에 대한 전체 샘플 코드를 볼 수 있습니다.

module keyVault './core/security/keyvault.bicep' = {
  name: 'keyvault'
  scope: resourceGroup
  params: {
    name: '${take(prefix, 17)}-vault'
    location: location
    tags: tags
    principalId: principalId
  }
}

module keyVaultSecrets './core/security/keyvault-secret.bicep' = {
  name: 'keyvault-secret-sqlAdminPassword'
  scope: resourceGroup
  params: {
    keyVaultName: keyVault.outputs.name
    name: 'sqlAdminPassword'
    secretValue: sqlAdminPassword
  }
}]

이 Bicep 설정을 사용하면 다음 워크플로에서 비밀을 관리할 수 있습니다.

  1. 지정된 비밀이 있으면 함수를 사용하여 secretOrRandomPassword Key Vault에서 검색됩니다.
  2. 비밀이 없으면 Key Vault가 생성되고 임의로 생성된 비밀이 그 안에 저장됩니다.
  3. 이후 배포에서 이 메서드는 secretOrRandomPassword 저장된 비밀을 검색하여 Key Vault에 존재합니다. Key Vault가 이미 있는 경우 다시 만들어지지 않지만 다음 실행을 위해 동일한 비밀 값이 다시 저장됩니다.

Azure 무료 구독을 사용할 수 있나요?

예, 하지만 각 Azure 위치에는 하나의 배포만 있을 수 있습니다. 선택한 Azure 위치를 이미 사용한 경우 배포 오류가 표시됩니다.

InvalidTemplateDeployment: The template deployment '<env_name>' isn't valid according to the validation procedure. The tracking ID is '<tracking_id>'. See inner errors for details.

다른 Azure 위치를 선택하여 문제를 해결할 수 있습니다.

Azure 앱 Service에서 호스트되는 앱이 "기만 사이트 미리" 경고를 트리거하고 있습니다. 어떻게 수정할 수 있나요?

리소스 이름을 지정하는 방법 때문에 이러한 일이 발생할 수 있습니다.

'Azure Dev' 작성 템플릿을 사용하면 리소스의 이름을 구성할 수 있습니다. 이렇게 하려면 폴더에 항목을 main.parameters.jsoninfra 추가할 수 있습니다. 예시:

  "webServiceName": {
  "value": "my-unique-name"
}

이 항목은 다음에 애플리케이션을 프로비전할 때 "app-web-aj84u2adj"와 같은 임의 값 대신 "my-unique-name"이라는 새 리소스를 만듭니다. Azure Portal을 사용하여 이전 리소스 그룹을 수동으로 제거하거나 실행 azd down 하여 모든 이전 배포를 제거할 수 있습니다. 리소스를 제거한 후 실행 azd provision 하여 새 이름으로 다시 만듭니다.

이 이름은 전역적으로 고유해야 합니다. 그렇지 않으면 리소스를 만들려고 할 때 ARM 오류가 azd provision 발생합니다.

명령: azd provision

명령은 프로비전할 리소스를 어떻게 알 수 있나요?

이 명령은 Azure 리소스를 프로비전하기 위해 아래에 <your-project-directory-name>/infra 있는 Bicep 템플릿을 사용합니다.

Azure에서 프로비전되는 리소스는 어디에서 찾을 수 있나요?

이동한 https://portal.azure.com 다음 리소스 그룹(예: rg-<your-environment-name>/>)을 찾습니다.

Azure 오류에 대한 자세한 정보를 찾을 어떻게 할까요? 있나요?

아래에 <your-project-directory-name>/infra있는 Bicep 템플릿을 사용하여 Azure 리소스를 프로비전합니다. 문제가 있는 경우 CLI 출력에 오류 메시지를 포함합니다.

리소스 그룹(예rg-<your-environment-name>: )으로 이동 https://portal.azure.com 한 다음, 리소스 그룹을 찾을 수도 있습니다. 배포가 실패하는 경우 오류 링크를 선택하여 자세한 정보를 가져옵니다.

다른 리소스는 일반적인 Azure 배포 오류 문제 해결 - Azure Resource Manager를 참조하세요.

'azd provision'에 대한 로그 파일이 있나요?

곧 공개됩니다. 이 기능은 향후 릴리스를 위해 계획되어 있습니다.

명령: azd deploy

이 명령을 다시 실행할 수 있나요?

예.

azd는 내 코드를 배포할 Azure 리소스를 어떻게 찾나요?

배포 azd 하는 동안 환경 이름과 일치하는 값으로 azd-env-name 태그가 지정된 그룹을 찾아 애플리케이션을 구성하는 모든 리소스 그룹을 먼저 검색합니다. 그런 다음 이러한 각 리소스 그룹의 모든 리소스를 열거하여 서비스의 azure.yaml이름과 일치하는 값으로 azd-service-name 태그가 지정된 리소스를 찾습니다.

리소스에 태그를 사용하는 것이 좋으며, 이 속성을 azure.yaml 사용하여 resourceName 명시적 리소스 이름을 제공할 수도 있습니다. 이 경우 위의 논리는 실행되지 않습니다.

명령: azd up

'azd up'을 다시 실행할 수 있나요?

예. 증분 배포 모드를 사용합니다.

'azd up'에 대한 로그 파일을 찾을 어떻게 할까요? 있나요?

곧 공개됩니다. 이 기능은 향후 릴리스를 위해 계획되어 있습니다.

명령: azd 파이프라인

Azure 서비스 주체란?

Azure 서비스 주체는 Azure 리소스에 액세스하기 위해 앱, 호스트된 서비스 및 자동화된 도구에서 사용하기 위해 만든 ID입니다. 이 액세스는 서비스 주체에 할당된 역할에 의해 제한되며, 이를 통해 액세스할 수 있는 리소스와 어느 수준에서 액세스할 수 있는지 제어할 수 있습니다. Azure에서 GitHub로 인증하는 방법에 대한 자세한 내용은 커넥트 GitHub 및 Azure를 참조하세요. | Microsoft Docs.

'azd pipeline config'를 실행하기 전에 Azure 서비스 주체를 만들어야 하나요?

아니요. 이 azd pipeline config 명령은 Azure 서비스 주체를 만들고 GitHub 리포지토리에 비밀을 저장하는 데 필요한 단계를 수행합니다.

GitHub에 저장된 모든 비밀은 무엇인가요?

이 명령은 GitHub에 AZURE_CREDENTIALS, AZURE_ENV_NAME, AZURE_LOCATION 및 AZURE_SUBSCRIPTION_ID 네 가지 비밀을 저장합니다. 으로 이동하여 각 비밀의 값을 재정의할 수 있습니다 https://github.com/<your-GH-account>/<your-repo>/secrets/actions.

OpenID 커넥트(OIDC)란 무엇이며 지원됩니까?

OpenID Connect를 사용하면 워크플로가 Azure에서 직접 수명이 짧은 토큰을 교환할 수 있습니다.

OIDC는 GitHub Actions 및 Azure Pipeline(페더레이션됨으로 설정)의 기본값으로 지원되지만 Azure DevOps 또는 Terraform에서는 지원되지 않습니다.

  • Azure DevOps의 경우 명시적으로 호출 --auth-typefederated 하면 오류가 발생합니다.
  • Terraform의 경우:
    • 정의되지 않은 경우 --auth-type 다시 clientcredentials 대체되고 경고가 발생합니다.
    • 명시적으로 설정된 federated경우 --auth-type 오류가 발생합니다.

GitHub Actions에 저장된 Azure 서비스 주체를 다시 어떻게 할까요??

https://github.com/<your-GH-account>/<your-repo>settings/secrets/actions이동한 다음 새 서비스 주체에 대한 전체 JSON 개체를 복사하여 붙여넣어 업데이트 AZURE_CREDENTIALS 합니다. 예시:

{
  "clientId": "<GUID>",
  "clientSecret": "<GUID>",
  "subscriptionId": "<GUID>",
  "tenantId": "<GUID>",
  (...)
}

GitHub Actions 파일은 어디에 저장되나요?

GitHub Actions 파일 경로는 .입니다 <your-project-directory-name>\.github\workflows\azure-dev.yml.

azure-dev.yml 파일에서 빌드 단계에서 코드만 배포할 수 있나요?

예. run: azd up --no-promptrun: azd deploy --no-prompt로 교체합니다.

'azd pipeline config'를 실행할 때 트리거한 GitHub Actions 작업에 대한 로그는 어디에서 찾을 수 있나요?

https://github.com/<your-GH-account>/<your-repo>/actions이동한 다음 워크플로 실행에서 로그 파일을 참조합니다.

로컬로 컨테이너 애플리케이션 빌드

빌드 중인 컨테이너 앱을 로컬로 실행할 수 없는 이유는 무엇인가요?

컨테이너 애플리케이션을 로컬로 빌드할 때 애플리케이션이 작동AzureDeveloperCliCredential하려면 컨테이너에서 실행 azd auth login 해야 합니다. 또는 애플리케이션이 대신 서비스 주체 AzureDeveloperCliCredential를 사용하도록 구성할 수 있습니다.