Azure Container Apps에서 스토리지 탑재 사용

컨테이너 앱은 다양한 유형의 스토리지에 액세스할 수 있습니다. 필요한 경우 단일 앱이 둘 이상의 스토리지 유형을 활용할 수 있습니다.

스토리지 유형 Description 사용 예
컨테이너 파일 시스템 로컬 컨테이너로 범위가 지정된 임시 스토리지 로컬 앱 캐시 작성
임시 스토리지 개별 복제본으로 범위가 지정된 임시 스토리지 복제본의 컨테이너 간에 파일을 공유합니다. 예를 들어 주 앱 컨테이너는 사이드카 컨테이너에서 처리되는 로그 파일을 작성할 수 있습니다.
Azure 파일 영구 스토리지 다른 시스템에서 데이터에 액세스할 수 있도록 파일 공유에 파일을 작성합니다.

참고

Azure Container Apps의 볼륨 탑재 기능은 미리 보기로 제공됩니다.

컨테이너 파일 시스템

컨테이너는 자체 파일 시스템에 쓸 수 있습니다.

컨테이너 파일 시스템 스토리지의 특징은 다음과 같습니다.

  • 스토리지는 일시적이고 컨테이너가 종료되거나 다시 시작될 때 사라집니다.
  • 이 스토리지에 기록된 파일은 현재 컨테이너에서 실행 중인 프로세스에만 표시됩니다.
  • 용량 보장은 없습니다. 사용 가능한 스토리지는 컨테이너에서 사용할 수 있는 디스크 공간의 양에 따라 달라집니다.

임시 스토리지

Kubernetes의 emptyDir 에 해당하는 임시 볼륨을 탑재할 수 있습니다. 임시 스토리지의 범위는 단일 복제본으로 지정됩니다.

임시 스토리지의 특징은 다음과 같습니다.

  • 파일은 복제본의 수명 동안 유지됩니다.
    • 복제본의 컨테이너가 다시 시작되면 볼륨의 파일이 유지됩니다.
  • 복제본의 모든 컨테이너는 동일한 볼륨을 탑재할 수 있습니다.
  • 컨테이너는 여러 임시 볼륨을 탑재할 수 있습니다.
  • 용량 보장은 없습니다. 사용 가능한 스토리지는 복제본에서 사용할 수 있는 디스크 공간의 양에 따라 달라집니다.

임시 스토리지를 구성하려면 먼저 수정 버전에서 볼륨을 EmptyDir 정의합니다. 그런 다음 수정 버전에서 하나 이상의 컨테이너에 볼륨 탑재를 정의합니다.

사전 요구 사항

요구 사항 지침
Azure 계정 계정이 없는 경우 무료로 계정을 만듭니다.
Azure Container Apps 환경 컨테이너 앱 환경을 만듭니다.

구성

임시 스토리지를 사용하는 경우 YAML 정의와 함께 Azure CLI를 사용하여 컨테이너 앱을 만들거나 업데이트해야 합니다.

  1. 임시 스토리지를 사용하도록 기존 컨테이너 앱을 업데이트하려면 앱의 사양을 app.yaml이라는 YAML 파일로 내보냅니다.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. 컨테이너 앱 사양을 다음과 같은 내용으로 변경합니다.

    • volumes 컨테이너 앱 정의 섹션에 배열을 template 추가하고 볼륨을 정의합니다.
      • 볼륨 name 의 식별자입니다.
      • 으로 storageType사용합니다EmptyDir.
    • 임시 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의에 배열을 추가하고 volumeMounts 볼륨 탑재를 정의합니다.
      • volumeName 배열에 정의된 volumes 이름입니다.
      • 볼륨 mountPath 을 탑재할 컨테이너의 경로입니다.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. YAML 파일을 사용하여 컨테이너 앱을 업데이트합니다.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

임시 볼륨을 만들고 컨테이너에 탑재하려면 ARM 템플릿에서 컨테이너 앱 리소스를 다음과 같이 변경합니다.

  • volumes 컨테이너 앱 정의 섹션에 배열을 template 추가하고 볼륨을 정의합니다.
    • 볼륨 name 의 식별자입니다.
    • 으로 storageType사용합니다EmptyDir.
  • 임시 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의에 배열을 추가하고 volumeMounts 볼륨 탑재를 정의합니다.
    • volumeName 배열에 정의된 volumes 이름입니다.
    • 볼륨 mountPath 을 탑재할 컨테이너의 경로입니다.

ARM 템플릿 코드 조각 예제:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

