Configuração de contêineres e serviços gerenciados por um aplicativo

O tópico descreve como configurar os contêineres e serviços para um Snowflake Native App with Snowpark Container Services.

Criação de um repositório de imagens

Para gerenciar contêineres com um Snowflake Native App, os provedores devem criar um repositório de imagens na conta do provedor para armazenar as imagens exigidas pelo aplicativo.

O repositório de imagens deve existir dentro de um banco de dados e esquema. O exemplo a seguir mostra como criar um repositório de imagens usando o comando CREATE IMAGE REPOSITORY.

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

Nota

A Snowflake recomenda que os provedores criem o repositório de imagens fora do pacote do aplicativo.

Se o pacote do aplicativo estiver anexado a uma listagem e a listagem estiver configurada para usar o preenchimento automático entre nuvens, um repositório de imagens dentro do pacote do aplicativo seria replicado e custos adicionais seriam incorridos.

As imagens carregadas neste repositório ficam acessíveis ao pacote do aplicativo ao adicionar uma definição de versão. O aplicativo só pode acessar as imagens neste repositório que estão especificadas no arquivo de manifesto do pacote do aplicativo.

As seguintes considerações se aplicam aos repositórios de imagens no contexto de um aplicativo com contêineres:

  • Repositórios de imagens externas não são suportados. Repositórios de imagens que estão fora do Snowflake não podem ser referenciados por nenhum serviço dentro do contêiner. Isso se aplica a serviços que existem dentro ou fora do aplicativo.

  • Os provedores não podem compartilhar diretamente um repositório de imagens com um aplicativo. Por exemplo, os provedores não podem usar o comando GRANT TO SHARE IN APPLICATION PACKAGE.

  • Os provedores podem armazenar várias imagens de contêiner em um repositório de imagens. No entanto, imagens de contêiner que não estão explicitamente listadas no manifesto não são acessíveis pelo aplicativo na conta do consumidor.

  • Quando um provedor adiciona uma definição de versão a um pacote de aplicativo, as imagens de contêiner incluídas nessa versão não podem ser modificadas. As imagens dessa versão são imutáveis e persistem durante todo o ciclo de vida da versão. Para alterar os contêineres dentro de um aplicativo, os provedores devem usar uma nova versão.

Carregamento de imagens de contêiner para o repositório de imagens

Depois de criar um repositório de imagens, os provedores usam comandos do Docker para carregar as imagens de contêiner necessárias para o aplicativo no repositório de imagens. Os comandos específicos necessários dependem do ambiente do provedor. No entanto, o fluxo de trabalho geral é:

  1. docker login

  2. docker build

  3. docker tag

  4. docker push

A seguir mostramos um exemplo típico de como usar esses comandos:

$ 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

Criação do arquivo de especificação do serviço

A especificação do serviço é um arquivo YAML que o Snowpark Container Services usa para configurar e executar um serviço. Consulte Referência de especificação de serviço para obter informações gerais sobre a sintaxe deste arquivo.

O exemplo a seguir mostra os campos no arquivo de especificação de serviço que são necessários para um aplicativo com contêineres.

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

Nota

O arquivo de especificação de serviço faz referência a imagens de contêiner usando os nomes originais do banco de dados, do esquema e do repositório de imagens. Durante a instalação ou atualização, um serviço é criado a partir do arquivo de especificação de serviço.

URLs explícitos do registro, por exemplo org-provider.registry.snowflakecomputing.com/db/schema/repo/img:123, não são suportados e resultam em erro. O local da imagem deve sempre ser um nome completo qualificado na conta do provedor.

Use um modelo de especificação

Os provedores também podem usar um modelo de especificação dentro dos arquivos de especificação de serviço, conforme mostrado no exemplo a seguir:

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