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
einstance_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
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"
...
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;
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;
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;
$$;