Atualize as funções de 1.ª geração para funções do Cloud Run

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

Após a conclusão da atualização, só pode interagir com a função atualizada através da API Cloud Run Admin e das ferramentas do Cloud Run.

Limitações

Atualmente, a ferramenta de atualização só suporta a atualização de funções acionadas por HTTP e Pub/Sub.

Vista geral do processo de atualização

Segue-se uma vista geral de nível superior do processo de atualização:

Vista geral da atualização de uma função de 1.ª geração para o Cloud Run.
Figura 1. Uma vista geral dos passos pelos quais uma função de 1.ª geração é atualizada para o Cloud Run.

Os detalhes deste processo são descritos nas secções seguintes.

Vista geral do início da atualização

  • Quando inicia a atualização (através da Google Cloud CLI ou da Google Cloud consola), a ferramenta de atualização cria uma função de 2.ª geração temporária, que é uma cópia da função de 1.ª geração original. 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 que a função original de 1.ª geração.
      • Se estiver a atualizar uma função HTTP, tem o mesmo URL cloudfunctions.net que a função de 1.ª geração original e também tem um URL do run.app Cloud Run.
        • Após iniciar a atualização, a função de 1.ª geração e a função de 2.ª geração são atribuídas ao mesmo URL cloudfunctions.net. Quando envia pedidos para o URL cloudfunctions.net, o tráfego continua a ser encaminhado para a função de 1.ª geração. A função de cópia de 2.ª geração também tem um URL do Cloud Runrun.app. Os URLs de funções de 2.ª geração não recebem tráfego até redirecionar o tráfego no passo seguinte.
      • Se estiver a atualizar uma função do Pub/Sub, usa o mesmo tópico do Pub/Sub que a função de 1.ª geração, mas ainda não tem uma subscrição.
    • Tenha em atenção que, se não fixou as suas dependências a 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 a ser apresentada na Google Cloud consola de 1.ª geração e a respetiva cópia temporária de 2.ª geração aparece pela primeira vez na consola do Cloud Run.

Exemplo: esta tabela mostra o estado das funções HTTP durante o passo de atualização inicial.

Funções A apresentar tráfego? Visível na consola?
Função original de 1.ª geração Sim, a partir do URL cloudfunctions.net Sim, consola de 1.ª geração.
Nova cópia de 2.ª geração Não. Esta função tem URLs cloudfunctions.net e run.app, mas não vão publicar tráfego até ao passo de redirecionamento. Sim, na consola do Cloud Run.

Vista geral do tráfego de redirecionamento

  • Quando redireciona o tráfego, o resultado depende de a função que está a atualizar ser uma função HTTP ou uma função Pub/Sub:
    • Se estiver a atualizar uma função HTTP, o tráfego direcionado para o URL cloudfunctions.net vai para a função de 2.ª geração. A função de 1.ª geração continua a existir, mas não recebe tráfego.
    • Se estiver a atualizar uma função do Pub/Sub, o acionador de função de 2.ª geração usa o mesmo tópico do Pub/Sub, mas cria uma nova subscrição que envia uma mensagem para a função do Cloud Run. A subscrição antiga é eliminada.
  • A função de 1.ª geração desaparece da consola de 1.ª geração.
  • Se executar o comando gcloud functions describe, pode ver que o ambiente da função é agora de 2.ª geração.
  • Tenha em atenção que existem riscos durante esta fase de transição, especialmente para as funções do Pub/Sub:
    • Mensagens duplicadas: é criada uma nova subscrição antes de a antiga ser eliminada. A mesma mensagem Pub/Sub pode ser enviada para a função antiga e a nova função durante este período de transição.
    • Perda de mensagens: se estiver a atualizar uma função do Pub/Sub e a nova função não conseguir processar mensagens após o redirecionamento do tráfego, corre o risco de perder mensagens do Pub/Sub. Isto é especialmente verdade se a função tiver a repetição desativada. Consulte o artigo Atualize o Pub/Sub para ver detalhes.

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

