이 문서에서는 Azure 개발자 CLI(azd) 도구, 명령 및 환경에 대한 질문과 대답을 제공합니다.
일반적인 질문
다음 섹션에서는 일반적인 도구 및 환경 질문에 중점을 둡니다.
Azure 개발자 CLI를 제거하려면 어떻게 해야 하나요?
원래 설치한 방법에 따라 제거하는 다양한 옵션이 있습니다. 자세한 내용은 설치 페이지 방문하세요.
Azure Developer CLI와 Azure CLI 차이점은 무엇인가요?
Azure 개발자 CLI(azd) 및 Azure CLI(az)는 모두 명령줄 도구이지만 다른 작업을 수행하는 데 도움이 됩니다.
상위 수준의 개발자 워크플로에 중점을 둡니다. Azure 리소스를 프로비전/관리하는 것 외에도 azd 클라우드 구성 요소, 로컬 개발 구성 및 파이프라인 자동화를 완전한 솔루션으로 통합하는 데 도움이 됩니다.
Azure CLI 가상 머신, 가상 네트워크 및 스토리지와 같은 Azure 인프라를 만들고 관리하기 위한 컨트롤 플레인 도구입니다. Azure CLI 특정 관리 작업에 대한 세분화된 명령을 중심으로 설계되었습니다.
자세한 내용은 Azure 개발자 CLI와 Azure CLI를 참조하세요.
환경 이름이란?
Azure 개발자 CLI는 환경 이름을 사용하여 Azure Developer CLI 템플릿에서 사용하는 AZURE_ENV_NAME 환경 변수를 설정합니다.
AZURE_ENV_NAME Azure 리소스 그룹 이름의 접두사로도 사용됩니다. 각 환경에는 고유한 구성 집합이 있으므로 Azure Developer CLI는 모든 구성 파일을 환경 디렉터리에 저장합니다.
├── .Azure [This directory displays after you run `azd 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 init 및 azd up을 참조하세요.
둘 이상의 환경을 설정할 수 있나요?
예. 다양한 환경(예: 개발, 테스트, 프로덕션)을 설정할 수 있습니다. azd env를 사용하여 이러한 환경을 관리할 수 있습니다.
환경 구성(.env) 파일은 어디에 저장되나요?
.env 파일 경로가 . 자세한 내용은 환경 변수 관리를 참조하세요.
.env 파일은 어떻게 사용되나요?
Azure 개발자 CLI에서 azd 명령은 환경 구성에 대한 .env 파일을 참조합니다. 또한 azd deploy 같은 명령은 db 연결 문자열 및 Azure Key Vault 엔드포인트와 같은 .env 파일을 업데이트합니다.
Codespaces에서 실행 했습니다. 로컬 개발 환경에서 작업을 계속할 수 있나요?
예. 로컬에서 개발 작업을 계속할 수 있습니다.
- 실행하여 템플릿 프로젝트를 로컬 컴퓨터에 복제합니다.
- Codespaces를 사용하여 만든 기존 env를 가져오려면 명령을 실행합니다. 이전과 동일한 환경 이름, 구독 및 위치를 제공해야 합니다.
디바이스 로그인에 문제가 있는 경우 Codespaces에서 인증하려면 어떻게 해야 하나요?
Codespaces에서 디바이스 코드 인증에 문제가 발생하는 경우(예: 되풀이 2FA 요청 또는 오류) VS Code Desktop을 사용하여 다음 해결 방법을 시도해 보세요.
- 다음 방법 중 하나를 사용하여 VS Code Desktop에서 Codespace를 엽니다.
- 명령 팔레트(Windows Ctrl+Shift+P 또는 MacOs의 Cmd+Shift+P)를 사용하고 코딩스페이스: VS Code Desktop에서 열기 선택합니다.
- 브라우저에서 Codespace의 왼쪽 아래 모서리를 클릭하고 VS Code Desktop에서 열기를 선택합니다.
- VS Code Desktop 터미널에서 azd auth 로그인 을 실행하고 브라우저 기반 인증을 완료합니다.
- 인증되면 VS Code Desktop을 닫고 브라우저에서 Codespace로 돌아갑니다. 인증 상태는 유지되어야 합니다.
azure.yaml 파일은 어떻게 사용되나요?
azure.yaml 파일은 템플릿에 포함된 Azure 리소스의 앱 및 유형을 설명합니다.
함수의 동작은 무엇인가요?
secretOrRandomPassword 함수는 키 자격 증명 모음 이름 및 비밀에 대한 매개 변수가 제공되는 경우 Azure Key Vault 비밀을 검색합니다. 이러한 매개 변수가 제공되지 않거나 비밀을 검색할 수 없는 경우 함수는 대신 사용할 임의로 생성된 암호를 반환합니다.
다음 예제에서는 파일에서 일반적인 사용 사례를 보여 줍니다.
${AZURE_KEY_VAULT_NAME} 및 sqlAdminPassword 변수는 Key Vault 및 비밀 이름에 대한 매개 변수로 전달됩니다. 값을 검색할 수 없는 경우 임의 암호가 대신 생성됩니다.
"sqlAdminPassword": {
"value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
}
secretOrRandomPassword의 출력은 앞으로 실행할 때 Bicep을 사용하여 Key Vault에 저장되어야 합니다. 배포에서 동일한 비밀을 검색하고 다시 사용하면 새 값을 반복적으로 생성할 때 표시할 수 있는 오류 또는 의도하지 않은 동작을 방지할 수 있습니다. 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 설정을 사용하면 다음 워크플로에서 비밀을 관리할 수 있습니다.
- 지정한 비밀이 존재하면
secretOrRandomPassword함수를 사용하여 Key Vault에서 이를 검색합니다. - 비밀이 없으면 Key Vault 만들어지고 임의로 생성된 비밀이 그 안에 저장됩니다.
- 향후 배포 시
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 App Service에 호스팅된 앱이 "기만 사이트 경고"를 발생시킵니다. 어떻게 수정할 수 있나요?
리소스 이름을 지정하는 방법 때문에 이러한 일이 발생할 수 있습니다.
'Azure 개발' 작성 템플릿을 사용하면 리소스의 이름을 구성할 수 있습니다. 이렇게 하려면 폴더의 항목을 추가할 수 있습니다. 다음은 그 예입니다.
"webServiceName": {
"value": "my-unique-name"
}
이 항목은 다음에 애플리케이션을 프로비전할 때 "app-web-aj84u2adj"와 같은 임의 값 대신 "my-unique-name"이라는 새 리소스를 만듭니다. Azure 포털을 사용하여 이전 리소스 그룹을 수동으로 제거하거나 azd down 실행하여 모든 이전 배포를 제거할 수 있습니다. 리소스를 제거한 후 실행하여 새 이름으로 다시 만듭니다.
이 이름은 전역적으로 고유해야 합니다. 그렇지 않으면 리소스를 만들려고 할 때 중에 ARM 오류가 발생합니다.
여러 Azure 테넌트에서 작업할 수 있나요?
예. 특정 테넌트로 인증하려면 명령과 함께 매개 변수를 사용합니다.
azd auth login --tenant-id <tenant-id>
또는 모든 테넌트에 대한 액세스 권한을 부여하려는 경우 먼저 브라우저에서 MFA(Multi-Factor Authentication) 문제를 처리할 수 있습니다.
- 브라우저에서 Azure Portal 엽니다.
- 각 테넌트로 하나씩 전환하세요. 이 작업은 필요한 모든 MFA 챌린지를 트리거하고 토큰을 새로 고칩니다.
- 터미널에서 를 실행합니다. 는 브라우저의 기존 세션 및 액세스 토큰을 사용합니다. 이 토큰은 이제 방문한 모든 테넌트에 유효합니다.
여러 번 실행할 수 있나요?
예. 증분 배포 모드사용합니다. 자세한 내용은 azd up을 참조하세요.
Provisioning
다음 섹션에서는 프로비전 프로세스에 중점을 둡 니다.
여러 번 실행할 수 있나요?
예. 증분 배포 모드사용합니다. 자세한 내용은 azd 안내를 참조하세요.
명령은 프로비전 할 리소스를 어떻게 알 수 있나요?
이 명령은 Bicep 템플릿을 사용합니다. 이 템플릿은 <your-project-directory-name>/infra 아래에 있는 Azure 리소스를 프로비전합니다.
Azure 프로비전되는 리소스는 어디에서 찾을 수 있나요?
으로 이동한 다음, 리소스 그룹인 를 찾습니다.
Azure 오류에 대한 자세한 내용은 어떻게 찾을 수 있나요?
<your-project-directory-name>/infra 아래에 있는 Bicep 템플릿을 사용하여 Azure 리소스를 프로비전합니다. 문제가 있는 경우 CLI 출력에 오류 메시지를 포함합니다.
여기로 이동한 다음, 리소스 그룹 [여기에 리소스 그룹 이름 입력]을 찾을 수도 있습니다. 배포가 실패하는 경우 오류 링크를 선택하여 자세한 정보를 가져옵니다.
다른 리소스는 일반적인 Azure 배포 오류 문제 해결 - Azure Resource Manager 참조하세요.
에 대한 로그 파일이 있나요?
곧 공개됩니다. 이 기능은 향후 릴리스를 위해 계획되어 있습니다.
배치
다음 섹션에서는 배포 프로세스에 중점을 둡 니다.
여러 번 실행할 수 있나요?
예. 자세한 내용은 azd deploy를 참조하세요.
azd는 내 코드를 배포할 Azure 리소스를 어떻게 찾나요?
배포하는 동안 먼저 태그가 지정된 그룹 및 환경 이름과 일치하는 값을 사용하여 애플리케이션을 구성하는 모든 리소스 그룹을 검색합니다. 그런 다음 이러한 각 리소스 그룹의 모든 리소스를 열거하고 서비스 이름과 일치하는 값이 있는 태그가 지정된 리소스를 찾습니다.
리소스에 태그를 사용하는 것이 좋지만 azure.yaml의 속성을 사용하여 명시적 리소스 이름을 제공할 수도 있습니다. 이 경우 위의 논리는 실행되지 않습니다.
다른 서비스를 건너뛰는 동안 프로젝트에 특정 서비스를 배포하려면 어떻게 해야 하나요?
프로젝트를 배포할 때 명령(예: )에서 서비스 이름을 지정하거나 배포하려는 서비스만 포함된 하위 폴더로 이동하여 특정 서비스를 배포하도록 선택할 수 있습니다. 이렇게 하면 다른 모든 서비스가 특정 형식으로 나열됩니다.
서비스를 건너뛰지 않으려면 루트 폴더에서 명령을 실행하거나 명령에 플래그를 추가해야 합니다.
파이프라인 구성
다음 섹션에서는 CI/CD 파이프라인 구성에 중점을 둡니다.
Azure 서비스 주체란?
Azure 서비스 주체는 Azure 리소스에 액세스하기 위해 앱, 호스트된 서비스 및 자동화된 도구에서 사용하기 위해 만든 ID입니다. 이 액세스는 서비스 주체에 할당된 역할에 의해 제한되며, 이를 통해 액세스할 수 있는 리소스와 어느 수준에서 액세스할 수 있는지 제어할 수 있습니다. Azure에서 GitHub로 인증하는 방법에 대한 자세한 내용은 GitHub 및 Azure 연결 | Microsoft Docs에서 확인하세요.
azd pipeline config 실행하기 전에 Azure 서비스 주체를 만들어야 하나요?
아니요. azd 파이프라인 구성 명령은 Azure 서비스 주체를 만들고 GitHub 리포지토리에 비밀을 저장하는 데 필요한 단계를 수행합니다.
GitHub 저장된 모든 비밀은 무엇인가요?
이 명령은 GitHub AZURE_CREDENTIALS, AZURE_ENV_NAME, AZURE_LOCATION 및 AZURE_SUBSCRIPTION_ID 네 개의 비밀을 저장합니다. 이동하여 각 비밀의 값을 재정의할 수 있습니다.
OIDC(OpenID Connect)란 무엇이며 지원됩니까?
OpenID Connect 사용하면 워크플로가 Azure 직접 수명이 짧은 토큰을 교환할 수 있습니다.
OIDC는 GitHub Actions 및 Azure 파이프라인(federated으로 설정됨)의 기본값으로 지원되지만 Azure DevOps 또는 Terraform에는 지원되지 않습니다.
- Azure DevOps 경우
--auth-typefederated명시적으로 호출하면 오류가 발생합니다. - Terraform의 경우:
- 정의되지 않은 경우 대체되고 경고가 발생합니다.
- 명시적으로 설정하면 오류가 발생합니다.
GitHub Actions 저장된 Azure 서비스 주체를 다시 설정하려면 어떻게 해야 하나요?
이동한 다음 새 서비스 주체에 대한 전체 JSON 개체를 복사하여 붙여넣어 업데이트합니다. 다음은 그 예입니다.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
GitHub Actions 파일은 어디에 저장되나요?
GitHub Actions 파일 경로는 <your-project-directory-name>\.github\workflows\azure-dev.yml. 자세한 내용은 Quickstart: 서비스 주체 만들기 및 GitHub 작업 실행 참조하세요.
azure-dev.yml 파일에서 빌드 단계에서 코드만 배포할 수 있나요?
예. 를 로 교체합니다.
azd pipeline config 실행할 때 트리거한 GitHub Actions 작업에 대한 로그는 어디에서 찾을 수 있나요?
이동한 다음 워크플로 실행에서 로그 파일을 참조합니다.
로컬로 컨테이너 애플리케이션 빌드
빌드 중인 컨테이너 앱을 로컬로 실행할 수 없는 이유는 무엇인가요?
컨테이너 애플리케이션을 로컬로 빌드할 때 애플리케이션이 작동하려면 컨테이너에서 실행해야 합니다. 또는 대신 서비스 주체를 사용하도록 애플리케이션을 구성할 수 있습니다.