연습 - 환경 변수 설정

완료됨

환경 변수를 사용하면 컨테이너가 실행하는 애플리케이션 또는 스크립트를 동적으로 구성할 수 있습니다. 컨테이너를 만들 때 Azure CLI, PowerShell 또는 Azure Portal을 사용하여 변수를 설정할 수 있습니다. 보안 환경 변수를 사용하면 중요한 정보가 컨테이너 출력에 표시되지 않도록 할 수 있습니다.

Azure Cosmos DB 인스턴스를 만들고 환경 변수를 사용하여 연결 정보를 Azure Container Instance에 전달합니다. 컨테이너의 애플리케이션은 해당 변수를 사용하여 Azure Cosmos DB에서 데이터를 읽고 씁니다. 환경 변수와 보안 환경 변수의 차이점을 알 수 있도록 두 변수를 모두를 만듭니다.

Azure Cosmos DB 배포

  1. Azure Cosmos DB를 배포할 때는 고유한 데이터베이스 이름을 지정합니다. 학습 목적상 Cloud Shell에서 이 명령을 실행하여 고유한 이름을 저장하는 다음과 같은 Bash 변수를 만듭니다.

    COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
    
  2. az cosmosdb create 명령을 실행하여 Azure Cosmos DB 인스턴스를 만듭니다.

    COSMOS_DB_ENDPOINT=$(az cosmosdb create \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query documentEndpoint \
      --output tsv)
    

    이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.

    $COSMOS_DB_NAME은 고유한 데이터베이스 이름을 지정합니다. 이 명령은 데이터베이스의 엔드포인트 주소를 출력합니다. 여기서 이 명령은 Bash 변수 COSMOS_DB_ENDPOINT에 이 주소를 저장합니다.

  3. az cosmosdb keys list을(를) 실행하여 Azure Cosmos DB 연결 키를 가져와 COSMOS_DB_MASTERKEY(이)라는 다음과 같은 Bash 변수에 저장합니다.

    COSMOS_DB_MASTERKEY=$(az cosmosdb keys list \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query primaryMasterKey \
      --output tsv)
    

데이터베이스와 함께 작동하는 컨테이너 배포

Azure Cosmos DB 인스턴스의 레코드를 읽고 쓸 수 있는 Azure 컨테이너 인스턴스를 만듭니다.

마지막 부분에서 만든 두 개의 환경 변수 COSMOS_DB_ENDPOINTCOSMOS_DB_MASTERKEY에는 Azure Cosmos DB 인스턴스에 연결하는 데 필요한 값이 저장됩니다.

  1. 다음 az container create 명령을 실행하여 컨테이너를 만듭니다.

    az container create \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \
      --ip-address Public \
      --location eastus \
      --environment-variables \
        COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
        COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
    

    azuredocs/azure-vote-front:cosmosdb는 가상의 투표 앱을 실행하는 컨테이너 이미지를 참조합니다.

    --environment-variables 인수를 참고합니다. 이 인수는 컨테이너가 시작될 때 컨테이너에 전달되는 환경 변수를 지정합니다. 이 컨테이너 이미지는 이러한 환경 변수를 확인하도록 구성됩니다. Azure Cosmos DB 엔드포인트의 이름과 연결 키를 전달합니다.

  2. az container show 명령을 실행하여 컨테이너의 다음과 같은 공용 IP 주소를 가져옵니다.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query ipAddress.ip \
      --output tsv
    
  3. 브라우저에서 컨테이너의 IP 주소로 이동합니다.

    중요

    컨테이너가 완전히 시작되고 연결을 수신할 수 있을 때까지 1~2분 정도 걸리는 경우가 있습니다. 브라우저에서 IP 주소로 이동할 때 응답이 없는 경우 몇 분 정도 기다렸다가 페이지를 새로 고칩니다.

    앱을 사용할 수 있으면 이 페이지가 보입니다.

    Screenshot that shows the Azure voting application with two choices in a browser. Cats and Dogs.

    고양이 또는 강아지 중 하나에 투표해 보세요. 각 투표는 Azure Cosmos DB 인스턴스에 저장됩니다.

보안 환경 변수를 사용하여 연결 정보 숨기기

이전 섹션에서는 두 환경 변수를 사용하여 컨테이너를 만들었습니다. 기본적으로 이러한 환경 변수는 Azure Portal 및 명령줄 도구를 통해 일반 텍스트로 액세스할 수 있습니다.

이 섹션에서는 연결 키와 같은 중요한 정보가 일반 텍스트로 표시되지 않도록 하는 방법을 알아봅니다.

  1. 작업의 현재 동작이 실제로 어떻게 수행되는지 살펴보겠습니다. 다음 az container show 명령을 실행하여 컨테이너의 환경 변수를 표시합니다.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query containers[0].environmentVariables
    

    두 값이 모두 일반 텍스트로 출력됩니다. 예를 들면 다음과 같습니다.

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": "https://aci-cosmos.documents.azure.com:443/"
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": "Xm5BwdLlCllBvrR26V00000000S2uOusuglhzwkE7dOPMBQ3oA30n3rKd8PKA13700000000095ynys863Ghgw=="
      }
    ]
    

    이러한 값은 투표 애플리케이션을 통해 사용자에게 표시되지 않지만 연결 키와 같은 민감한 정보가 일반 텍스트로 저장되지 않도록 하는 것이 보안을 위해 좋습니다.

    보안 환경 변수로 인해 명확한 텍스트 출력이 표시되지 않습니다. 보안 환경 변수를 사용하려면 --environment-variables 인수 대신 --secure-environment-variables 인수를 사용합니다.

  2. 다음과 같이 다음 명령을 실행하여 보안 환경 변수를 활용하는 aci-demo-secure라는 두 번째 컨테이너를 만드세요.

    az container create \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo-secure \
      --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \
      --ip-address Public \
      --location eastus \
      --secure-environment-variables \
        COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
        COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
    

    --secure-environment-variables 인수의 사용법을 참고합니다.

  3. 다음 az container show 명령을 실행하여 컨테이너의 환경 변수를 표시합니다.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo-secure \
      --query containers[0].environmentVariables
    

    이번에는 환경 변수가 일반 텍스트로 표시되지 않은 것을 볼 수 있습니다.

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": null
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": null
      }
    ]
    

    사실, 환경 변수 값은 전혀 표시되지 않습니다. 이러한 값은 민감한 정보를 참조하므로 표시되지 않아도 괜찮습니다. 여기에서는 환경 변수가 존재한다는 사실만 알아두면 됩니다.