Fazer upgrade das funções da 1ª geração para as funções do Cloud Run

Este guia descreve como fazer upgrade das funções HTTP e Pub/Sub de primeira geração para funções do Cloud Run, executadas no Cloud Run. Este guia se aplica apenas às funções de primeira geração criadas com a API Cloud Functions v1. As instruções deste guia não se aplicam a funções de 2ª geração criadas com a API Cloud Functions v2 ou o Cloud Functions para Firebase, que é um produto separado.

Depois que o upgrade for concluído, você só poderá interagir com a função atualizada usando a API Cloud Run Admin e as ferramentas do Cloud Run.

Limitações

No momento, a ferramenta de upgrade só é compatível com funções acionadas por HTTP e Pub/Sub.

Visão geral do processo de upgrade

Confira uma visão geral de alto nível do processo de upgrade:

Visão geral da atualização de uma função da 1ª geração para o Cloud Run.
Figura 1. Uma visão geral das etapas de upgrade de uma função de 1ª geração para o Cloud Run.

Os detalhes desse processo são descritos nas seções a seguir.

Visão geral do Start Upgrade

  • Ao iniciar o upgrade (usando a Google Cloud CLI ou o console Google Cloud ), a ferramenta de upgrade cria uma função temporária de 2ª geração que é uma cópia da função original de 1ª geração. Esta função de 2ª geração:
    • Atua como uma ponte entre a função original de 1ª geração e a função final totalmente atualizada.
    • Tem o mesmo nome, código e configuração da função original de 1ª geração.
      • Se estiver fazendo upgrade de uma função HTTP, terá o mesmo URL cloudfunctions.net da função original de 1ª geração e também um URL run.app do Cloud Run.
        • Depois de iniciar o upgrade, sua função de 1ª geração e a cópia da função de 2ª geração serão atribuídas ao mesmo URL cloudfunctions.net. Ao enviar solicitações para o URL cloudfunctions.net, o tráfego continua sendo roteado para a função da 1ª geração. A cópia da função de 2ª geração também tem um URL do Cloud Runrun.app. Os URLs de função da 2ª geração não vão receber tráfego até que você o redirecione na próxima etapa.
      • Se você estiver fazendo upgrade de uma função do Pub/Sub, use o mesmo tópico do Pub/Sub que a função de primeira geração, mas ainda não tenha uma assinatura.
    • Se você não fixou as dependências em uma versão específica, a cópia da função de 2ª geração recém-criada pode usar uma versão de dependência mais recente.
  • A função de 1ª geração continua listada no Google Cloud console de 1ª geração, e a cópia temporária de 2ª geração aparece pela primeira vez no console do Cloud Run.

Exemplo: esta tabela mostra o estado das funções HTTP durante a etapa inicial de upgrade.

Funções Veiculação de tráfego? Visível no console?
Função original da 1ª geração Sim, do URL cloudfunctions.net Sim, console de 1ª geração.
Novo texto da 2ª geração Não. Essa função tem URLs cloudfunctions.net e run.app, mas eles não vão veicular tráfego até a etapa de redirecionamento. Sim, o console do Cloud Run.

Visão geral do redirecionamento de tráfego

  • Quando você redireciona o tráfego, o resultado depende de se a função que você está atualizando é uma função HTTP ou do Pub/Sub:
    • Se você estiver fazendo upgrade de uma função HTTP, o tráfego direcionado ao URL cloudfunctions.net será direcionado à função de 2ª geração. A função de primeira geração continua existindo, mas não recebe tráfego.
    • Se você estiver fazendo upgrade de uma função do Pub/Sub, o gatilho de função da 2ª geração usará o mesmo tópico do Pub/Sub, mas vai criar uma nova assinatura que envia uma mensagem para a função do Cloud Run. A assinatura antiga é excluída.
  • A função de 1ª geração desaparece do console de 1ª geração.
  • Se você executar o comando gcloud functions describe, vai notar que o ambiente da função agora é de 2ª geração.
  • Há riscos durante essa fase de transição, especialmente para funções do Pub/Sub:
    • Mensagens duplicadas: uma nova assinatura é criada antes que a antiga seja excluída. A mesma mensagem do Pub/Sub pode ser enviada para a função antiga e a nova durante esse período de transição.
    • Perda de mensagens: se você estiver fazendo upgrade de uma função do Pub/Sub e a nova função não processar as mensagens depois que o tráfego for redirecionado, você corre o risco de perder mensagens do Pub/Sub. Isso é ainda mais verdadeiro se a função tiver a repetição desativada. Consulte Fazer upgrade do Pub/Sub para mais detalhes.