Funções A apresentar tráfego? Visível na consola?
Função original de 1.ª geração Não. Já não é visível na consola de 1.ª geração, mas ainda existe.
Nova cópia de 2.ª geração Sim, a partir do URL cloudfunctions.net, bem como do URL do Cloud Run run.app. Sim, na consola do Cloud Run.

Vista geral do tráfego de reversão

  • Quando reverte o tráfego, a ferramenta de atualização 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á a publicar todo o tráfego. A função de 2.ª geração ainda está disponível para testes.
  • Se estiver a reverter uma função do Pub/Sub, a subscrição da função de 1.ª geração é criada novamente e a subscrição da função de 2.ª geração é eliminada.
  • Se quiser continuar com a atualização depois de reverter o tráfego, tem de redirecionar novamente o tráfego para a nova função de 2.ª geração para continuar.

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

Funções A apresentar tráfego? Visível na consola?
Função original de 1.ª geração Sim. Sim, consola de 1.ª geração.
Nova cópia de 2.ª geração Não. Já não está visível na consola do Cloud Run, mas ainda existe.

Interromper vista geral

Pode anular a atualização em qualquer altura antes de a confirmar. Depois de confirmar, a atualização torna-se irreversível.

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

Funções A apresentar tráfego? Visível na consola?
Função original de 1.ª geração Sim. Sim, consola de 1.ª geração.
Texto de 2.ª geração Não. Já não está visível na consola do Cloud Run e já não existe.

Vista geral da confirmação (irreversível)

  • A confirmação da atualização conclui o processo de atualização para a função de 1.ª geração. Esta ação é irreversível.
  • A função de 2.ª geração temporária é convertida numa função do Cloud Run completa baseada na API Admin do Cloud Run.
    • Isto é o equivalente a executar o comando detach numa função de 2.ª geração. O comando detach desassocia uma função do Cloud Functions v2 do respetivo ambiente de API existente.
    • A partir de agora, só pode interagir com a função atualizada através da API Cloud Run Admin e das ferramentas do Cloud Run.
  • A função de 1.ª geração é eliminada e todo o tráfego é servido à função do Cloud Run atualizada.

Exemplo: esta tabela mostra o estado das funções HTTP depois de confirmar a atualização:

Funções A apresentar tráfego? Visível na consola?
Nova função do Cloud Run baseada na Cloud Run Admin API. Sim, a partir do URL cloudfunctions.net, bem como do URL do Cloud Run run.app. Sim, na consola do Cloud Run.
Função original de 1.ª geração Não. Não, já não existe.
Texto de 2.ª geração Não. Não, já não existe.

Sugestões para testes

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

Recomendamos que se familiarize com a ferramenta de atualização testando-a em funções de não produção. Quando dominar o processo e estiver a ver um sucesso consistente, pode começar a atualizar as funções de produção.

Seguem-se algumas das ferramentas e técnicas que pode usar para testar as suas funções durante uma atualização:

  • Sempre que as suas funções mudarem de estado, use os comandos da CLI Google Cloud describe para verificar se a função existe e se o respetivo ambiente e versão são os esperados. Consoante o estado atual da função a ser 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 Registo nas consolas de 1.ª geração e do Cloud Run para ver os detalhes do tráfego de funções.

  • Use a consola do Cloud Run para ver e testar a cópia da função de 2.ª geração à medida que avança no processo de atualização:

    • Use o separador Acionadores para testar a cópia da função de 2.ª geração após iniciar a atualização.
    • Use o separador YAML para ver detalhes sobre a função, incluindo o URL do run.app Cloud Run.

Antes de começar

