이 자습서에서는 HTTP API를 사용하여 Azure Container Apps 동적 세션에서 JavaScript 코드를 실행하는 방법을 보여 줍니다.
이 자습서에서 수행하는 작업은 다음과 같습니다.
- 새 코드 인터프리터 세션 만들기
- 세션 풀에 적절한 보안 컨텍스트 설정
- 실행할 컨테이너 앱에 대한 JavaScript 코드 전달
필수 조건
이 자습서를 시작하기 전에 다음 리소스가 필요합니다.
리소스 | 설명 |
---|---|
Azure 계정 | 활성 구독이 있는 Azure 계정이 필요합니다. GitHub 계정이 없는 경우 무료로 만들 수 있습니다. |
Azure 커맨드 라인 인터페이스 (CLI) | Azure CLI를 설치합니다. |
설정
먼저 최신 업데이트로 Azure CLI를 준비하고 Azure에 로그인합니다.
Azure CLI를 최신 버전으로 업데이트합니다.
az upgrade
Microsoft.App
리소스 공급자를 등록합니다.az provider register --namespace Microsoft.App
최신 버전의 Azure Container Apps CLI 확장을 설치합니다.
az extension add \ --name containerapp \ --allow-preview true --upgrade
Azure에 로그인합니다.
az login
Azure 구독 ID를 쿼리하고 값을 변수로 설정합니다.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
이 절차에서 사용되는 변수를 설정합니다.
다음 명령을 실행하기 전에 자리 표시자를
<>
사용자 고유의 값으로 바꿔야 합니다.RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION="northcentralus"
이러한 변수를 사용하여 다음 단계에서 리소스를 만듭니다.
리소스 그룹을 만드는 데 사용할 구독 설정
az account set -s $SUBSCRIPTION_ID
리소스 그룹을 만듭니다.
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION
코드 인터프리터 세션 풀 만들기
명령을 az containerapp sessionpool create
사용하여 임의의 JavaScript 코드 실행을 담당하는 Node.js 세션 풀을 만듭니다.
az containerapp sessionpool create \
--name $SESSION_POOL_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--max-sessions 5 \
--network-status EgressEnabled \
--container-type NodeLTS \
--cooldown-period 300
코드 실행 API에 대한 역할 할당 설정
세션 풀의 API와 상호 작용하려면 역할 할당과 함께 ID를 Azure ContainerApps Session Executor
사용해야 합니다. 이 자습서에서는 Microsoft Entra ID 사용자 ID를 사용하여 API를 호출합니다.
사용자 개체 ID를 쿼리합니다.
USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
ID에 역할을 할당합니다.
az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee-object-id $USER_OBJECT_ID \ --assignee-principal-type User \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME"
전달자 토큰 가져오기
세션 풀의 API에 직접 액세스하려면 요청 헤더에 포함할 액세스 토큰을 Authorization
생성합니다. 토큰에 값이 있는 대상 그룹(aud
) 클레임이 포함되어 있는지 확인합니다 https://dynamicsessions.io
. 자세한 내용은 인증 및 권한 부여 규칙을 참조하세요.
액세스 토큰을 가져옵니다.
JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
요청 헤더를 저장할 변수를 만듭니다.
AUTH_HEADER="Authorization: Bearer $JWT_ACCESS_TOKEN"
이 헤더는 애플리케이션의 엔드포인트에 대한 요청과 함께 제공됩니다.
세션 풀 관리 엔드포인트 가져오기
다음 명령을 사용하여 애플리케이션의 엔드포인트를 반환합니다.
SESSION_POOL_MANAGEMENT_ENDPOINT=$(az containerapp sessionpool show -n $SESSION_POOL_NAME -g $RESOURCE_GROUP --query "properties.poolManagementEndpoint" -o tsv)
이 엔드포인트는 코드 인터프리터 세션에서 코드 페이로드를 실행하기 위해 API를 호출하는 위치입니다.
세션에서 코드 실행
이제 보안 컨텍스트를 설정하는 전달자 토큰과 세션 풀 엔드포인트가 있으므로 애플리케이션에 요청을 보내 코드 블록을 실행할 수 있습니다.
다음 명령을 실행하여 JavaScript 코드를 실행하여 애플리케이션에서 "hello world"를 기록합니다.
curl -v -X 'POST' -H "$AUTH_HEADER" "$SESSION_POOL_MANAGEMENT_ENDPOINT/code/execute?api-version=2024-02-02-preview&identifier=test" -H 'Content-Type: application/json' -d '
{
"properties": {
"codeInputType": "inline",
"executionType": "synchronous",
"code": "console.log(\"hello-world\")"
}
}'
다음 예제와 유사한 출력이 표시됩니다.
{
"properties": {
"status": "Success",
"stdout": "hello-world\n",
"stderr": "",
"executionResult": "",
"executionTimeInMilliseconds": 5
}
}
GitHub에서 더 많은 코드 인터프리터 API 샘플을 찾을 수 있습니다.
리소스 정리
이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기간 사용하지 않을 예정이면 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.
az group delete \
--resource-group $RESOURCE_GROUP