Exemplo: esta tabela mostra o estado das funções HTTP durante a etapa de redirecionamento de tráfego.

Funções Veiculação de tráfego? Visível no console?
Função original da 1ª geração Não. Não é mais visível no console de 1ª geração, mas ainda existe.
Novo texto da 2ª geração Sim, do URL cloudfunctions.net e do URL run.app do Cloud Run. Sim, o console do Cloud Run.

Visão geral da reversão de tráfego

  • Quando você reverter o tráfego, a ferramenta de upgrade reverte todo o tráfego da cópia da função de 2ª geração para a função original de 1ª geração, que agora está veiculando todo o tráfego. A função de segunda geração ainda está disponível para teste.
  • Se você estiver fazendo o rollback de uma função do Pub/Sub, a assinatura da função de 1ª geração será criada novamente, e a assinatura da função de 2ª geração será excluída.
  • Se quiser continuar com o upgrade depois de reverter o tráfego, primeiro redirecione o tráfego novamente para a nova função de 2ª geração.

Exemplo: esta tabela mostra o estado das funções HTTP se você reverter o tráfego.

Funções Veiculação de tráfego? Visível no console?
Função original da 1ª geração Sim. Sim, console de 1ª geração.
Novo texto da 2ª geração Não. Não está mais visível no console do Cloud Run, mas ainda existe.

Visão geral de cancelamento

Você pode cancelar o upgrade a qualquer momento antes de confirmar. Depois de confirmar, o upgrade se torna irreversível.

Exemplo: esta tabela mostra o estado das funções HTTP se você cancelar a atualização.

Funções Veiculação de tráfego? Visível no console?
Função original da 1ª geração Sim. Sim, console de 1ª geração.
Cópia da 2ª geração Não. Não aparece mais no console do Cloud Run e não existe mais.

Visão geral do commit (irreversível)

  • Ao confirmar o upgrade, o processo é concluído para a função de 1ª geração. Essa ação é irreversível.
  • A função temporária de segunda geração é convertida em uma função completa do Cloud Run com base na API Cloud Run Admin.
    • Isso é equivalente a executar o comando detach em uma função de 2ª geração. O comando detach desvincula uma função do Cloud Functions v2 do ambiente de API atual.
    • Daqui em diante, você só poderá interagir com a função atualizada usando a API Cloud Run Admin e as ferramentas do Cloud Run.
  • A função de 1ª geração é excluída, e todo o tráfego é veiculado para a função atualizada do Cloud Run.

Exemplo: esta tabela mostra o estado das funções HTTP depois que você confirma o upgrade:

Funções Veiculação de tráfego? Visível no console?
Nova função do Cloud Run baseada na API Cloud Run Admin. Sim, do URL cloudfunctions.net e do URL run.app do Cloud Run. Sim, o console do Cloud Run.
Função original da 1ª geração Não. Não, não existe mais.
Cópia da 2ª geração Não. Não, não existe mais.

Dicas de teste

Os testes são uma parte essencial do processo de upgrade.

Recomendamos que você se familiarize com a ferramenta de upgrade testando-a em funções que não são de produção. Depois de dominar o processo e ter sucesso consistente, você pode começar a fazer upgrade das funções de produção.