Antes de iniciar a atualização, certifique-se de que cumpre estes pré-requisitos:

  • Ativou a API Cloud Run:

    gcloud services enable run.googleapis.com
  • Tem uma função HTTP ou Pub/Sub de 1.ª geração existente.

  • Tem as funções de IAM necessárias:

    • Tem de ter roles/iam.serviceAccountUser definido na conta de serviço da função.
    • Tem de ter a função roles/cloudfunctions.admin ou uma função equivalente no projeto para fazer a atualização.
    • Para uma função do Pub/Sub com uma definição de no-retry, tem a função de roles/serviceusage.consumer ou uma função personalizada com a autorização de serviceusage.services.user.
    • Para confirmar uma atualização da função Pub/Sub, tem de ter a função roles/pubsub.admin. A função roles/pubsub.admin é uma função ao nível do projeto que concede acesso administrativo a todos os recursos do Pub/Sub num projeto.

    Pode ver as políticas de IAM da sua função da seguinte forma:

    gcloud functions get-iam-policy FUNCTION_NAME
  • Tem de ter a função roles/cloudfunctions.admin concedida na conta de serviço da função. Para conceder a função 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 receber erros quando tentar executar este comando, certifique-se de que a sua função cumpre as políticas da sua organização. Por exemplo, a sua organização pode não permitir funções HTTP não autenticadas.

Para saber mais sobre os membros e as funções, consulte o artigo Adicione responsáveis e atribua funções.

Atualize as funções HTTP

Esta secção descreve como atualizar uma função HTTP de 1.ª geração para uma função do Cloud Run. Para saber como atualizar uma função do Pub/Sub de 1.ª geração, consulte a secção posterior.

Depois de redirecionar o tráfego e confirmar a atualização, conforme descrito nas secções seguintes, o URL cloudfunctions.net associado à função HTTP de 1.ª geração original continua a funcionar e encaminha o tráfego para a nova função do Cloud Run.

Inicie a atualização da função HTTP

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

Consola

  1. Na Google Cloud consola, aceda à página Functions (1.ª geração):

    Aceda a Funções (1.ª geração)

  2. Encontre a função de 1.ª geração que quer atualizar e confirme que o respetivo estado na coluna Estado da atualização é Pronto para atualização.

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

  4. Na página de detalhes da função, clique em Atualizar em Atualização elegível.

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

Depois de concluir este passo, é apresentado o painel Atualização em curso, que lhe pede para clicar no link Aceder ao Cloud Run para continuar o processo de atualização.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --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 a atualização:

  • A função de 1.ª geração continua a publicar tráfego para o respetivo URL original. Pode ver este URL acedendo à página de detalhes da função na consola Functions (1.ª geração) e abrindo o separador Acionador.
  • É criada uma função de 2.ª geração temporária que é uma cópia da função de 1.ª geração. Tem o mesmo URL cloudfunctions.net que a função de 1.ª geração, bem como um novo URL run.app do Cloud Run. Pode ver ambos os URLs acedendo à página de detalhes da função na consola do Cloud Run e abrindo o separador YAML. Em alternativa, pode usar este comando:

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

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Pode validar o ambiente de funções de 1.ª geração, onde o resultado deve mostrar o ambiente de funções como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Resolva problemas com o passo de início da atualização

A atualização falha nas seguintes condições:

  • Já existe uma função com o mesmo nome na mesma região e projeto.
  • A função de 1.ª geração usa um tempo de execução desativado, pelo que não é elegível para atualização até a voltar a implementar com um tempo de execução suportado.
  • O autor da chamada não tem a autorização cloudfunctions.functions.generationUpgrade. Tenha em atenção que o autor da chamada precisa da função roles/cloudfunctions.admin ou de uma função equivalente no projeto.

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

Neste ponto, deve testar o URL da função original e da respetiva cópia. Certifique-se de que funcionam conforme esperado antes de continuar. Se tiver problemas, anule a atualização para regressar a um estado limpo, onde pode resolver quaisquer problemas subjacentes na função de 1.ª geração.

O passo de redirecionamento redireciona o tráfego do URL das funções do Google Cloud de 1.ª geração para a cópia da função de 2.ª geração.

Consola

  1. No painel Atualização em curso na página de detalhes das funções do Cloud Run, clique em Aceder ao Cloud Run.
  2. Clique em Função de teste para testar a função (opcional, mas vivamente recomendado).
  3. Quando estiver tudo pronto, clique em Redirecionar tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --redirect-traffic:

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Após o redirecionamento do tráfego, a cópia da função de 2.ª geração serve tráfego para o URL das funções (cloudfunctions.net) e o URL do Cloud Run (run.app).

