Criação do arquivo de manifesto para um aplicativo

Este tópico descreve como criar o arquivo de manifesto para um aplicativo.

Sobre o arquivo de manifesto

O arquivo de manifesto contém informações que o pacote do aplicativo requer para criar e gerenciar um Snowflake Native App. Isso inclui o local do script de configuração, definições de versão e informações de configuração do aplicativo.

O arquivo de manifesto tem os seguintes requisitos:

  • O nome do arquivo de manifesto deve ser manifest.yml.

  • O arquivo de manifesto deve ser carregado em um estágio nomeado para que fique acessível ao pacote do aplicativo.

  • O arquivo de manifesto deve existir na raiz da estrutura de diretório no estágio nomeado onde outros arquivos do aplicativo são armazenados.

Versão 1 e versão 2 do arquivo de manifesto

Snowflake Native Apps oferecem suporte a duas versões do arquivo de manifesto. A versão é especificada usando o campo manifest_version.

manifest_version: 1

Esta versão do arquivo de manifesto oferece suporte à funcionalidade atual e legada de Snowflake Native Apps.

manifest_version: 2

Esta versão do arquivo de manifesto oferece suporte a outros recursos, incluindo a concessão automatizada de privilégios.

Considerações de segurança ao usar a versão 2 do arquivo de manifesto

Ao usar a versão 2 do arquivo de manifesto, considere as seguintes implicações de segurança:

Quando um provedor configura um aplicativo para usar manifest_version: 2 no arquivo de manifesto, a concessão automática de privilégios está habilitada. Por padrão, isso permite que o Snowflake conceda automaticamente certos privilégios ao aplicativo. Para informações sobre os privilégios que podem ser concedidos automaticamente ao aplicativo, consulte Privilégios concedidos pela concessão automatizada de privilégios.

Durante a instalação, Snowsight exibe uma notificação sobre os privilégios solicitados pelo aplicativo. Quando um consumidor instala um aplicativo que usa a concessão automática de privilégios, ele concorda que o aplicativo pode receber esses privilégios durante atualizações sem exigir consentimento adicional.

Os consumidores podem criar políticas de recursos que restringem os objetos que um aplicativo pode criar. Para mais informações sobre a criação de políticas de recursos, consulte Usar políticas de recursos para limitar os objetos que um aplicativo pode criar.

Especificação dos privilégios exigidos por um aplicativo com contêineres

Assim como em outros aplicativos, o campo privileges do arquivo de manifesto especifica os privilégios que um aplicativo com contêineres solicita dos consumidores.

Os seguintes privilégios são específicos para um aplicativo com contêineres:

  • CREATE COMPUTE POOL

    Este privilégio é necessário para permitir que o aplicativo crie um pool de computação na conta do consumidor. Não é necessário se o consumidor criar o pool de computação manualmente.

  • BIND SERVICE ENDPOINT

    Este privilégio é necessário para permitir que um ponto de extremidade seja acessível fora do Snowflake.

O exemplo a seguir mostra como adicionar esses privilégios ao bloco privileges:

privileges:
- CREATE COMPUTE POOL:
  description: 'Required to allow the app to create a compute pool in the consumer account.'
- BIND SERVICE ENDPOINT:
  description: 'Required to allow endpoints to be externally accessible.'
Copy

Especificação das imagens de contêiner usadas por um aplicativo com contêineres

Para especificar a localização das imagens de contêiner usadas pelo aplicativo com contêineres, adicione a propriedade images para o bloco artifacts.container_services.

Você deve incluir uma entrada para cada imagem. O caminho especificado inclui o nome do banco de dados, o esquema e o repositório de imagens. Este caminho tem o seguinte formato:

/<database>/<schema>/<image_repository>/<image_name>:tag
Copy

O exemplo a seguir mostra como especificar a propriedade images:

artifacts
...
  container_services
    ...
    images
      - /dev_db/dev_schema/dev_repo/image1
      - /dev_db/dev_schema/dev_repo/image2
Copy

Especificação do ponto de extremidade da interface do usuário para um aplicativo com contêineres

Para especificar o ponto de extremidade para a interface do usuário do aplicativo com contêineres, adicione a propriedade default_web_endpoint para o bloco artifacts.

A propriedade default_web_endpoint é opcional. Se esta propriedade for especificada, o ponto de extremidade também deverá ser definido no arquivo de especificação de serviço.

Nota

Apenas um dos default_web_endpoint e default_streamlit pode ser especificado.

Esta entrada no arquivo de manifesto tem duas propriedades adicionais:

  • service

    Especifica o nome do serviço da interface do usuário.

  • endpoint

    Especifica o nome do ponto de extremidade.

O exemplo a seguir mostra como especificar a propriedade default_web_endpoint.

default_web_endpoint:
  service: ux_schema.ux_service
  endpoint: ui
Copy

Exemplos de arquivos de manifesto

Os exemplos a seguir mostram arquivos de manifesto típicos para diferentes casos de uso.

Exemplo de arquivo de manifesto para conceder privilégios automaticamente

O arquivo de manifesto a seguir mostra como configurar um aplicativo para usar a concessão automática de privilégios. Este exemplo usa a versão 2 do arquivo de manifesto. O bloco privileges especifica os privilégios exigidos pelo aplicativo.

manifest_version: 2
version:
  name: v1
artifacts:
  readme: readme.md
  setup_script: setup.sql
privileges:
  - CREATE TABLE:
    description: "Allows the app to create tables in the consumer account"
  - CREATE WAREHOUSE:
    description: "Allows the app to create warehouses in the consumer account"
Copy

Quando o aplicativo é instalado, o Snowflake concede automaticamente os privilégios CREATE TABLE e CREATE WAREHOUSE para o aplicativo.

Exemplos de arquivo de manifesto para um aplicativo com contêineres

O Snowflake Native Apps oferece suporte a entradas no arquivo de manifesto que são específicas para um aplicativo com contêineres. No exemplo a seguir, é usado um arquivo de manifesto típico para um aplicativo com contêineres:

manifest_version: 2
version:
  name: v1
artifacts:
  readme: readme.md
  setup_script: setup.sql
  container_services:
    images:
      - /dev_db/dev_schema/dev_repo/image1
      - /dev_db/dev_schema/dev_repo/image2
  default_web_endpoint:
    service: ux_schema.ux_service
    endpoint: ui
privileges:
 - CREATE COMPUTE POOL:
   description: "..."
 - BIND SERVICE ENDPOINT:
   description: "...”
Copy