Confira algumas ferramentas e técnicas que você pode usar para testar suas funções durante um upgrade:

  • Sempre que as funções mudarem de estado, use os comandos describe da Google Cloud CLI para verificar se a função existe e se o ambiente e a versão estão como esperado. Dependendo do estado atual da função que está sendo atualizada, use uma das seguintes opções:

    • Cloud Run:

      gcloud run services describe FUNCTION_NAME --format yaml
      
    • Cloud Functions:

      gcloud functions describe --region REGION_NAME FUNCTION_NAME
      
  • Use a página "Logging" nos consoles da 1ª geração e do Cloud Run para conferir os detalhes do tráfego de funções.

  • Use o console do Cloud Run para ver e testar a cópia da função de segunda geração à medida que ela avança no processo de upgrade:

    • Use a guia Gatilhos para testar a cópia da função de 2ª geração depois de iniciar o upgrade.
    • Use a guia YAML para ver detalhes sobre a função, incluindo o URL run.app do Cloud Run.

Antes de começar

Antes de iniciar o upgrade, verifique se você atende a estes pré-requisitos:

  • Você ativou a API Cloud Run:

    gcloud services enable run.googleapis.com
  • Você tem uma função HTTP ou Pub/Sub de primeira geração.

  • Você tem os papéis necessários do IAM:

    • Você precisa ter roles/iam.serviceAccountUser definido na conta de serviço da função.
    • Você precisa ter o papel roles/cloudfunctions.admin ou um papel equivalente no projeto para fazer o upgrade.
    • Para uma função do Pub/Sub com uma configuração no-retry, você tem o papel roles/serviceusage.consumer ou um papel personalizado com a permissão serviceusage.services.user.
    • Para confirmar um upgrade de função do Pub/Sub, é necessário ter o papel roles/pubsub.admin. O papel roles/pubsub.admin é um papel no nível do projeto que concede acesso administrativo a todos os recursos do Pub/Sub em um projeto.

    É possível conferir as políticas do IAM da função da seguinte maneira:

    gcloud functions get-iam-policy FUNCTION_NAME
  • É preciso ter a permissão roles/cloudfunctions.admin concedida na conta de serviço da função. Para conceder o papel roles/cloudfunctions.admin, use o comando gcloud functions add-iam-policy-binding. Por exemplo:

    gcloud functions add-iam-policy-binding FUNCTION_NAME \
       --region=REGION \
       --member=serviceAccount:SERVICE_ACCOUNT \
       --role="roles/cloudfunctions.admin"
    

    Se você receber erros ao tentar executar esse comando, verifique se a função obedece às políticas da sua organização. Por exemplo, sua organização pode não permitir funções HTTP não autenticadas.

Para saber mais sobre membros e papéis, consulte Adicionar principais e conceder papéis.

Fazer upgrade de funções HTTP

Nesta seção, descrevemos como fazer upgrade de uma função HTTP de primeira geração para uma função do Cloud Run. Para saber como fazer upgrade de uma função do Pub/Sub de 1ª geração, consulte a seção mais adiante.

Depois de redirecionar o tráfego e confirmar o upgrade, conforme descrito nas seções a seguir, a URL cloudfunctions.net associada à função HTTP original da 1ª geração vai continuar funcionando e vai rotear o tráfego para a nova função do Cloud Run.

Iniciar upgrade da função HTTP

Esta etapa cria uma cópia de 2ª geração da sua função de 1ª geração.

Console

  1. No console Google Cloud , acesse a página "Functions (1ª geração)":

    Acessar "Functions (1ª geração)"

  2. Encontre a função de 1ª geração que você quer fazer upgrade e confirme se o status na coluna Status do upgrade é Pronto para upgrade.

  3. Clique no nome da função para mostrar a página de detalhes.

  4. Na página de detalhes da função, clique em Fazer upgrade em Qualificado para upgrade.

  5. Siga as instruções para iniciar o processo de upgrade.

Depois de concluir essa etapa, o painel Upgrade em andamento vai aparecer, pedindo que você clique no link Acessar o Cloud Run para continuar o processo de upgrade.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --setup-config.

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Substitua FUNCTION_NAME pelo nome da sua função de 1ª geração.