Teste a sua função HTTP após o redirecionamento

  • Verifique o ambiente da função:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    O resultado mostra o ambiente como 2nd gen.

  • Use a ferramenta de registo da consola para comparar a cópia da função de 2.ª geração com a função original de 1.ª geração.

Resolva problemas de redirecionamento

O redirecionamento falha nestas condições:

  • Não executou o passo anterior (--setup-config).

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

Se não quiser confirmar a atualização, pode reverter o tráfego para a função de 1.ª geração.

Consola

No painel Atualização em curso na página de detalhes das funções do Cloud Run na consola do Cloud Run, clique em Reverter tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --rollback-traffic:

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Depois de reverter o tráfego:

  • A função de 1.ª geração publica tráfego para o URL cloudfunctions.net.
  • A cópia da função de 2.ª geração permanece disponível e pode acioná-la através do respetivo URL run.app.

Pode verificar o ambiente da função da seguinte forma. O resultado deve mostrar o ambiente da função como 1st gen:

gcloud functions describe --region REGION_NAME FUNCTION_NAME

A reversão falha se não tiver redirecionado o tráfego para a função de 2.ª geração.

Confirme a atualização da função HTTP

Este passo finaliza a atualização. Depois, já não pode anular o processo. Antes de realizar este passo, certifique-se de que testou exaustivamente as suas funções.

Consola

No painel Atualização em curso na página de detalhes das funções do Cloud Run na consola do Cloud Run, clique em Confirmar atualização.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

Após confirmar a atualização:

  • A função de 1.ª geração é eliminada e a cópia da função de 2.ª geração é separada para se tornar numa função do Cloud Run completa.
  • A função do Cloud Run retém o URL cloudfunctions.net, juntamente com o novo URL run.app.
  • Pode verificar que a função de 1.ª geração já não existe:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Pode validar os detalhes do serviço do Cloud Run:

    gcloud run services describe FUNCTION_NAME --format yaml
    

O resultado mostra uma nova geração criada e a etiqueta Goog-managed-by tem um valor vazio.

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

Atualize as funções do Pub/Sub

Esta secção descreve como atualizar uma função do Pub/Sub de 1.ª geração para uma função do Cloud Run.

O processo de atualização de uma função do Pub/Sub de 1.ª geração segue o mesmo padrão básico que a atualização de uma função HTTP, mas existem algumas considerações adicionais:

  • A desativação da repetição em caso de falha não é uma funcionalidade suportada no Cloud Run, mas é a predefinição na 1.ª geração. Por isso, pode ter funções de ambos os tipos. O que a ferramenta de atualização faz depende desta definição:

    • Se a sua função de 1.ª geração tiver a repetição desativada (a predefinição da 1.ª geração), a ferramenta de atualização cria um acionador do Eventarc Pub/Sub juntamente com uma fila de mensagens rejeitadas (DLQ). A ferramenta de atualização define a política de gestão de identidade e de acesso (IAM) para as subscrições e os respetivos tópicos. Quando a atualização estiver concluída, o tópico da fila de mensagens rejeitadas armazena as mensagens não entregues, que pode obter criando uma nova subscrição da fila de mensagens rejeitadas.
    • Se a sua função de 1.ª geração tiver a repetição ativada, a ferramenta de atualização cria um acionador do Eventarc Pub/Sub com as predefinições.

Inicie a atualização da função Pub/Sub

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

Consola

  1. Na Google Cloud consola, aceda à página Cloud Functions (1.ª geração):

    Aceda a Funções (1.ª geração)

  2. Encontre a função de 1.ª geração que quer atualizar e confirme que o respetivo estado na coluna Estado da atualização é Pronto para atualização.

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

  4. Na página de detalhes da função, clique em Atualizar em Atualização elegível.

Quando esta fase estiver concluída, é apresentado o painel Atualização em curso, que lhe pede para clicar no link Aceder ao Cloud Run para continuar o processo de atualização.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --setup-config:

gcloud beta functions upgrade FUNCTION_NAME --setup-config

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

