Como adicionar um pool de computação a um aplicativo com contêineres

O tópico descreve como usar pools de computação em um Snowflake Native Apps with Snowpark Container Services.

Sobre pools de computação em aplicativos com contêineres

Um pool de computação é uma coleção de um ou mais nós de máquinas virtuais (VM) nos quais o Snowflake executa Snowpark Container Services. Aplicativos com contêineres usam um pool de computação na conta do consumidor para gerenciar as imagens de contêiner necessárias para o aplicativo.

Um aplicativo pode criar vários pools de computação e cada pool de computação é exclusivo do aplicativo. Os pools de computação usados pelo aplicativo não podem ser usados para outras finalidades.

Os contêineres dentro de um aplicativo podem acessar uns aos outros diretamente, mesmo que estejam em pools de computação diferentes.

No entanto, o uso de diferentes pools de computação permite que os provedores separem os tipos de serviços. Por exemplo, um provedor pode separar seus serviços de front-end dos serviços de back-end.

Os pools de computação são objetos no nível da conta, o que significa que o nome de cada pool de computação deve ser exclusivo dentro da conta do consumidor.

Práticas recomendadas para usar pools de computação em um aplicativo com contêineres

Os provedores devem considerar as seguintes práticas recomendadas ao criar pools de computação em uma conta de consumidor:

  • Os pools de computação têm implicações de custo. É importante definir valores para as propriedades min_nodes, max_nodes e instance_family para consumir a quantidade correta de recursos. Os provedores também devem definir a propriedade AUTO_SUSPEND_SECS para suspender automaticamente os pools de computação inativos.

    Consulte CREATE COMPUTE POOL para obter mais informações.

  • Os pools de computação são objetos no nível da conta, portanto, seus nomes de pool devem ser exclusivos em uma conta de consumidor. Considere usar o nome do aplicativo como um prefixo do nome do pool de computação para garantir a exclusividade.

  • Ao adicionar um pool de computação a um aplicativo com contêineres instalados em diferentes provedores de serviços de nuvem, o código usado para criar o pool de computação deve levar em conta as diferenças nas famílias de instâncias em diferentes provedores de serviços de nuvem. Por exemplo, a família de instâncias HIGHMEM_X64_L tem uma configuração diferente para cada provedor de serviços de nuvem.

    Consulte CREATE COMPUTE POOL para obter mais informações sobre as famílias de instâncias disponíveis. Consulte Como escolher famílias de instâncias diferentes para cada provedor para obter um exemplo de como definir a família de instâncias para diferentes provedores de serviços de nuvem.

  • Defina a propriedade uses_gpu como TRUE somente se o aplicativo com contêineres usar um GPU como a família de instância do pool de computação. Consulte Como criar a propriedade uses_gpu no arquivo de manifesto para obter mais informações.

Como criar um pool de computação para um aplicativo

Há duas maneiras de criar um pool de computação para um aplicativo com contêineres:

  • O aplicativo cria os pools de computação necessários durante a instalação. Isto requer que o consumidor conceda o privilégio CREATE COMPUTE POOL no pool de computação para o aplicativo. Um provedor pode configurar o aplicativo para solicitar esses privilégios usando Snowsight.

    Consulte Configuração de um aplicativo para solicitar o privilégio CREATE COMPUTE POOL para obter mais informações.

  • O consumidor cria manualmente os pools de computação exigidos pelo aplicativo. O consumidor deve executar o CREATE COMPUTE POOL para criar o pool de computação e, em seguida, conceder manualmente o privilégio CREATE COMPUTE POOL no pool de computação para o aplicativo.

Como criar a propriedade uses_gpu no arquivo de manifesto

Se um aplicativo com contêineres especificar um GPU como a família de instância para o Compute Pool, os provedores deverão definir o sinalizador uses_gpu como true no manifesto. O exemplo a seguir mostra como definir esse sinalizador no bloco artifacts:

artifacts:
  readme: readme.md
  setup_script: scripts/setup.sql
  container_services:
    uses_gpu: true|false
    images:
    - /provider_db/provider_schema/provider_repo/server:prod
    - /provider_db/provider_schema/provider_repo/web:1.0
Copy

A varredura de segurança automatizada usa essa estrutura de varredura de segurança de sinalização para validar o comportamento durante o processo de varredura da versão do aplicativo.

Cuidado

Para publicar um aplicativo com contêineres no Snowflake Marketplace, o aplicativo deve criar os pools de computação necessários durante a instalação. Consulte Requisitos aplicados para obter os requisitos de publicação do Snowflake Marketplace.

