영구 데이터 저장소 작업

영구 데이터 저장소를 사용하여 IBM Cloud® Code Engine 애플리케이션 또는 작업에 IBM Cloud Object Storage (COS) 버킷을 마운트할 수 있습니다. 이 기능을 사용하면 워크로드가 표준 파일 작업을 사용하여 로컬 파일 시스템을 통해 COS 버킷의 콘텐츠에 액세스할 수 있습니다.

Code Engine 의 영구 데이터 저장소는 Code Engine 에서 관리하지 않는 기존 데이터 저장소에 대한 참조입니다. 현재 지원되는 데이터 저장소 유형은 IBM Cloud Object Storage 이 유일합니다. COS 버킷에 대한 참조를 생성하면 애플리케이션이나 작업 컨테이너의 파일 시스템에 직접 마운트할 수 있습니다.

시작하기 전에

영구 데이터 저장소로 작업하려면 먼저 다음 전제 조건이 충족되는지 확인하세요.

  • IBM Cloud Object Storage 인스턴스가 있어야 합니다.
  • HMAC 자격 증명을 사용하도록 설정한 Object Storage 인스턴스에 대한 서비스 자격 증명을 만들어야 합니다. 버킷에서 읽고 쓰려면 최소한 Writer 서비스 액세스 권한 역할이 필요합니다. 읽기 액세스 권한만 필요한 경우에는 대신 콘텐츠 리더 서비스 액세스 역할을 선택하세요.
  • Object Storage 인스턴스에서 버킷을 사용할 수 있어야 합니다. 자세한 내용은 새 버킷 만들기를 참조하세요.
  • Code Engine 프로젝트가 있어야 하며 현재 컨텍스트로 선택되어 있어야 합니다.

1단계: 콘솔을 사용하여 Code Engine 에서 HMAC 비밀을 만듭니다

Code Engine ( )에 안전하게 액세스하려면 Object Storage 인스턴스와 연결된 HMAC 자격 증명이 필요합니다. 이러한 자격 증명을 Code Engine 프로젝트 내에 비밀로 저장합니다.

콘솔에서 HMAC 암호 만들기를 따라 HMAC 형식의 암호를 만듭니다.

메시지가 표시되면 COS 서비스 자격증명에서 해당 값을 입력합니다.

2단계: 콘솔을 사용하여 영구 데이터 저장소 만들기

이제 Code Engine 에서 영구 데이터 저장소 리소스를 만듭니다. 이 리소스는 COS 버킷에 대한 참조 역할을 하며 사용자가 만든 HMAC 시크릿과 연결됩니다.

  1. Code Engine 프로젝트 페이지에서 프로젝트 이름을 클릭합니다.
  2. 구성 요소 페이지에서 영구 데이터 저장소를 클릭합니다.
  3. 영구 데이터 저장소 페이지에서 만들기를 클릭합니다.
  4. 영구 데이터 저장소 만들기 페이지에서 다음 단계를 완료합니다:
    1. 이름을 지정하십시오. 예를 들어, mysecret-hmac.
    2. 기존 COS 버킷 사양을 선택 할지 아니면 수동으로 추가 할지 지정합니다.
    3. COS 인스턴스를 선택하거나 이름을 수동으로 지정합니다.
    4. 버킷을 선택하거나 이름을 직접 지정하세요.
    5. COS 인스턴스 인증에 필요한 HMAC 액세스 비밀번호를 선택합니다.
    6. 만들기를 클릭하여 영구 데이터 저장소를 만듭니다.

3단계: 콘솔을 사용하여 데이터 저장소를 워크로드에 마운트합니다

영구 데이터 저장소를 만든 후에는 애플리케이션이나 작업을 만들거나 업데이트할 때 볼륨 마운트로 마운트할 수 있습니다.

애플리케이션에 마운트

  1. 앱으로 이동합니다.

    • Code Engine 의 ‘프로젝트’ 페이지에서 해당 프로젝트의 이름을 클릭하세요. 애플리케이션을 클릭하여 애플리케이션으로 작업합니다.
    • 애플리케이션 페이지에서 업데이트하려는 애플리케이션의 이름을 클릭하거나 만들기를 클릭하여 새 애플리케이션 을 만듭니다.
  2. ‘구성 ’ 탭을 선택하십시오.

  3. 볼륨 마운트 탭에서 추가를 클릭합니다.

  4. 볼륨 유형을 영구 데이터 저장소로 선택합니다.

  5. 영구 데이터 저장소를 선택하십시오.

  6. 애플리케이션이 해당 하위 경로 접두사가 있는 버킷의 개체에만 액세스해야 하는 경우 상대 버킷 하위 경로(선택 사항) 를 지정합니다(예: path/in/bucket). 이 기능은 버킷 내의 특정 폴더에 대한 액세스를 격리하려는 경우에 유용합니다. 하위 경로는 COS 버킷에서 유효한 접두사여야 합니다. 마운트된 디렉터리에서는 해당 경로 아래의 콘텐츠에만 액세스할 수 있습니다.

  7. 마운트 경로를 지정합니다. 볼륨 마운트 데이터에 액세스할 수 있는 애플리케이션 컨테이너 내부의 디렉터리입니다(예: /mnt/bucket).

  8. 액세스 권한에 대한 값을 읽기-쓰기 또는 읽기 전용 중에서 선택합니다.

  9. 추가를 클릭하여 볼륨 마운트를 생성합니다.

  10. '배포'를 클릭하여 변경 사항을 저장하고 앱 개정판을 배포하세요.

