アプリが管理するコンテナとサービスを設定する

このトピックでは、 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では、プロバイダーがアプリケーションパッケージの外部にイメージリポジトリを作成することを推奨しています。

アプリケーションパッケージがリスティングに添付され、リスティングが Cross-Cloud Auto-Fulfillment を使用するように構成されている場合、アプリケーションパッケージ内のイメージリポジトリが複製され、追加コストが発生します。

このリポジトリにアップロードされたイメージは、バージョン定義を追加するときにアプリケーションパッケージからアクセスできます。アプリは、アプリケーションパッケージのマニフェストファイルで指定されたリポジトリ内のイメージにのみアクセスできます。

コンテナを使用したアプリのコンテキストにおけるイメージリポジトリには、次の考慮事項が適用されます。

  • 外部イメージリポジトリはサポートされていません。Snowflakeの外部にあるイメージリポジトリは、コンテナ内のどのサービスからも参照できません。これは、アプリ内またはアプリ外に存在するサービスに適用されます。

  • プロバイダーはイメージリポジトリをアプリと直接共有することはできません。たとえば、プロバイダーは GRANT TO SHARE IN APPLICATION PACKAGE コマンドを使用できません。

  • プロバイダーは、イメージリポジトリに複数のコンテナイメージを保存できます。ただし、マニフェストに明示的に記載されていないコンテナイメージは、コンシューマーのアカウントのアプリからはアクセスできません。

  • プロバイダーがアプリケーションパッケージにバージョン定義を追加する場合、そのバージョンに含まれるコンテナイメージは変更できません。そのバージョンのイメージは不変であり、バージョンのライフサイクル全体にわたって保持されます。アプリ内のコンテナを変更するには、プロバイダーは新しいバージョンを使用する必要があります。

コンテナイメージをイメージリポジトリにアップロードする

イメージリポジトリを作成した後、プロバイダーはDockerコマンドを使用して、アプリに必要なコンテナイメージをイメージリポジトリにアップロードします。必要なコマンドはプロバイダーの環境に応じて異なります。一般的なワークフローは次のようになります。

  1. docker login

  2. docker build

  3. docker tag

  4. docker push

これらのコマンドの一般的な使用例を次に示します。

$ 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