Configuração de um aplicativo para solicitar o privilégio CREATE COMPUTE POOL

Os provedores podem configurar um aplicativo para solicitar o privilégio CREATE COMPUTE POOL. Eles também podem criar o pool de computação a partir do script de configuração quando o aplicativo é instalado ou atualizado.

Nota

Um aplicativo pode criar no máximo cinco pools de computação em uma conta de consumidor. Entre em contato com o suporte Snowflake se seu aplicativo precisar criar pools de computação adicionais.

Solicitação do privilégio CREATE COMPUTE POOL

Um aplicativo pode solicitar os privilégios CREATE COMPUTE POOL de um consumidor. Esse privilégio permite que o aplicativo crie um pool de computação na conta do consumidor. Consulte Solicitação de privilégios globais dos consumidores para obter informações gerais sobre como solicitar privilégios globais do consumidor.

Para solicitar o privilégio CREATE COMPUTE POOL de um consumidor, adicione o privilégio CREATE COMPUTE POOL ao arquivo manifest.yml conforme mostrado no exemplo a seguir:

...
privileges:
 - CREATE COMPUTE POOL
   description: "Enable application to create one to five compute pools"
 ...
Copy

Consulte Criação do arquivo do manifesto para um aplicativo com contêineres para obter mais informações sobre como criar o arquivo manifest.yml para um aplicativo com contêineres.

Nota

O comportamento para a solicitação do privilégio CREATE COMPUTE POOL dentro de um aplicativo de contêiner é diferente de outras solicitações de privilégio. Quando você adiciona esse privilégio ao arquivo manifest.yml, Snowsight exibe uma interface que permite ao consumidor conceder os privilégios necessários.

Adição do comando CREATE COMPUTE POOL ao script de configuração

Para criar um pool de computação na conta do consumidor, adicione o comando CREATE COMPUTE POOL ao script de configuração do aplicativo.

O exemplo a seguir mostra como criar um pool de computação dentro de um procedimento armazenado no script de configuração:

CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = standard_1
  AUTO_RESUME = true;
Copy

Nota

Ao criar um pool de computação dentro do aplicativo, os provedores devem verificar se o provedor concedeu o privilégio CREATE COMPUTE POOL antes de criar o pool de computação.

Os pools de computação criados por um aplicativo são de propriedade exclusiva desse aplicativo. Eles não podem ser usados por outros aplicativos ou diretamente pelo consumidor.

Em geral, os usuários na conta do consumidor só podem ver pools de computação criados pelo aplicativo nas seguintes situações:

  • O usuário recebeu o privilégio MANAGE GRANTS.

  • O aplicativo concede acesso ao pool de computação usando funções de aplicativo.

Os desenvolvedores de aplicativos podem permitir que usuários com funções ativas tenham privilégios específicos em aplicativos pertencentes a pools de computação. Além disso, os administradores com a função ACCOUNTADMIN podem conceder a si mesmos os privilégios necessários para controlar os aplicativos pertencentes aos pools de computação. Para obter mais informações sobre os requisitos de acesso ao pool de computação, consulte ALTER COMPUTE POOL.

Colocação de prefixo no pool de computação dentro do script de configuração

Como os pools de computação são objetos no nível da conta, os nomes dos pools de computação devem ser exclusivos dentro da conta do consumidor. O exemplo a seguir mostra como usar o nome do aplicativo como um prefixo do nome do pool de computação:

LET POOL_NAME := (select current_database()) || '_app_pool';
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = STANDARD_2;
Copy

Como escolher famílias de instâncias diferentes para cada provedor

Ao criar um pool de computação para um aplicativo que é publicado em vários provedores de serviços de nuvem, o código que cria o script de configuração deve ser escrito para levar em conta as diferenças na forma como as famílias de instâncias são configuradas.

O exemplo a seguir mostra como escrever um procedimento armazenado para criar um pool de computação com base no provedor de serviços de nuvem onde o aplicativo está sendo instalado:

 CREATE OR REPLACE PROCEDURE public.create_cp()
 RETURNS VARCHAR
 LANGUAGE SQL
 EXECUTE AS OWNER
 AS $$
  BEGIN
      LET POOL_NAME := (select current_database()) || '_app_pool';
      LET INSTANCE_FAMILY := IFF( CONTAINS(current_region(), 'AZURE') , 'GPU_NV_XS' , 'GPU_NV_S' );
      CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
          MIN_NODES = 1
          MAX_NODES = 1
          INSTANCE_FAMILY = :instance_family;
      RETURN 'Compute Pool Created';
  END;
$$;
Copy