Gerenciamento de serviços

O Snowpark Container Services permite implantar, gerenciar e dimensionar facilmente aplicativos em contêineres. Depois de fazer upload da imagem do seu aplicativo para um repositório em sua conta, você executará os contêineres do seu aplicativo como um serviço ou um trabalho. Este tópico explica como trabalhar com serviços.

Um serviço é de longa duração, como um serviço web, e não termina sozinho. O Snowflake gerencia serviços em execução. Por exemplo, se um contêiner de serviço sair, por qualquer motivo, o Snowflake reinicia esse contêiner para que o serviço seja executado ininterruptamente. Se seu serviço precisar de mais recursos, como mais poder de computação, o Snowflake provisionará nós adicionais no pool de computação.

Para obter mais informações sobre como trabalhar com serviços de contêiner, consulte Snowpark Container Services: como trabalhar com serviços.

Este tópico mostra como executar as seguintes tarefas com serviços:

Para operações comuns, como listar ou descartar, o Snowflake CLI usa comandos snow object conforme descrito em Gerenciamento de objetos Snowflake.

Como criar um serviço Snowpark Container Services

Um serviço de contêiner Snowpark exige o seguinte:

  • Um pool de computação: o Snowflake executa seu serviço no pool de computação especificado.

  • Um arquivo de especificação de serviço: esta especificação fornece ao Snowflake as informações necessárias para configurar e executar seu serviço.

Para criar um serviço, digite um comando snow spcs service create semelhante ao seguinte:

snow spcs service create "job_1" --compute-pool "pool_1" --spec-path "/some-dir/spec_file.yaml"
Copy

Para obter mais informações, consulte Gerenciamento de objetos Snowflake.

Criar e implementar um serviço a partir de uma definição de projeto

Você pode criar um serviço a partir de um arquivo de definição de projeto snowflake.yml e, em seguida, executar o comando snow spcs service deploy.

A seguir mostramos um exemplo de arquivo de definição de projeto snowflake.yml:

definition_version: 2
entities:
  my_service:
    type: service
    identifier: my_service
    stage: my_stage
    compute_pool: my_compute_pool
    spec_file: spec.yml
    min_instances: 1
    max_instances: 2
    query_warehouse: my_warehouse
    auto_resume: true
    external_access_integrations:
      - my_external_access
    secrets:
        cred: my_cred_name
    artifacts:
      - spec.yml
    comment: "My service"
    tags:
      - name: test_tag
        value: test_value
Copy

A tabela a seguir descreve as propriedades de uma definição de projeto de pool de computação.

Propriedades de definição do projeto Streamlit

Propriedade

Definição

type

required, string

Deve ser service.

stage

required, string

Estágio em que o arquivo de especificação do serviço está localizado.

compute_pool

required, string

Pool de computação onde o serviço é executado.

spec_file

required, string

Caminho para o arquivo de especificação de serviço no estágio.

identifier

optional, string