애플리케이션을 업데이트하면 앱이 새 리비전을 생성하고 해당 인스턴스로 트래픽을 라우팅합니다.

업무에 탑재

  1. 작업 페이지로 이동하십시오.

    • Code Engine 의 ‘프로젝트’ 페이지에서 해당 프로젝트의 이름을 클릭하세요. 작업을 클릭하여 작업 및 작업 실행으로 작업합니다.
    • 작업 페이지에서 작업 탭을 클릭하고 업데이트하려는 작업의 이름을 클릭하거나 만들기를 클릭하여 새 작업을 만듭니다.
  2. ‘구성 ’ 탭을 선택하십시오.

  3. 볼륨 마운트 탭에서 추가를 클릭합니다.

  4. 볼륨 유형을 영구 데이터 저장소로 선택합니다.

  5. 영구 데이터 저장소를 선택하십시오.

  6. 작업 실행이 해당 하위 경로 접두사가 있는 버킷의 개체에만 액세스해야 하는 경우 상대 버킷 하위 경로(선택 사항) 를 지정합니다(예: path/in/bucket). 이 기능은 버킷 내의 특정 폴더에 대한 액세스를 격리하려는 경우에 유용합니다. 하위 경로는 COS 버킷에서 유효한 접두사여야 합니다. 마운트된 디렉터리에서는 해당 경로 아래의 콘텐츠에만 액세스할 수 있습니다.

  7. 마운트 경로를 지정합니다. 볼륨 마운트 데이터에 액세스할 수 있는 작업 실행 컨테이너 내부의 디렉터리입니다(예: /mnt/bucket).

  8. 액세스 권한에 대한 값을 읽기-쓰기 또는 읽기 전용 중에서 선택합니다.

  9. 추가를 클릭하여 볼륨 마운트를 생성합니다.

  10. 배포를 클릭하여 변경 사항을 저장하고 작업을 배포합니다.

  11. 작업 제출을 클릭하십시오.

시작하기 전에

영구 데이터 저장소로 작업하려면 먼저 다음 전제 조건이 충족되는지 확인하세요.

  • IBM Cloud Object Storage 인스턴스가 있어야 합니다.
  • HMAC 자격 증명을 사용하도록 설정한 Object Storage 인스턴스에 대한 서비스 자격 증명을 만들어야 합니다. 버킷에서 읽고 쓰려면 최소한 Writer 서비스 액세스 권한 역할이 필요합니다. 읽기 액세스 권한만 필요한 경우에는 대신 콘텐츠 리더 서비스 액세스 역할을 선택하세요.
  • 다음 명령을 실행하여 IBM Cloud Object Storage 플러그인을 설치해야 합니다:
    ibmcloud plugin install cloud-object-storage
    
  • Object Storage 인스턴스에서 버킷을 사용할 수 있어야 합니다. 자세한 내용은 새 버킷 만들기를 참조하세요.
  • Code Engine 프로젝트가 있어야 하며 현재 컨텍스트로 선택되어 있어야 합니다.

1단계: CLI를 사용하여 Code Engine 에서 HMAC 비밀을 생성합니다

Code Engine ( )에 안전하게 액세스하려면 Object Storage 인스턴스와 연결된 HMAC 자격 증명이 필요합니다. 이러한 자격 증명을 Code Engine 프로젝트 내에 비밀로 저장합니다.

hmac 형식의 비밀 번호를 만들려면 secret create 명령을 사용합니다.

ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt

명령의 메시지가 표시되면 COS 서비스 자격 증명에서 해당 값을 입력합니다 secret create 명령의 메시지가 표시되면 해당 값을 입력합니다.

2단계: CLI를 사용하여 영구 데이터 저장소 만들기

이제 Code Engine 에서 영구 데이터 저장소 리소스를 만듭니다. 이 리소스는 COS 버킷에 대한 참조 역할을 하며 사용자가 만든 HMAC 시크릿과 연결됩니다.

ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
  • my-cos-bucket-pds 을 데이터 저장소의 고유 이름으로 바꿉니다.
  • my-cos-bucket 을 COS 버킷의 정확한 이름으로 바꿉니다.
  • my-hmac-secret 을 HMAC 비밀의 이름으로 바꿉니다.

3단계: CLI를 사용하여 데이터 저장소를 워크로드에 마운트하기

영구 데이터 저장소를 만든 후에는 애플리케이션이나 작업을 만들거나 업데이트할 때 이를 마운트할 수 있습니다. MOUNT_PATH=PDS_NAME 형식과 함께 --mount-data-store 옵션을 사용합니다.