Opcionalmente, especifique uma conta de serviço para o acionador:

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

Substitua CUSTOM_SA_EMAIL pelo email da sua conta de serviço personalizada.

Se a conta de serviço do acionador (conta de serviço predefinida do Compute Engine ou conta de serviço personalizada especificada) não tiver a autorização run.route.invoke, o sistema pede-lhe para associar a função roles/run.invoker.

Depois de iniciar a atualização:

  • A função de 1.ª geração continua a publicar tráfego para o respetivo URL original.
  • É criada uma cópia de 2.ª geração da sua função de 1.ª geração. Pode acioná-lo através do respetivo URL do Cloud Run.
  • A função de 1.ª geração continua a publicar tráfego para o respetivo URL.cloudfunctions.net

Teste a função do Pub/Sub após o passo de início da atualização

  • Pode verificar se a cópia de 2.ª geração da função de 1.ª geração existe:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Pode validar o ambiente de funções de 1.ª geração, onde o resultado deve mostrar o ambiente de funções como 1st gen:

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

  • Para testar a nova função, adicione-lhe um acionador do Pub/Sub e confirme que a função responde ao acionador conforme esperado:

    1. Selecione a função na consola do Cloud Run e abra o separador Acionadores.
    2. Clique em Adicionar acionador e, no painel Acionador do Eventarc, selecione um tópico para acionar a função. Por predefinição, a função é acionada quando uma mensagem é publicada no tópico.
    3. No painel Atualização em curso, clique em Função de teste.
    4. Na janela do Cloud Code para o Cloud Shell apresentada, publique uma mensagem no tópico que adicionou no separador Acionadores.
    5. Na consola do Cloud Run, aceda a Observability > Logs para confirmar que a sua função publicou a mensagem. Em alternativa, pode usar a linha de comandos no Cloud Code para o Cloud Shell para ver o resultado do registo.

    Por exemplo, suponhamos que tem uma função básica Hello World que publica uma saudação. Depois de especificar o novo acionador, pode testá-lo no Cloud Code para o Cloud Shell da seguinte forma:

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

Resolva problemas do passo de início da atualização do Pub/Sub

A atualização falha nas seguintes condições:

  • Já existe uma função do Cloud Run com o mesmo nome na mesma região e projeto.
  • Tentou atualizar uma função de 2.ª geração.
  • A função de 1.ª geração já está a passar pelo processo de atualização.
  • A função de 1.ª geração não existe.
  • A função de 1.ª geração está num estado de erro.
  • A função de 1.ª geração não é uma função HTTP nem Pub/Sub.
  • O autor da chamada não tem a autorização cloudfunctions.functions.generationUpgrade. Tenha em atenção que o autor da chamada precisa da função roles/cloudfunctions.admin ou de uma função equivalente no projeto.

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

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

Consola

  1. No painel Atualização em curso na página de detalhes das funções do Cloud Run, clique em Aceder ao Cloud Run.
  2. Clique em Função de teste para testar a função (opcional, mas vivamente recomendado).
  3. Quando estiver tudo pronto, clique em Redirecionar tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --redirect-traffic:

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Após o redirecionamento do tráfego, a função de 2.ª geração serve tráfego para o URL do Cloud Functions e o URL do Cloud Run.

Teste o Pub/Sub após o redirecionamento do tráfego

  • Pode validar o ambiente de funções:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    O resultado mostra o ambiente como 2nd gen.

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

Resolva problemas do Pub/Sub para redirecionamento

O redirecionamento falha nestas condições:

  • Não executou o passo anterior (--setup-config).
  • A função do Cloud Run foi eliminada manualmente.

Reverta o tráfego da função Pub/Sub

Este passo reverte o tráfego para a função de 1.ª geração.

Consola

No painel Atualização em curso na página de detalhes das funções do Cloud Run, clique em Reverter tráfego.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --rollback-traffic:

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Depois de reverter o tráfego:

  • A função reverte para o estado em que se encontrava imediatamente após o passo de atualização inicial.
  • A função de 1.ª geração publica tráfego para o URL cloudfunctions.net.
  • A cópia de 2.ª geração permanece disponível e pode acioná-la através do respetivo URL do Cloud Run.

  • Pode validar o ambiente de funções:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    O resultado deve 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 1.ª geração.