Depois de iniciar o upgrade:

  • A função da 1ª geração continua veiculando o tráfego para o URL original. Para conferir esse URL, acesse a página de detalhes da função no console do Functions (1ª geração) e abra a guia Gatilho.
  • Uma função temporária de 2ª geração, que é uma cópia da função de 1ª geração, é criada. Ele tem o mesmo URL cloudfunctions.net da função de primeira geração, além de um novo URL run.app do Cloud Run. Para conferir os dois URLs, acesse a página de detalhes da função no console do Cloud Run e abra a guia YAML. Como alternativa, use este comando:

    gcloud run services describe YOUR_SERVICE_NAME \
        --region YOUR_REGION \
        --format="value(status.url)"
  • Para verificar se a cópia de 2ª geração da sua função de 1ª geração existe, faça o seguinte:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Você pode verificar o ambiente da função de 1ª geração, em que a saída deve mostrar o ambiente da função como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Resolver problemas da etapa de início do upgrade

O upgrade falha nestas condições:

  • Já existe uma função com o mesmo nome na mesma região e projeto.
  • A função da 1ª geração usa um ambiente de execução desativado e, portanto, não está qualificada para upgrade até que você a implante novamente com um ambiente de execução compatível.
  • O autor da chamada não tem a permissão cloudfunctions.functions.generationUpgrade. O autor da chamada precisa ter o papel roles/cloudfunctions.admin ou equivalente no projeto.

Redirecionar o tráfego para a função HTTP

Neste ponto, teste o URL da função original e da cópia. Confira se eles funcionam como esperado antes de continuar. Se você encontrar problemas, interrompa o upgrade para retornar a um estado limpo, em que é possível resolver problemas subjacentes na função de 1ª geração.

A etapa de redirecionamento redireciona o tráfego do URL do Cloud Functions de 1ª geração para a cópia da função de 2ª geração.

Console

  1. No painel Upgrade em andamento da página de detalhes das funções do Cloud Run, clique em Acessar o Cloud Run.
  2. Clique em Testar função para testar a função (opcional, mas altamente recomendado).
  3. Quando estiver tudo pronto, clique em Redirecionar tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --redirect-traffic.

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Depois de redirecionar o tráfego, a cópia da função de segunda geração veicula tráfego para o URL de funções (cloudfunctions.net) e o URL do Cloud Run (run.app).

Testar a função HTTP após o redirecionamento

  • Verifique o ambiente da função:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    A saída mostra o ambiente como 2nd gen.

  • Use a ferramenta de geração de registros do console para comparar sua cópia da função de 2ª geração com a função original de 1ª geração.

Resolver problemas de redirecionamento

O redirecionamento falha nestas condições:

  • Você não executou a etapa anterior (--setup-config).

Reverter o tráfego para a função HTTP

Se você não estiver pronto para confirmar o upgrade, poderá reverter o tráfego para a função da 1ª geração.

Console

No painel Upgrade em andamento da página de detalhes das funções do Cloud Run no console do Cloud Run, clique em Reverter tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --rollback-traffic.

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Depois de reverter o tráfego:

  • A função da 1ª geração veicula tráfego para o URL cloudfunctions.net.
  • A cópia da função de 2ª geração permanece disponível, e você pode acionar usando o URL run.app dela.

É possível verificar o ambiente da função da seguinte maneira: A saída precisa mostrar o ambiente de função como 1st gen:

gcloud functions describe --region REGION_NAME FUNCTION_NAME

A reversão falha se você não redirecionou o tráfego para a função de 2ª geração.

Confirmar o upgrade da função HTTP

Essa etapa finaliza o upgrade, e não é mais possível cancelar o processo. Antes de realizar esta etapa, verifique se você testou completamente suas funções.

Console

No painel Upgrade em andamento na página de detalhes das funções do Cloud Run no console do Cloud Run, clique em Confirmar upgrade.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --commit.

gcloud beta functions upgrade FUNCTION_NAME --commit

Depois de confirmar o upgrade:

  • A função de 1ª geração é excluída, e a cópia da função de 2ª geração é desvinculada para se tornar uma função completa do Cloud Run.
  • A função do Cloud Run retém o URL cloudfunctions.net junto com o novo URL run.app.
  • É possível verificar se a função da primeira geração não existe mais:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • É possível verificar os detalhes do serviço do Cloud Run:

    gcloud run services describe FUNCTION_NAME --format yaml
    

