O ambiente de execução do Ruby

A função do Cloud Run é executada em um ambiente que consiste em uma versão do sistema operacional com pacotes complementares, suporte a linguagens e a biblioteca Ruby Functions Framework que dá suporte e invoca a função. Esse ambiente é identificado pela versão da linguagem e é conhecido como ID de execução.

Preparação de funções

É possível preparar uma função diretamente do console do Google Cloud ou gravá-la na máquina local e fazer upload dela. Para preparar a máquina local para desenvolvimento do Ruby, consulte Configurar um ambiente de desenvolvimento do Ruby.

Ambientes de execução e imagens de base do Ruby com suporte

Ambiente de execução ID do ambiente de execução Pilhas Imagem de base do ambiente de execução
Ruby 3.3 ruby33
  • google-22 (padrão)
  • google-22-full
  • google-22/ruby33
  • google-22-full/ruby33
  • Ruby 3.2 ruby32
  • google-22 (padrão)
  • google-22-full
  • google-22/ruby32
  • google-22-full/ruby32
  • Ruby 3.0 ruby30 google-18-full google-18-full/ruby30
    Ruby 2.7 ruby27 google-18-full google-18-full/ruby27
    Ruby 2.6 ruby26 google-18-full google-18-full/ruby26

    Selecionar o ambiente de execução

    É possível selecionar um dos ambientes de execução do Ruby com suporte para a função durante a implantação.

    É possível selecionar uma versão do ambiente de execução usando o console do Google Cloud ou a CLI gcloud. Clique na guia para conferir instruções sobre como usar a ferramenta de sua preferência:

    gcloud

    Especifique a imagem de base do Ruby para a função usando a flag --base-image ao implantar a função. Exemplo:

    gcloud beta run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image ruby33
    

    Substitua:

    • FUNCTION pelo nome da função que você está implantando. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome, se você omiti-lo.

    • FUNCTION_ENTRYPOINT: o ponto de entrada da função no código-fonte. Esse é o código que o Cloud Run executa quando é executada. O valor dessa sinalização precisa ser um nome de função ou de classe totalmente qualificada no código-fonte.

    Para instruções detalhadas sobre como implantar uma função usando a CLI gcloud, consulte Implantar funções no Cloud Run.

    Console

    É possível selecionar uma versão do ambiente de execução ao criar ou atualizar uma função do Cloud Run no console do Google Cloud. Para instruções detalhadas sobre como implantar uma função, consulte Implantar funções no Cloud Run.

    Para selecionar um ambiente de execução no console do Google Cloud ao criar uma função, siga estas etapas:

    1. No console do Google Cloud, acesse a página do Cloud Run:

      Acessar o Cloud Run

    2. Clique em Escrever uma função.

    3. Na lista Ambiente de execução, selecione uma versão do ambiente de execução do Ruby.

    4. Clique em Criar e aguarde o Cloud Run criar o serviço usando uma revisão do marcador de posição.

    5. O console vai redirecionar você para a guia Origem, em que você pode ver o código-fonte da sua função. Clique em Salvar e implantar novamente.

    Para instruções detalhadas sobre como atualizar a versão do ambiente de execução depois que a função for implantada, consulte Reimplantar o novo código-fonte.

    Estrutura do código-fonte

    Para que as funções do Cloud Run encontrem a definição da sua função, seu código-fonte precisa seguir uma estrutura específica. Consulte Escrever funções do Cloud Run para mais informações.

    Especificar as dependências

    As funções do Cloud Run escritas em Ruby usam o bundler para acessar as dependências.

    O Functions Framework é uma dependência necessária para todas as funções. Embora as funções do Cloud Run o instalem em seu nome quando a função é criada, recomendamos que você a inclua como uma dependência explícita para maior clareza.

    Se a função depende de dependências particulares, recomendamos que você espelhe functions-framework no registro particular. Inclua o functions-framework espelhado como uma dependência da sua função para evitar a instalação do pacote pela Internet pública.

    Cada função precisa fornecer um Gemfile que especifique a gem functions_framework, junto com qualquer outra gem necessária para a função. Gemfile precisa estar no mesmo diretório que o arquivo app.rb que contém o código da função. Além disso, a função precisa fornecer um arquivo de bloqueio que especifique todas as dependências transitivas e as respectivas versões. Este arquivo, Gemfile.lock, também está localizado no mesmo diretório junto com Gemfile.

    Quando você implanta sua função, o Cloud Run faz o download e instala as dependências declaradas em Gemfile e Gemfile.lock usando bundler.

    O Gemfile lista os pacotes obrigatórios para a função junto com as restrições de versão opcionais. Para mais detalhes, consulte a referência do Gemfile.

    Veja abaixo um exemplo de Gemfile:

    source "https://rubygems.org"
    
    gem "functions_framework", "~> 0.7"
    gem "google-cloud-storage", "~> 1.29"
    

    Como empacotar dependências locais

    Também é possível empacotar e implantar dependências junto com sua função. Essa abordagem é útil se a dependência não estiver disponível usando o gerenciador de pacotes rubygems.

    Para empacotar uma gem localmente, inclua-a em um diretório na estrutura de diretórios da sua função e informe o caminho na entrada Gemfile da dependência. O diretório da gem precisa incluir um arquivo gemspec válido, que precisa estar localizado na hierarquia de diretórios da função para que o código seja implantado com a função. Por exemplo, é possível usar uma estrutura de diretório como a seguinte:

    myfunction/
    ├── Gemfile
    ├── Gemfile.lock
    ├── app.rb
    └── my_private_gem/
        ├── lib/
        |   └── my_private_gem.rb
        └── my_private_gem.gemspec
    

    A entrada Gemfile pode ter esta aparência:

    source "https://rubygems.org"
    
    gem "functions_framework", "~> 0.7"
    gem "my_private_gem", path: "./my_private_gem"
    

    Consulte a referência do Gemfile para mais discussões sobre como fazer referência a caminhos de gemas locais.