A reversão falha se não tiver redirecionado o tráfego para a função do Cloud Run.

Confirme a atualização da função Pub/Sub

Este passo finaliza a atualização. Depois, já não pode anular o processo. Este passo não é reversível. Antes de realizar este passo, certifique-se de que testou exaustivamente as suas funções.

Consola

No painel Atualização em curso na página de detalhes das funções do Cloud Run, clique em Confirmar atualização.

gcloud

Execute o comando gcloud beta functions upgrade com a flag --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

Após confirmar a atualização:

  • A função de 1.ª geração é eliminada.
  • A função do Cloud Run retém o URL cloudfunctions.net.
  • Pode verificar se a função já não aparece na lista:
    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Pode validar os detalhes do serviço do Cloud Run:
    gcloud run services describe FUNCTION_NAME --format yaml
    
    • O resultado mostra que foi criada uma nova geração. A etiqueta Goog-managed-by deve ter um valor vazio.
  • Se criou a função de 1.ª geração sem selecionar a opção Repetir em caso de falhas, a subscrição do Pub/Sub para o acionador tem uma fila de mensagens rejeitadas (DLQ).
  • A publicação de uma mensagem no tópico de destino aciona agora a função do Cloud Run.

A confirmação falha nas seguintes condições:

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

Anule a atualização

Esta ação cancela o processo de atualização. A cópia da função de 2.ª geração é eliminada e a função de 1.ª geração continua a publicar tráfego para o URL cloudfunctions.net original. Pode realizar esta ação em qualquer altura durante o processo de atualização antes de confirmar a atualização.

Se estiver a usar a Google Cloud consola para fazer a atualização, a IU só lhe permite anular o processo imediatamente após a operação de atualização inicial. O botão Anular encontra-se no canto superior esquerdo da consola Functions (1.ª geração). Se estiver a usar a CLI do Google Cloud, pode anular a atualização em qualquer altura antes de a confirmar. Após a confirmação, o processo torna-se irreversível.

Pode usar a Google Cloud CLI para anular uma atualização de função, mesmo que tenha usado a Google Cloud consola para realizar o processo de atualização:

gcloud beta functions upgrade FUNCTION_NAME --abort

Depois de anular a atualização:

  • A cópia da função de 2.ª geração é eliminada.
  • A função de 1.ª geração publica tráfego para o URL cloudfunctions.net.
  • Na Google Cloud consola, o estado de atualização da função muda de Configuração copiada para Pronto para atualização.
  • Pode verificar que o serviço do Cloud Run já não aparece na lista:

    gcloud run services list
  • Pode validar o ambiente de funções:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

O resultado mostra o ambiente da função como 1st gen.

A operação de anulação falha se já tiver confirmado a atualização.

Verifique as políticas de IAM convertidas

Durante o processo de atualização, a ferramenta realiza uma conversão com o melhor esforço possível das funções e das autorizações entre as Cloud Functions de 1.ª geração e as novas funções do Cloud Run.

O processo de atualização converte as funções do IAM do Cloud Functions de 1.ª geração em funções do Cloud Run equivalentes.

Regras de conversão:

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

A atualização da política de IAM falha se o autor da chamada não tiver as autorizações projects.getIamPolicy ou run.setIamPolicy. O autor da chamada precisa da função roles/cloudfunctions.admin ou de uma função equivalente no projeto.

Valide a atualização da política de IAM

Para verificar se as suas políticas de IAM estão a ser atualizadas corretamente, verifique-as em todas as fases do processo de atualização para confirmar se têm os valores esperados:

  1. Inicie o processo de atualização da sua função:

    gcloud beta functions upgrade FUNCTION_NAME --setup-config
    

    O resultado apresenta uma mensagem de aviso se forem detetadas associações de funções personalizadas.

  2. Valide se as políticas 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 associação da função de invocador das funções do Cloud Run ao 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
    

O que se segue?