전체 예제는 ARM 템플릿 API 사양 을 참조하세요.

Azure 파일

Azure Files 파일 공유를 컨테이너 내의 볼륨으로 탑재할 수 있습니다.

단계별 자습서는 Azure Container Apps에서 Azure Files 스토리지 탑재 만들기를 참조하세요.

Azure Files 스토리지에는 다음과 같은 특징이 있습니다.

  • 탑재 위치에 기록된 파일은 파일 공유에 유지됩니다.
  • 공유의 파일은 탑재 위치를 통해 사용할 수 있습니다.
  • 다른 복제본, 수정 버전 또는 컨테이너 앱에 있는 컨테이너를 포함하여 여러 컨테이너가 동일한 파일 공유를 탑재할 수 있습니다.
  • 공유를 탑재하는 모든 컨테이너는 다른 컨테이너 또는 메서드에서 작성한 파일에 액세스할 수 있습니다.
  • 단일 컨테이너에 둘 이상의 Azure Files 볼륨을 탑재할 수 있습니다.

컨테이너에서 Azure Files 스토리지를 사용하도록 설정하려면 다음과 같은 방법으로 컨테이너를 설정해야 합니다.

  • Container Apps 환경에서 형식 AzureFile 의 스토리지 정의를 만듭니다.
  • 수정 버전에서 스토리지 볼륨을 정의합니다.
  • 수정 버전에서 하나 이상의 컨테이너에서 볼륨 탑재를 정의합니다.

사전 요구 사항

요구 사항 지침
Azure 계정 계정이 없는 경우 무료로 계정을 만듭니다.
Azure Storage 계정 스토리지 계정 만들기
Azure Container Apps 환경 컨테이너 앱 환경을 만듭니다.

구성

Azure Files 사용하는 경우 YAML 정의와 함께 Azure CLI를 사용하여 컨테이너 앱을 만들거나 업데이트해야 합니다.

  1. Container Apps 환경에 형식 AzureFile 의 스토리지 정의를 추가합니다.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    <STORAGE_ACCOUNT_KEY> 스토리지 계정의 이름과 키로 바꿉 <STORAGE_ACCOUNT_NAME> 니다. 스토리지 계정의 파일 공유 이름으로 바꿉 <STORAGE_SHARE_NAME> 니다.

    유효한 값은 --access-mode are ReadWriteReadOnly.

  2. 파일 공유를 탑재하도록 기존 컨테이너 앱을 업데이트하려면 앱의 사양을 app.yaml이라는 YAML 파일로 내보냅니다.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. 컨테이너 앱 사양을 다음과 같은 내용으로 변경합니다.

    • volumes 컨테이너 앱 정의 섹션에 배열을 template 추가하고 볼륨을 정의합니다.
      • 볼륨 name 의 식별자입니다.
      • storageType의 경우 AzureFile을 사용합니다.
      • 의 경우 storageName환경에서 정의한 스토리지의 이름을 사용합니다.
    • Azure Files 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의에 배열을 추가하고 volumeMounts 볼륨 탑재를 정의합니다.
      • 배열 volumeName 에 정의된 volumes 이름입니다.
      • 볼륨 mountPath 을 탑재할 컨테이너의 경로입니다.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. YAML 파일을 사용하여 컨테이너 앱을 업데이트합니다.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml my-app.yaml
    

다음 ARM 템플릿 코드 조각에서는 컨테이너 앱 환경에 Azure Files 공유를 추가하고 컨테이너 앱에서 사용하는 방법을 보여 줍니다.

  1. storages Container Apps 환경에 자식 리소스를 추가합니다.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. 볼륨 및 볼륨 탑재를 추가하도록 컨테이너 앱 리소스를 업데이트합니다.

    {
      "apiVersion": "2022-03-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • volumes 컨테이너 앱 정의 섹션에 배열을 template 추가하고 볼륨을 정의합니다.
      • 볼륨 name 의 식별자입니다.
      • storageType의 경우 AzureFile을 사용합니다.
      • 의 경우 storageName환경에서 정의한 스토리지의 이름을 사용합니다.
    • Azure Files 스토리지를 탑재하려는 템플릿의 각 컨테이너에 대해 컨테이너 정의에 배열을 추가하고 volumeMounts 볼륨 탑재를 정의합니다.
      • 배열 volumeName 에 정의된 volumes 이름입니다.
      • 볼륨 mountPath 을 탑재할 컨테이너의 경로입니다.

전체 예제는 ARM 템플릿 API 사양 을 참조하세요.