다음을 통해 공유


자습서: Azure Container Apps의 코드 인터프리터 세션에서 JavaScript 코드 실행(미리 보기)

이 자습서에서는 HTTP API를 사용하여 Azure Container Apps 동적 세션에서 JavaScript 코드를 실행하는 방법을 보여 줍니다.

이 자습서에서 수행하는 작업은 다음과 같습니다.

  • 새 코드 인터프리터 세션 만들기
  • 세션 풀에 적절한 보안 컨텍스트 설정
  • 실행할 컨테이너 앱에 대한 JavaScript 코드 전달

참고 항목

Azure Container Apps 동적 세션의 JavaScript 코드 인터프리터 기능은 현재 미리 보기로 제공됩니다. 자세한 내용은 미리 보기 제한 사항을 참조 하세요.

필수 조건

이 자습서를 시작하기 전에 다음 리소스가 필요합니다.

리소스 설명
Azure 계정 활성 구독이 있는 Azure 계정이 필요합니다. GitHub 계정이 없는 경우 무료로 만들 수 있습니다.
Azure CLI Azure CLI를 설치합니다.

설정

먼저 최신 업데이트로 Azure CLI를 준비하고 Azure에 로그인합니다.

  1. Azure CLI를 최신 버전으로 업데이트합니다.

    az upgrade
    
  2. Microsoft.App 리소스 공급자를 등록합니다.

    az provider register --namespace Microsoft.App
    
  3. 최신 버전의 Azure Container Apps CLI 확장을 설치합니다.

    az extension add \
      --name containerapp \
      --allow-preview true --upgrade
    
  4. Azure에 로그인합니다.

    az login
    
  5. Azure 구독 ID를 쿼리하고 값을 변수로 설정합니다.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. 이 절차에서 사용되는 변수를 설정합니다.

    다음 명령을 실행하기 전에 자리 표시자를 <> 사용자 고유의 값으로 바꿔야 합니다.

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION="northcentralus"
    

    이러한 변수를 사용하여 다음 단계에서 리소스를 만듭니다.

  7. 리소스 그룹을 만드는 데 사용할 구독 설정

    az account set -s $SUBSCRIPTION_ID
    
  8. 리소스 그룹을 만듭니다.

    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를 호출합니다.

  1. 사용자 개체 ID를 쿼리합니다.

    USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
    
  2. 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. 자세한 내용은 인증 및 권한 부여 규칙을 참조하세요.

  1. 액세스 토큰을 가져옵니다.

    JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
    
  2. 요청 헤더를 저장할 변수를 만듭니다.

    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

다음 단계