アプリが管理するコンテナとサービスを設定する¶
このトピックでは、 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;
注釈
Snowflakeでは、プロバイダーがアプリケーションパッケージの外部にイメージリポジトリを作成することを推奨しています。
アプリケーションパッケージがリスティングに添付され、リスティングが Cross-Cloud Auto-Fulfillment を使用するように構成されている場合、アプリケーションパッケージ内のイメージリポジトリが複製され、追加コストが発生します。
このリポジトリにアップロードされたイメージは、バージョン定義を追加するときにアプリケーションパッケージからアクセスできます。アプリは、アプリケーションパッケージのマニフェストファイルで指定されたリポジトリ内のイメージにのみアクセスできます。
コンテナを使用したアプリのコンテキストにおけるイメージリポジトリには、次の考慮事項が適用されます。
外部イメージリポジトリはサポートされていません。Snowflakeの外部にあるイメージリポジトリは、コンテナ内のどのサービスからも参照できません。これは、アプリ内またはアプリ外に存在するサービスに適用されます。
プロバイダーはイメージリポジトリをアプリと直接共有することはできません。たとえば、プロバイダーは GRANT TO SHARE IN APPLICATION PACKAGE コマンドを使用できません。
プロバイダーは、イメージリポジトリに複数のコンテナイメージを保存できます。ただし、マニフェストに明示的に記載されていないコンテナイメージは、コンシューマーのアカウントのアプリからはアクセスできません。
プロバイダーがアプリケーションパッケージにバージョン定義を追加する場合、そのバージョンに含まれるコンテナイメージは変更できません。そのバージョンのイメージは不変であり、バージョンのライフサイクル全体にわたって保持されます。アプリ内のコンテナを変更するには、プロバイダーは新しいバージョンを使用する必要があります。
コンテナイメージをイメージリポジトリにアップロードする¶
イメージリポジトリを作成した後、プロバイダーはDockerコマンドを使用して、アプリに必要なコンテナイメージをイメージリポジトリにアップロードします。必要なコマンドはプロバイダーの環境に応じて異なります。一般的なワークフローは次のようになります。
docker login
docker build
docker tag
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
サービス仕様ファイルを作成する¶
サービス仕様は、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
注釈
サービス仕様ファイルは、元のデータベース名、スキーマ名、イメージリポジトリ名を使用して、コンテナイメージを参照します。インストールまたはアップグレード中に、サービス仕様ファイルからサービスが作成されます。
明示的なレジストリ 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