Identificador Snowflake para a entidade. O valor pode ter as seguintes formas:

  • Texto identificador de cadeia de caracteres

    identifier: my-service
    
    Copy

    Identificadores entre aspas e sem aspas são suportados. Para usar identificadores entre aspas, inclua as aspas ao redor do valor YAML (por exemplo, '"My Image Repository").

  • Objeto

    identifier:
      name: my-service
      schema: my-schema # optional
      database: my-db # optional
    
    Copy

    Nota

    Ocorrerá um erro se você especificar um schema ou um database e usar um nome totalmente qualificado na propriedade name (por exemplo, mydb.schema1.my-app).

min_instances

optional, string

Número mínimo de instâncias de serviço a serem executadas.

Padrão: 1

max_instances

optional, string

Número máximo de instâncias de serviço a serem executadas.

query_warehouse

optional, string

Warehouse a ser usado se um contêiner de serviço se conectar ao Snowflake para executar uma consulta sem especificar explicitamente um warehouse a ser usado.

auto_resume

optional, string

Se deve retomar automaticamente quando uma função de serviço ou entrada é chamada.

Padrão: True

external_access_integrations

opcional, sequência de cadeias de caracteres

Nomes das integrações de acesso externo necessárias para que essa entidade acesse redes externas.

segredos

opcional, dicionário

Nomes e valores das variáveis de segredos para que você possa usar as variáveis para fazer referência aos segredos.

artifacts

opcional, sequência de cadeias de caracteres

Lista de pares de origem e destino de arquivos para adicionar à raiz de implantação. É possível usar as seguintes propriedades de artefato:

  • src: Caminho para o arquivo ou arquivos de origem do código

  • dest: Caminho para o diretório para implementar os artefatos.

    Os caminhos de destino que fazem referência a diretórios devem terminar com um /. O destino de um padrão glob que não termina com um / resulta em um erro. Se omitido, dest tem como padrão a mesma cadeia de caracteres que src.

    Você também pode passar uma cadeia de caracteres para cada item em vez de um dict; nesse caso o valor será tratado como src e dest.

Se src refere-se a apenas um arquivo (não um glob), dest pode se referir a um <caminho de destino> ou um <caminho/nome>.

Você também pode passar uma cadeia de caracteres para cada item em vez de um dict; nesse caso o valor será tratado como src e dest.

comment

optional, string

Comentários para associar ao pool de computação.

tags

opcional, Sequência de tags

Nomes e valores de tags para o pool de computação. Para obter mais informações, consulte Cota de tags para objetos

Para criar e implementar um serviço, faça o seguinte:

  1. Altere seu diretório atual para o diretório que contém o arquivo de definição do projeto.

  2. Execute um comando snow spcs service deploy semelhante ao seguinte:

    snow spcs service deploy
    
    Copy
    +---------------------------------------------------------------------+
    | key    | value                                                      |
    |--------+------------------------------------------------------------|
    | status | Service MY_SERVICE successfully created.                   |
    +---------------------------------------------------------------------+
    

Como suspender e retomar um serviço

Para suspender um serviço nomeado, digite um comando snow spcs service suspend semelhante ao seguinte:

snow spcs service suspend echo_service
Copy
+-------------------------------------------+
| key    | value                            |
|--------+----------------------------------|
| status | Statement executed successfully. |
+-------------------------------------------+

Para retomar um serviço suspenso, digite um comando snow spcs service resume semelhante ao seguinte:

snow spcs service resume echo_service
Copy
+-------------------------------------------+
| key    | value                            |
|--------+----------------------------------|
| status | Statement executed successfully. |
+-------------------------------------------+

Como obter informações de status sobre um serviço

Nota

A função atual deve ter o privilégio MONITOR no serviço para obter seu status.

Como listar todos os serviços

O comando snow spcs service list retorna uma visão geral de todos os serviços, incluindo o estado de tempo de execução dos serviços, como PENDING ou RUNNING, e o status de atualização. Para obter o status de todos os serviços, digite um comando semelhante ao seguinte:

snow spcs service list
Copy
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|        |        |        |        |        |        |        |        |        |        |        |         | extern |         |        |         |        |         |        |        |         |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         | al_acc |         |        |         |        |         |        |        |         |        | managin | managi |
|        |        | databa |        |        |        |        | curren | target | min_in | max_in |         | ess_in |         |        |         |        | owner_r | query_ |        |         |        | g_objec | ng_obj |
|        |        | se_nam | schema |        | comput | dns_na | t_inst | _insta | stance | stance | auto_re | tegrat | created | update | resumed | commen | ole_typ | wareho |        | spec_di | is_upg | t_domai | ect_na |
| name   | status | e      | _name  | owner  | e_pool | me     | ances  | nces   | s      | s      | sume    | ions   | _on     | d_on   | _on     | t      | e       | use    | is_job | gest    | rading | n       | me     |
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+--------+---------+--------+---------+--------+---------+--------+--------+---------+--------+---------+--------|
| ECHO_S | RUNNIN | TEST00 | TEST_S | SYSADM | TUTORI | echo-s | 1      | 1      | 1      | 1      | true    | None   | 2024-10 | 2024-1 | None    | This   | ROLE    | COMPUT | false  | 52e62d1 | false  | None    | None   |
| ERVICE | G      | _DB    | CHEMA  | IN     | AL_COM | ervice |        |        |        |        |         |        | -16     | 0-16   |         | is a   |         | E_WH   |        | f19c720 |        |         |        |
|        |        |        |        |        | PUTE_P | .imhd. |        |        |        |        |         |        | 15:09:3 | 15:09: |         | test   |         |        |        | 6b5f4ef |        |         |        |
|        |        |        |        |        | OOL    | svc.sp |        |        |        |        |         |        | 0.49300 | 31.905 |         | servic |         |        |        | c069557 |        |         |        |
|        |        |        |        |        |        | cs.int |        |        |        |        |         |        | 0-07:00 | 000-07 |         | e      |         |        |        | 8b6c2b3 |        |         |        |
|        |        |        |        |        |        | ernal  |        |        |        |        |         |        |         | :00    |         |        |         |        |        | 806ad76 |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 67d78cc |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | ce8b6ed |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 6501a8a |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 3       |        |         |        |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Como obter o status de um serviço nomeado

Para obter o status de um serviço individual, digite um comando snow spcs service describe semelhante ao seguinte:

snow spcs service describe echo_service
Copy
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|        |        |        |        |        |        |        |        |        |        |        |         | extern |         |        |         |        |         |        |        |         |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         | al_acc |         |        |         |        |         |        |        |         |        | managin | managi |
|        |        | databa |        |        |        |        | curren | target | min_in | max_in |         | ess_in |         |        |         |        | owner_r | query_ |        |         |        | g_objec | ng_obj |
|        |        | se_nam | schema |        | comput | dns_na | t_inst | _insta | stance | stance | auto_re | tegrat | created | update | resumed | commen | ole_typ | wareho |        | spec_di | is_upg | t_domai | ect_na |
| name   | status | e      | _name  | owner  | e_pool | me     | ances  | nces   | s      | s      | sume    | ions   | _on     | d_on   | _on     | t      | e       | use    | is_job | gest    | rading | n       | me     |
|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+---------+--------+---------+--------+---------+--------+---------+--------+--------+---------+--------+---------+--------|
| ECHO_S | RUNNIN | TEST00 | TEST_S | SYSADM | TUTORI | echo-s | 1      | 1      | 1      | 1      | true    | None   | 2024-10 | 2024-1 | None    | This   | ROLE    | COMPUT | false  | 52e62d1 | false  | None    | None   |
| ERVICE | G      | _DB    | CHEMA  | IN     | AL_COM | ervice |        |        |        |        |         |        | -16     | 0-16   |         | is a   |         | E_WH   |        | f19c720 |        |         |        |
|        |        |        |        |        | PUTE_P | .imhd. |        |        |        |        |         |        | 15:09:3 | 15:09: |         | test   |         |        |        | 6b5f4ef |        |         |        |
|        |        |        |        |        | OOL    | svc.sp |        |        |        |        |         |        | 0.49300 | 31.905 |         | servic |         |        |        | c069557 |        |         |        |
|        |        |        |        |        |        | cs.int |        |        |        |        |         |        | 0-07:00 | 000-07 |         | e      |         |        |        | 8b6c2b3 |        |         |        |
|        |        |        |        |        |        | ernal  |        |        |        |        |         |        |         | :00    |         |        |         |        |        | 806ad76 |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 67d78cc |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | ce8b6ed |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 6501a8a |        |         |        |
|        |        |        |        |        |        |        |        |        |        |        |         |        |         |        |         |        |         |        |        | 3       |        |         |        |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Como listar instâncias e contêineres

É possível listar instâncias e contêineres do serviço com os comandos snow spcs service list-instances e snow spcs service list-containers, respectivamente.

Para obter a lista de instâncias no serviço echo_service, digite o seguinte comando snow spcs service list-instances:

snow spcs service list-instances echo_service
Copy
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| database_name | schema_name | service_name | instance_id | status | spec_digest                                                      | creation_time        | start_time           |
|---------------+-------------+--------------+-------------+--------+------------------------------------------------------------------+----------------------+----------------------|
| TEST00_DB     | TEST_SCHEMA | ECHO_SERVICE | 0           | READY  | 336c065739dd2b96e770f01804affdc7810e6df68a23b23052d851627abfbdf9 | 2024-10-10T06:06:30Z | 2024-10-10T06:06:30Z |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Para obter a lista de contêineres no serviço echo_service, digite o seguinte comando snow spcs service list-containers:

snow spcs service list-containers echo_service
Copy
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| database_name | schema_name | service_name | instance_id | container_name | status | message | image_name                                | image_digest                              | restart_count | start_time           |
|---------------+-------------+--------------+-------------+----------------+--------+---------+-------------------------------------------+-------------------------------------------+---------------+----------------------|
| TEST00_DB     | TEST_SCHEMA | ECHO_SERVICE | 0           | main           | READY  | Running | org-test-account-00.registry.registry.sno | sha256:06c3d54edc24925abe398eda70d37eb6b8 | 0             | 2024-10-16T22:09:35Z |
|               |             |              |             |                |        |         | wflakecomputing.com/test00_db/test_schema | 7b1c4dd6211317592764e1e7d94498            |               |                      |
|               |             |              |             |                |        |         | /test00_repo/echo_service:latest          |                                           |               |                      |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Como listar os pontos de extremidade em um serviço

Para listar os pontos de extremidade de um serviço nomeado, digite um comando snow spcs service list-endpoints semelhante ao seguinte:

snow spcs service list-endpoints echo_service
Copy
+--------------+------+----------+-----------------+-----------------------------------------+
| name         | port | protocol | ingress_enabled | ingress_url                             |
|--------------+------+----------+-----------------+-----------------------------------------|
| echoendpoint | 8000 | TCP      | true            | org-id-acct-id.snowflakecomputing.app   |
+--------------+------+----------+-----------------+-----------------------------------------+

Como listar as funções de serviço associadas a um serviço

É possível gerenciar o acesso aos pontos de extremidade individuais expostos por um serviço definindo funções e permissões de serviço na especificação do serviço. Para obter mais informações sobre como usar funções de serviço, consulte GRANT SERVICE ROLE.

Para obter uma lista das funções de serviço criadas para um serviço, use o comando snow spcs service list-roles, conforme mostrado:

snow spcs service list-roles my_service
Copy
+------------------------------------------------------------------+
| created_on                       | name                | comment |
|----------------------------------+---------------------+---------|
| 2024-10-09 16:48:52.980000-07:00 | ALL_ENDPOINTS_USAGE | None    |
+------------------------------------------------------------------+

Como definir e desmarcar as propriedades ou parâmetros de um serviço

Nota

A função atual deve ter o privilégio OPERATE no serviço para definir propriedades.

Para definir a propriedade ou o parâmetro de um serviço, digite um comando snow spcs service set semelhante ao seguinte:

snow spcs service set echo_service --min-instances 2 --max-instances 4
Copy
+-------------------------------------------+
| key    | value                            |
|--------+----------------------------------|
| status | Statement executed successfully. |
+-------------------------------------------+

Para redefinir uma propriedade ou parâmetro de serviço para seu valor padrão, insira um comando semelhante ao seguinte:

snow spcs compute-pool unset tutorial_compute_pool --auto-resume
Copy
+-------------------------------------------+
| key    | value                            |
|--------+----------------------------------|
| status | Statement executed successfully. |
+-------------------------------------------+

Como exibir logs para um serviço nomeado

Nota

A função atual deve ter o privilégio MONITOR no serviço para exibir logs.

Para exibir logs locais de um serviço nomeado, insira um comando snow spcs service logs semelhante ao seguinte:

snow spcs service logs "service_1" --container-name "container_1" --instance-id "0"
Copy

Como atualizar um serviço nomeado

Nota

A função atual deve ter o privilégio OPERATE no serviço para atualizá-lo.

Para atualizar um serviço nomeado, digite um comando snow spcs service upgrade semelhante ao seguinte:

snow spcs service upgrade echo_service --spec-path spec.yml
Copy
+-------------------------------------------+
| key    | value                            |
|--------+----------------------------------|
| status | Statement executed successfully. |
+-------------------------------------------+