Invocar funções do Cloud Run

Neste guia de início rápido, mostramos como invocar uma função que publica uma mensagem criada a partir dos argumentos que a função recebe, usando a API Cloud Run functions.

Antes de começar

Antes de executar este guia de início rápido, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

  • Verifique se a API Cloud Run functions está ativada no seu projeto do Google Cloud.

    Acessar a biblioteca de APIs

  • Dependendo do ambiente em que seu sistema SAP está hospedado, configure a autenticação para invocar as funções do Cloud Run. Para instruções, consulte Autenticação para invocar as funções do Cloud Run. Configure as chaves de cliente da seguinte maneira:

    • Para acessar o endpoint das funções do Cloud Run, crie uma chave de cliente chamada DEMO-CF.
    • Para invocar a função do Cloud Run, crie uma chave de cliente chamada DEMO-CF-INVOKER.
  • No console do Google Cloud, escreva uma função HTTP de 2a geração, cf-gen2-hello-with-args, que publique uma mensagem usando os argumentos fornecidos:

        exports.helloWorld = (req, res) => {
        let name = req.body.name || req.query.name;
        let full_name = `${req.body.firstname} ${req.body.lastname}`;
        res.status(200).send(`Hello ${name}! Full Name: ${full_name}`);
      };
    

    Para informações sobre como escrever funções HTTP, consulte Gravar as funções do Cloud Run.

Crie um programa para invocar as funções do Cloud Run

  1. No sistema SAP, crie um programa executável no namespace personalizado (por exemplo, Z ou Y) usando a transação SE38.

    1. Na GUI do SAP, insira o código da transação SE38.

    2. No campo Programa, insira um nome, por exemplo, ZDEMO_CLOUDFUNC_INVOKER.

    3. Clique em Criar.

    4. Especifique os atributos do programa:

      1. No campo Título, insira um título do programa, por exemplo, Invoke Cloud Function using Cloud Function Invoker.

      2. No campo Tipo, escolha Executable Program.

      3. Clique em Salvar.

    5. Salve o programa como um Objeto local.

    6. No Editor ABAP, adicione o seguinte código:

      **********************************************************************
      *  Copyright 2024 Google LLC                                         *
      *                                                                    *
      *  Licensed under the Apache License, Version 2.0 (the "License");   *
      *  you may not use this file except in compliance with the License.  *
      *  You may obtain a copy of the License at                           *
      *      https://www.apache.org/licenses/LICENSE-2.0                   *
      *  Unless required by applicable law or agreed to in writing,        *
      *  software distributed under the License is distributed on an       *
      *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,      *
      *  either express or implied.                                        *
      *  See the License for the specific language governing permissions   *
      *  and limitations under the License.                                *
      **********************************************************************
      REPORT zr_qs_cfinvoker.
      
      DATA(lv_cf_name)  = CONV string( 'cf-gen2-hello-with-args' ).
      DATA(lv_msg)      = CONV string( '{"firstname": "John", "lastname" : "Doe"}' ).
      
      
      TRY.
          " Create a Client API stub for Cloud Functions
          DATA(lo_cloudfunc_client) = NEW /goog/cl_cloudfunc_v2( iv_key_name   = 'DEMO_CF' ).
          " Create a Client API stub for Cloud Function Invoker.
          " Internally this uses the Cloud Function instance to fetch the cloud function HTTP endpoint
          DATA(lo_cfinvoker_client) = NEW /goog/cl_cloudfunc_invoker( iv_key_name   = 'DEMO_CF_INVOKER' ).
      
          " Send additional query parameters as inputs to the cloud function.
          lo_cfinvoker_client->add_common_qparam( iv_name  = 'name'
                                                  iv_value = 'Johnny' ).
      
          lo_cfinvoker_client->invoke(
            EXPORTING
              iv_cf_name      = lv_cf_name            "Cloud Function Name
              iv_cf_location  = 'us-central1'         "Location where the Cloud Function is hosted
              io_cf_instance  = lo_cloudfunc_client   "Instance of cloud Function Client API Stub
              iv_body         = lv_msg                "Input payload to the Cloud Function
              iv_content_type = 'application/json'
              iv_method       = 'POST'
            IMPORTING
              es_output       = DATA(lv_output)
              ev_ret_code     = DATA(lv_ret_code)
              ev_err_text     = DATA(lv_err_text)
              es_err_resp     = DATA(ls_err_resp)
          ).
      
          IF lo_cfinvoker_client->is_success( iv_code = lv_ret_code ).
            WRITE: / 'HTTP Return Code:', lv_ret_code.
            WRITE: / 'Response:', lv_output. "Output of cloud function
          ELSE.
            WRITE: / 'HTTP Return Code:', lv_ret_code.
            WRITE: / 'Error:', lv_err_text.
          ENDIF.
      
        CATCH /goog/cx_sdk INTO DATA(lo_exp).
          WRITE: / lo_exp->get_text( ).
      ENDTRY.

    Substitua:

    • DEMO_CF: nome da chave do cliente usada para acessar o endpoint da função do Cloud Run.
    • DEMO_CF_INVOKER: nome da chave de cliente usada para invocar a função do Cloud Run.
  2. Execute o aplicativo em SE38. Depois de finalizado, a saída a seguir será exibida:

     HTTP Return Code:        200
     Response: Hello Johnny! Full Name: John Doe
    

A seguir