앱이 관리하는 컨테이너와 서비스 설정

이 항목에서는 Snowflake Native App with Snowpark Container Services 에 대한 컨테이너와 서비스를 설정하는 방법을 설명합니다.

이미지 리포지토리 만들기

Snowflake Native App 을 사용하여 컨테이너를 관리하려면 공급자는 공급자 계정에 이미지 리포지토리 를 생성하여 앱에 필요한 이미지를 저장해야 합니다.

이미지 저장소는 데이터베이스와 스키마 내에 존재해야 합니다. 다음 예제에서는 CREATE IMAGE REPOSITORY 명령을 사용하여 이미지 리포지토리를 생성하는 방법을 보여줍니다.

CREATE DATABASE provider_db;
CREATE SCHEMA provider_schema;
CREATE IMAGE REPOSITORY provider_repo;
Copy

참고

Snowflake는 공급자가 애플리케이션 패키지 외부에 이미지 리포지토리를 생성할 것을 권장합니다.

애플리케이션 패키지가 목록에 첨부되어 있고 목록이 클라우드 간 자동 복제 를 사용하도록 구성된 경우 애플리케이션 패키지 내의 이미지 리포지토리가 복제되고 추가 비용이 발생합니다.

이 리포지토리에 업로드된 이미지는 버전 정의를 추가할 때 애플리케이션 패키지에서 액세스할 수 있습니다. 앱은 애플리케이션 패키지의 매니페스트 파일에 지정된 이 리포지토리의 이미지에만 액세스할 수 있습니다.

컨테이너가 있는 앱의 컨텍스트에서 이미지 리포지토리에는 다음 고려 사항이 적용됩니다.

  • 외부 이미지 리포지토리는 지원되지 않습니다. Snowflake 외부에 있는 이미지 리포지토리는 컨테이너 내의 어떤 서비스에서도 참조될 수 없습니다. 이는 앱 내부 또는 외부에 존재하는 서비스에 적용됩니다.

  • 공급자는 앱과 이미지 리포지토리를 직접 공유할 수 없습니다. 예를 들어, 공급자는 GRANT TO SHARE IN APPLICATION PACKAGE 명령을 사용할 수 없습니다.

  • 공급자는 이미지 리포지토리에 여러 개의 컨테이너 이미지를 저장할 수 있습니다. 그러나 매니페스트에 명확하게 나열되지 않은 컨테이너 이미지는 컨슈머 계정의 앱에서 액세스할 수 없습니다.

  • 공급자가 애플리케이션 패키지에 버전 정의를 추가하면 해당 버전에 포함된 컨테이너 이미지는 수정할 수 없습니다. 해당 버전의 이미지는 변경할 수 없으며 버전의 전체 수명 주기 동안 지속됩니다. 앱 내의 컨테이너를 변경하려면 공급자가 새로운 버전을 사용해야 합니다.

컨테이너 이미지를 이미지 리포지토리에 업로드

이미지 리포지토리를 만든 후, 공급자는 Docker 명령을 사용하여 앱에 필요한 컨테이너 이미지를 이미지 리포지토리에 업로드합니다. 필요한 구체적인 명령은 공급자의 환경에 따라 달라집니다. 그러나 일반적인 워크플로는 다음과 같습니다.

  1. Docker 로그인

  2. Docker 빌드

  3. Docker 태그

  4. Docker 푸시

다음은 이러한 명령을 사용하는 방법의 일반적인 예를 보여줍니다.

$ docker login org-provider-account.registry.snowflakecomputing.com
$ docker build --rm --platform linux/amd64 -t service:1.0 .
$ docker tag service:1.0 org-provider-account.registry.snowflakecomputing.com/provider_db/provider_schema/provider_repo/service:1.0
$ docker push org-provider-account.registry.snowflakecomputing.comprovider_db/provider_schema/provider_repo/service:1.0
Copy

서비스 사양 파일 만들기

서비스 사양은 Snowpark Container Services가 서비스를 구성하고 실행하는 데 사용하는 YAML 파일입니다. 이 파일의 구문에 대한 일반적인 정보는 서비스 사양 참조 섹션을 참조하십시오.

다음 예제는 컨테이너가 포함된 앱에 필요한 서비스 사양 파일의 필드를 보여줍니다.

spec:
  containers:
  - image: /provider_db/provider_schema/provider_repo/server:prod
    name: server
    ...
  - image: /provider_db/provider_schema/provider_repo/web:1.0
    name: web
    ...
  endpoints:
  - name: invoke
    port: 8000
  - name: ui
    port: 5000
    public: true
Copy

참고

서비스 사양 파일은 원래 데이터베이스, 스키마 및 이미지 리포지토리 이름을 사용하여 컨테이너 이미지를 참조합니다. 설치 또는 업그레이드 중에 서비스 사양 파일에서 서비스가 생성됩니다.

명시적 레지스트리 URLs(예: org-provider.registry.snowflakecomputing.com/db/schema/repo/img:123)는 지원되지 않으며 오류가 발생합니다. 이미지의 위치는 항상 공급자 계정의 정규화된 이름이어야 합니다.

사양 템플릿 사용

공급자는 다음 예제와 같이 서비스 사양 파일 내에서 사양 템플릿 을 사용할 수도 있습니다.

spec:
  containers:
  - image: /provider_db/provider_schema/provider_repo/server:prod
    name: {{ container_name }}
  endpoints:
  - name: invoke
    port: {{ invoke_port_value }}
  - name: ui
    port: 5000
    public: true
Copy