A saída mostra uma nova geração criada, e o rótulo Goog-managed-by tem um valor vazio.

A confirmação falha quando o tráfego não é redirecionado para a função do Cloud Run.

Fazer upgrade das funções do Pub/Sub

Nesta seção, descrevemos como fazer upgrade de uma função do Pub/Sub de primeira geração para uma função do Cloud Run.

O processo de upgrade de uma função Pub/Sub de 1ª geração segue o mesmo padrão básico de uma função HTTP, mas há algumas considerações adicionais:

  • Desativar a repetição em caso de falha não é um recurso compatível com o Cloud Run, mas é a configuração padrão na 1ª geração. Portanto, você pode ter funções dos dois tipos. O que a ferramenta de upgrade faz depende desta configuração:

    • Se a função de 1ª geração tiver novas tentativas desativadas (a configuração padrão da 1ª geração), a ferramenta de upgrade vai criar um gatilho do Pub/Sub do Eventarc junto com uma fila de mensagens não entregues (DLQ, na sigla em inglês). A ferramenta de upgrade define a política do Identity and Access Management (IAM) para assinaturas e respectivos tópicos. Quando o upgrade for concluído, o tópico da fila de mensagens inativas vai armazenar as mensagens não entregues, que podem ser recuperadas criando uma nova assinatura para a fila.
    • Se a função de 1ª geração tiver novas tentativas ativadas, a ferramenta de upgrade vai criar um gatilho do Eventarc Pub/Sub com configurações padrão.

Iniciar o upgrade da função do Pub/Sub

Esta etapa cria uma cópia de 2ª geração da sua função de 1ª geração.

Console

  1. No console Google Cloud , acesse a página do Cloud Functions (1ª geração):

    Acessar "Functions (1ª geração)"

  2. Encontre a função de 1ª geração que você quer fazer upgrade e confirme se o status na coluna Status do upgrade é Pronto para upgrade.

  3. Clique no nome da função para mostrar a página de detalhes.

  4. Na página de detalhes da função, clique em Fazer upgrade em Qualificado para upgrade.

Quando essa fase for concluída, o painel Upgrade em andamento vai aparecer, pedindo que você clique no link Acessar o Cloud Run para continuar o processo de upgrade.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --setup-config.

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Substitua FUNCTION_NAME pelo nome da sua função de 1ª geração.

Se quiser, especifique uma conta de serviço para o gatilho:

gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL

Substitua CUSTOM_SA_EMAIL pelo e-mail da sua conta de serviço personalizada.

Se a conta de serviço de acionamento (conta de serviço padrão do Compute Engine ou conta de serviço personalizada especificada) não tiver a permissão run.route.invoke, o sistema vai pedir que você vincule o papel roles/run.invoker.

Depois de iniciar o upgrade:

  • A função da 1ª geração continua veiculando o tráfego para o URL original.
  • Uma cópia de 2ª geração da sua função de 1ª geração é criada. É possível acioná-lo usando o URL do Cloud Run.
  • A função da 1ª geração continua veiculando tráfego para o URL cloudfunctions.net dela.

Teste a função do Pub/Sub após a etapa de início do upgrade

  • Para verificar se a cópia de 2ª geração da sua função de 1ª geração existe, faça o seguinte:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Você pode verificar o ambiente da função de 1ª geração, em que a saída deve mostrar o ambiente da função como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Publique uma mensagem no tópico de destino para acionar a função de 1ª geração.

  • Para testar a nova função, adicione um gatilho do Pub/Sub a ela e confirme se a função responde ao gatilho conforme esperado:

    1. Selecione a função no console do Cloud Run e abra a guia Gatilhos.
    2. Clique em Adicionar gatilho e, no painel Gatilho do Eventarc, selecione um tópico para acionar a função. Por padrão, a função é acionada quando uma mensagem é publicada no tópico.
    3. No painel Upgrade em andamento, clique em Testar função.
    4. Na janela do Cloud Code para Cloud Shell que será aberta, publique uma mensagem no tópico que você adicionou na guia Gatilhos.
    5. No console do Cloud Run, acesse Observabilidade > Registros para confirmar se a função publicou a mensagem. Como alternativa, use a linha de comando no Cloud Code para Cloud Shell e veja a saída de geração de registros.

    Por exemplo, suponha que você tenha uma função básica "Hello World" que publique uma saudação. Depois de especificar o novo gatilho, é possível testá-lo no Cloud Code para Cloud Shell da seguinte maneira:

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME
    gcloud functions logs read --region YOUR_REGION --limit 50
    