애플리케이션에 마운트

다음 명령은 myapp 이라는 이름의 애플리케이션을 만들고 my-cos-bucket-pds 데이터 저장소를 애플리케이션 컨테이너 내부의 /mnt/bucket 디렉터리에 마운트합니다.

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

업무에 탑재

마찬가지로 이 명령은 myjob 이라는 작업을 만들고 동일한 데이터 저장소를 /mnt/bucket 디렉터리에 마운트합니다.

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

버킷 내에 하위 경로 마운트하기

콜론(:)을 사용하여 마운트 정의에 상대 경로를 추가하여 COS 버킷 내에서 특정 하위 경로를 마운트할 수도 있습니다. 이 방법은 버킷 내의 특정 폴더에 대한 액세스를 격리하려는 경우에 유용합니다.

예를 들어 my-cos-bucket-pds 데이터 저장소의 path/in/bucket 디렉터리만 /mnt/bucket 에 마운트합니다:

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

또는 업무용으로도 사용할 수 있습니다:

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

참고: COS 버킷의 path/in/bucket 접두사는 유효한 접두사여야 합니다. 마운트된 디렉터리에서는 해당 경로 아래의 콘텐츠에만 액세스할 수 있습니다.

4단계: 마운트된 데이터 저장소의 파일에 액세스하기

애플리케이션이나 작업이 실행되면 코드는 마치 로컬 디렉터리처럼 마운트된 COS 버킷과 상호 작용할 수 있습니다. 모든 표준 파일 시스템 작업이 지원됩니다.

예를 들어 컨테이너 내에서 파일을 나열하고, 콘텐츠를 읽고, 새 파일을 쓸 수 있습니다:

# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt

제한사항

마운트는 다음을 사용하여 구현됩니다 s3fs를 사용하여 구현되며, 이는 S3-compatible 스토리지에 FUSE 기반 파일 시스템 인터페이스를 제공합니다. 다음 제한사항에 유의하십시오.

  • 영구 데이터 저장소 수:
    • 애플리케이션 또는 작업당 최대 2개의 영구 데이터 저장소 마운트만 허용하는 제한이 있습니다.
  • 성능:
    • Object Storage 는 첫 번째 바이트까지의 지연 시간이 길어 즉각적인 액세스가 필요한 작업의 경우 로컬 파일 시스템보다 느립니다.
    • 임의 쓰기나 추가와 같이 파일을 수정하는 작업은 백엔드에서 전체 개체를 다시 작성해야 하므로 임의 쓰기 액세스 권한이 없기 때문에 속도가 느리고 비효율적일 수 있습니다.
    • 디렉터리 나열과 같은 메타데이터 작업은 성능이 저하될 수 있습니다.
  • 일관성:
    • IBM Cloud Object Storage 는 새 객체에는 강력한 읽기 후 쓰기 일관성을 제공하지만 객체 덮어쓰기 및 삭제에는 최종적인 일관성을 제공합니다. 즉, 업데이트 또는 삭제 후 읽기 작업으로 인해 일시적으로 오래된 데이터가 반환될 수 있습니다.
    • 마운트 외부에서 버킷을 변경하는 경우(예: COS API 또는 다른 클라이언트를 통해 직접) 즉시 감지되지 않으며 한동안 표시되지 않을 수 있습니다.
  • 파일 시스템 의미론:
    • 표준 POSIX 파일 시스템 기능은 완전히 지원되지 않습니다. 특히 파일이나 디렉터리의 원자적 이름 변경과 하드 링크가 없습니다.
  • 동시성:
    • 동일한 버킷을 마운트하는 여러 클라이언트(예: 여러 앱 인스턴스) 간에 조정이 이루어지지 않습니다. 서로 다른 인스턴스에서 동일한 파일에 동시에 쓰면 데이터가 손실되거나 손상될 수 있습니다.
  • 이벤트 구독:
    • Object Storage 버킷에 대한 이벤트 구독을 구성한 경우, 마운트를 통해 수행되는 파일 만들기 작업에서 여러 개의 업데이트 이벤트가 생성될 수 있다는 점에 유의하세요. 이로 인해 Code Engine 앱 또는 작업이 단일 파일 작업에 대해 두 번 이상 트리거되어 다운스트림 처리 또는 이벤트 중심 워크플로에 영향을 미칠 수 있습니다.

이러한 제한 사항으로 인해 이 기능은 모든 워크로드에 적합하지 않습니다. 딥 러닝이나 데이터 분석과 같이 주로 대용량 파일을 읽는 워크로드에 가장 적합하며, 우수한 처리량을 달성할 수 있습니다. 짧은 지연 시간, 빈번한 소규모 쓰기 또는 트랜잭션 파일 작업이 필요한 워크로드에는 권장되지 않습니다.

다음 단계

이제 영구 데이터 저장소로 작업하는 방법을 이해했으니 고급 주제를 살펴보세요: