다음을 통해 공유


6부: 기본 앱 시작 코드

이전 부분: 종속성 및 환경 변수

명령문 바로 import 다음에 앱의 시작 코드는 요청 처리 함수 전체에서 사용되는 키 변수를 초기화합니다.

먼저 애플리케이션은 경로를 정의하고 들어오는 HTTP 요청을 처리하기 위한 기초 역할을 하는 Flask 앱 개체를 만듭니다. 다음으로, 환경 변수에서 타사 API 엔드포인트 URL을 검색합니다. 이렇게 하면 코드베이스를 수정하지 않고도 엔드포인트를 쉽게 구성할 수 있습니다.

app = Flask(__name__)
app.config["DEBUG"] = True

number_url = os.environ["THIRD_PARTY_API_ENDPOINT"]

다음으로, Azure 서비스에서 인증할 때 사용할 권장 자격 증명인 DefaultAzureCredential 개체를 가져옵니다. DefaultAzureCredential 사용하여 Azure 호스팅 애플리케이션 인증참조하세요.

credential = DefaultAzureCredential()

로컬로 실행하면 DefaultAzureCredential 로컬 개발에 사용하는 서비스 주체에 대한 정보가 포함된 AZURE_TENANT_ID, AZURE_CLIENT_IDAZURE_CLIENT_SECRET 환경 변수를 찾습니다. Azure에서 실행할 때 DefaultAzureCredential 기본적으로 앱에서 사용하도록 설정된 시스템 할당 관리 ID를 사용합니다. 애플리케이션 설정을 사용하여 기본 동작을 재정의할 수 있지만 이 예제 시나리오에서는 기본 동작을 사용합니다.

다음 코드는 Azure Key Vault에서 타사 API의 액세스 키를 검색합니다. 프로비저닝 스크립트에서 Key Vault는 az keyvault create사용하여 만들어지고 비밀은 az keyvault secret set함께 저장됩니다.

Key Vault 리소스 자체는 KEY_VAULT_URL 환경 변수에서 로드되는 URL을 통해 액세스됩니다.

key_vault_url = os.environ["KEY_VAULT_URL"]

Azure Key Vault에서 비밀을 검색하려면 애플리케이션이 Key Vault 서비스와 통신하는 클라이언트 개체를 만들어야 합니다. 비밀을 읽는 것이 목표이므로 앱은 라이브러리의 SecretClient 클래스를 azure.keyvault.secrets 사용합니다. 이 클라이언트에는 다음 두 개의 입력이 필요합니다.

  • Key Vault URL - 일반적으로 환경 변수에서 검색됩니다.
  • 앱이 실행 중인 ID를 나타내는 자격 증명 개체는, 이전에 생성된 DefaultAzureCredential 인스턴스와 같은 것입니다.
keyvault_client = SecretClient(vault_url=key_vault_url, credential=credential)

개체를 만들면 SecretClient 애플리케이션이 즉시 인증되지 않습니다. 클라이언트는 단순히 Key Vault URL 및 자격 증명 개체를 저장하는 로컬 구문입니다. 인증 및 권한 부여는 azure 리소스에 대한 REST API 호출을 생성하는 get_secret같은 클라이언트를 통해 작업을 호출하는 경우에만 발생합니다.

api_secret_name = os.environ["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)

# The "secret" from Key Vault is an object with multiple properties. The key we
# want for the third-party API is in the value property. 
access_key = vault_secret.value

애플리케이션의 ID가 Azure Key Vault에 액세스할 수 있는 권한이 있는 경우에도 비밀 읽기와 같은 특정 작업을 수행할 수 있는 권한이 명시적으로 부여되어야 합니다. 이 권한이 없으면 ID가 유효하지 않더라도 호출 get_secret() 이 실패합니다. 이 문제를 해결하기 위해 프로비저닝 스크립트는 Azure CLI 명령을 az keyvault set-policy사용하여 앱에 대한 "비밀 가져오기" 액세스 정책을 설정합니다. 자세한 내용은 Key Vault 인증앱에 Key Vault에 대한 액세스 권한 부여를 참조하십시오. 후자의 문서에서는 Azure Portal을 사용하여 액세스 정책을 설정하는 방법을 보여 줍니다. (이 문서는 관리 ID를 위해 작성되었지만 로컬 개발에 사용되는 서비스 원칙에도 동일하게 적용됩니다.)

마지막으로 앱 코드는 Azure Storage 큐에 메시지를 쓸 수 있는 클라이언트 개체를 설정합니다. 큐의 URL은 STORAGE_QUEUE_URL환경 변수에 있습니다.

queue_url = os.environ["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url, credential=credential)

Azure Key Vault와 마찬가지로 애플리케이션은 Azure SDK의 특정 클라이언트 개체를 사용하여 Azure Queue Storage와 상호 작용합니다. 이 경우 azure-storage-queue 라이브러리의 클래스를 사용합니다 QueueClient .

클라이언트를 초기화하기 위해 앱은 이 메서드를 사용하여 from_queue_url 큐의 정규화된 URL과 자격 증명 개체를 제공합니다. 이 자격 증명 개체는 이전에 만든 DefaultAzureCredential 인스턴스로, 앱이 실행 중인 ID를 나타냅니다.

이 가이드의 앞부분에서 설명한 것처럼 해당 권한 부여는 "스토리지 큐 데이터 기여자" 역할을 애플리케이션의 ID(Azure의 관리 ID 또는 로컬 개발 중 서비스 주체)에 할당하여 부여됩니다. 이 역할 할당은 Azure CLI 명령을 az role assignment create사용하여 프로비저닝 스크립트에서 수행됩니다.

이 모든 시작 코드가 성공한다고 가정하면 앱에는 /api/v1/getcode API 엔드포인트를 지원하기 위한 모든 내부 변수가 있습니다.