Resolver problemas da etapa de início do upgrade do Pub/Sub

O upgrade falha nestas condições:

  • Já existe uma função do Cloud Run com o mesmo nome na mesma região e projeto.
  • Você tentou fazer upgrade de uma função de segunda geração.
  • A função de 1ª geração já está passando pelo processo de upgrade.
  • A função de primeira geração não existe.
  • A função de 1ª geração está em um estado de erro.
  • A função de primeira geração não é HTTP nem Pub/Sub.
  • O autor da chamada não tem a permissão cloudfunctions.functions.generationUpgrade. O autor da chamada precisa ter o papel roles/cloudfunctions.admin ou equivalente no projeto.

Redirecionar o tráfego para a função do Pub/Sub

Esta etapa redireciona o tráfego do URL do Cloud Functions de 1ª geração para a cópia da função de 2ª geração.

Console

  1. No painel Upgrade em andamento da página de detalhes das funções do Cloud Run, clique em Acessar o Cloud Run.
  2. Clique em Testar função para testar a função (opcional, mas altamente recomendado).
  3. Quando estiver tudo pronto, clique em Redirecionar tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --redirect-traffic.

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Depois de redirecionar o tráfego, a função de 2ª geração vai atender o tráfego para o URL do Cloud Functions e o URL do Cloud Run.

Testar o Pub/Sub depois de redirecionar o tráfego

  • É possível verificar o ambiente da função:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    A saída mostra o ambiente como 2nd gen.

    • O eventTrigger.retryPolicy corresponde à política de nova tentativa especificada durante a criação da função.
    • O eventTrigger.serviceAccountEmail é a conta de serviço padrão do Compute Engine ou a conta de serviço personalizada especificada.
    • Publicar uma mensagem no tópico de destino agora aciona a cópia da função de 2ª geração.

Solução de problemas do Pub/Sub para redirecionamento

O redirecionamento falha nestas condições:

  • Você não executou a etapa anterior (--setup-config).
  • A função do Cloud Run foi excluída manualmente.

Reverter o tráfego da função do Pub/Sub

Esta etapa reverte o tráfego para a função de 1ª geração.

Console

No painel Upgrade em andamento da página de detalhes do Cloud Run functions, clique em Reverter tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --rollback-traffic.

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Depois de reverter o tráfego:

  • A função volta ao estado em que estava imediatamente após a etapa inicial de upgrade.
  • A função da 1ª geração veicula tráfego para o URL cloudfunctions.net.
  • A cópia de 2ª geração continua disponível, e você pode acioná-la usando o URL do Cloud Run.

  • É possível verificar o ambiente da função:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    A saída vai mostrar o ambiente da função como 1st gen.

  • A publicação de uma mensagem no tópico de destino aciona a função de primeira geração.

A reversão falha se você não redirecionou o tráfego para a função do Cloud Run.

Confirmar o upgrade da função do Pub/Sub

Essa etapa finaliza o upgrade, e não é mais possível cancelar o processo. Essa etapa não pode ser revertida. Antes de realizar esta etapa, verifique se você testou completamente suas funções.

Console

No painel Upgrade em andamento da página de detalhes do Cloud Run functions, clique em Confirmar upgrade.

gcloud

Execute o comando gcloud beta functions upgrade com a sinalização --commit.

gcloud beta functions upgrade FUNCTION_NAME --commit

Depois de confirmar o upgrade:

  • A função de primeira geração é excluída.
  • A função do Cloud Run retém o URL cloudfunctions.net.
  • Para verificar se a função não aparece mais na lista:
    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • É possível verificar os detalhes do serviço do Cloud Run:
    gcloud run services describe FUNCTION_NAME --format yaml
    
    • A saída mostra que uma nova geração foi criada. O rótulo Goog-managed-by precisa ter um valor vazio.
  • Se você criou a função de 1ª geração sem marcar a opção Tentar de novo em caso de falha, a assinatura do Pub/Sub para o gatilho terá uma fila de mensagens não entregues (DLQ, na sigla em inglês).
  • Publicar uma mensagem no tópico de destino agora aciona a função do Cloud Run.

O commit falha nestas condições:

  • O tráfego não foi redirecionado para a função do Cloud Run.
  • A função do Cloud Run foi excluída manualmente.

Cancelar o upgrade

Essa ação cancela o processo de upgrade. A nova cópia da função de 2ª geração é excluída, e a função de 1ª geração continua veiculando o tráfego para o URL cloudfunctions.net original. É possível realizar essa ação a qualquer momento durante o processo de upgrade antes de confirmar o upgrade.

Se você estiver usando o console Google Cloud para fazer o upgrade, a UI só permitirá interromper o processo imediatamente após a operação inicial de upgrade. O botão Abortar fica no canto superior esquerdo do console do Functions (1ª geração). Se você estiver usando a Google Cloud CLI, poderá abortar o upgrade a qualquer momento antes de confirmar a ação. Depois disso, o processo se torna irreversível.

É possível usar a Google Cloud CLI para cancelar um upgrade de função mesmo que você tenha usado o console Google Cloud para realizar o processo de upgrade:

gcloud beta functions upgrade FUNCTION_NAME --abort

Depois de cancelar o upgrade:

  • A cópia da função de 2ª geração é excluída.
  • A função da 1ª geração veicula tráfego para o URL cloudfunctions.net.
  • No console doGoogle Cloud , o status de upgrade da função muda de Configuração copiada para Pronto para upgrade.
  • Verifique se o serviço do Cloud Run não aparece mais na lista:

    gcloud run services list
  • É possível verificar o ambiente da função:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

A saída mostra o ambiente de função como 1st gen.

A operação de cancelamento falha se você já tiver confirmado o upgrade.

Verificar as políticas do IAM convertidas

Durante o processo de upgrade, a ferramenta faz uma conversão de melhor esforço de funções e permissões entre o Cloud Functions de 1ª geração e o novo Cloud Run functions.

O processo de upgrade converte papéis do IAM do Cloud Functions da 1ª geração em papéis equivalentes do Cloud Run.

Regras de conversão:

  • roles/cloudfunctions.invoker é convertido em roles/run.invoker.
  • roles/cloudfunctions.developer é convertido em roles/run.sourceDeveloper.
  • roles/cloudfunctions.viewer é convertido em roles/run.sourceViewer.
  • roles/cloudfunctions.admin é convertido em roles/run.admin e roles/run.sourceDeveloper.

A atualização da política do IAM falha se o autor da chamada não tiver permissões de projects.getIamPolicy ou run.setIamPolicy. O autor da chamada precisa ter o papel roles/cloudfunctions.admin ou um papel equivalente no projeto.

Verificar o upgrade da política do IAM

Para verificar se as políticas do IAM estão sendo atualizadas corretamente, confira-as em todas as etapas do processo de upgrade para confirmar se elas têm os valores esperados:

  1. Inicie o processo de upgrade da função:

    gcloud beta functions upgrade FUNCTION_NAME --setup-config
    

    A saída mostra uma mensagem de aviso se vinculações de função personalizadas forem detectadas.

  2. Valide se as políticas de IAM definidas na função de 1ª geração foram convertidas e atualizadas para a função do Cloud Run:

    gcloud functions get-iam-policy FUNCTION_NAME
    gcloud run services get-iam-policy FUNCTION_NAME
    
  3. Valide se a vinculação de função de invocador do Cloud Run functions no nível do projeto foi convertida e atualizada para a função do Cloud Run:

    gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker"
    gcloud run services get-iam-policy FUNCTION_NAME
    

A seguir