1. Introdução
Neste codelab, listamos as etapas para publicar um evento na API Google Cloud Pub/Sub usando o SDK ABAP para Google Cloud.
Os seguintes serviços do Google Cloud são usados neste codelab:
- Pub/Sub
- Cloud Shell
O que você vai criar
Você vai aprender o seguinte:
- Ativar o Pub/Sub em um projeto do Google Cloud
- Crie um tópico do Pub/Sub.
- Publicar mensagens.
2. Antes de começar
- Você instalou o ABAP SDK for Google Cloud no seu sistema. Consulte o codelab Instalar o ABAP no Google Cloud Platform para configurar um novo sistema.
- Você usa o Cloud Shell, um ambiente de linha de comando executado no Google Cloud. No console do Cloud, clique em Ativar o Cloud Shell no canto superior direito:
- Execute os comandos a seguir para fazer a autenticação da sua conta e definir o projeto padrão como
abap-sdk-poc
. A zonaus-west4-b
é usada como exemplo. Se necessário, mude o projeto e a zona nos comandos a seguir de acordo com sua preferência.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
3. Visão geral
O escopo deste codelab envolve os seguintes componentes de um serviço do Pub/Sub:
- Editor (também chamado de produtor): cria mensagens e as envia (publica) para o serviço de mensagens em um tópico especificado.
- Mensagem: os dados que são transferidos pelo serviço de mensagens.
- Tópico: uma entidade nomeada que representa um feed de mensagens.
4. Configurar o serviço do Pub/Sub
- Para criar uma conta de serviço com a função necessária, execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-pubsub-tester --display-name="Service Account for PubSub"
- Para ativar a API Pub/Sub na sua conta de serviço (
abap-sdk-poc
), execute o seguinte comando no terminal do Cloud Shell:
gcloud services enable pubsub.googleapis.com
- Conceda o papel do IAM pubsub.topics.create à conta de serviço para criar um tópico. Execute o seguinte comando no terminal do Cloud Shell:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.create'
- Conceda o papel do IAM pubsub.topics.publish à conta de serviço para publicar uma mensagem no tópico. Execute o seguinte comando no terminal do Cloud Shell:
gcloud endpoints services add-iam-policy-binding pubsub.googleapis.com \ --member='serviceAccount:abap-sdk-pubusb-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/pubsub.topics.publish'
- Para verificar se os papéis foram adicionados, acesse a página IAM. A conta de serviço que você criou vai aparecer na lista com as funções que foram atribuídas a ela.
5. Configurar chave do cliente
Para manter a configuração na tabela /GOOG/CLIENT_KEY
, siga estas etapas:
- Na GUI do SAP, insira o código da transação SPRO.
- Clique em IMG de referência SAP.
- Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar chave do cliente.
- Clique em Novas entradas.
- Insira valores nos campos a seguir:
Campo | Descrição |
Nome da chave do Google Cloud | PUBSUB_DEMO |
Nome da conta de serviço do Google Cloud | abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com |
Escopo do Google Cloud | https://www.googleapis.com/auth/cloud-platform |
Identificador de projeto do Google Cloud | abap-sdk-poc |
Classe de autorização | /GOOG/CL_AUTH_GOOGLE |
Deixe os outros campos em branco
6. Criar um tópico
Você cria um tópico usando o método CREATE_TOPICS do stub de API /GOOG/CL_PUBSUB_V1. Assinatura do método:
- Na GUI do SAP, insira o código de transação SE38.
- Crie um relatório com o nome ZPUBSUB_DEMO.
- No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.
- No próximo pop-up, selecione Objeto local ou informe um nome de pacote, conforme apropriado.
- No Editor ABAP, adicione o seguinte código:
" Data Declaration
DATA:
lo_client TYPE REF TO /goog/cl_pubsub_v1.
TRY.
" Open HTTP Connection
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.
" Populate relevant parameters
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).
" Call API method pubsub.topics.create
lo_client->create_topics(
EXPORTING
iv_p_projects_id = lv_p_projects_id
iv_p_topics_id = lv_p_topics_id
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_client->is_success( lv_ret_code ) = abap_true.
DATA(lv_msg) = 'Topic ' && ':' && lv_p_topics_id && ' was created!'.
MESSAGE lv_msg TYPE 'I' .
ELSE.
MESSAGE lv_err_text TYPE 'E'.
ENDIF.
" Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lo_exception->get_text( ) TYPE 'E'.
RETURN.
ENDTRY.
- Salve e ative o relatório.
- Execute o relatório (F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:
7. Publicar a mensagem no tópico
Com o tema pronto, agora podemos nos concentrar no envio de dados. Na próxima etapa, vamos aprender a publicar mensagens sobre esse tópico. As mensagens são publicadas no tópico usando o método PUBLISH_TOPICS
do stub da API /GOOG/CL_PUBSUB_V1
.
Assinatura do método:
- Na GUI do SAP, insira o código de transação SE38.
- Crie um relatório com o nome ZPUBSUB_DEMO_PUBLISH.
- No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.
- No próximo pop-up, selecione Objeto local ou informe um nome de pacote, conforme apropriado.
- No Editor ABAP, adicione o seguinte código:
" Data Declaration
DATA:
lo_client TYPE REF TO /goog/cl_pubsub_v1,
ls_message TYPE /goog/cl_pubsub_v1=>ty_025,
ls_input TYPE /goog/cl_pubsub_v1=>ty_023.
TRY.
" Open HTTP Connection
CREATE OBJECT lo_client EXPORTING iv_key_name = 'PUBSUB_DEMO'.
" Populate relevant parameters
DATA(lv_p_projects_id) = CONV string( lo_client->gv_project_id ).
DATA(lv_p_topics_id) = CONV string( 'PUBSUB_DEMO_TOPIC' ).
ls_message-data = cl_http_utility=>encode_base64( unencoded = ' This message was published to topic' ).
APPEND ls_message TO ls_input-messages.
" Call API method : pubsub.topics.publish
" This method publishes the message(encoded in base64 format to the topic )
lo_client->publish_topics(
EXPORTING
iv_p_projects_id = lv_p_projects_id
iv_p_topics_id = lv_p_topics_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_client->is_success( lv_ret_code ) = abap_true.
DATA(lv_msg) = 'Message was published to topic ' && ': ' && lv_p_topics_id.
MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'S'.
ELSE.
MESSAGE lv_err_text TYPE 'E'.
ENDIF.
" Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lv_err_text TYPE 'E'.
RETURN.
ENDTRY.
- Salve e ative o relatório.
- Execute o relatório (F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:
8. Parabéns
Parabéns! Você publicou uma mensagem na API Pub/Sub da plataforma usando o SDK ABAP para Google Cloud.
Agora você pode prosseguir com o codelab abaixo para continuar sua jornada de aprendizado sobre como usar o SDK ABAP para acessar vários serviços do Google Cloud.
- Receber um evento do Cloud Pub/Sub
- Fazer upload de um arquivo para um bucket do Cloud Storage com divisão em blocos
- Chamar o test-bison da Vertex AI no ABAP
- . . .
9. Limpar
Se você não quiser continuar com os outros codelabs relacionados ao SDK ABAP para Google Cloud, prossiga com a limpeza.
Excluir o projeto
- Exclua o projeto do Google Cloud:
gcloud projects delete abap-sdk-poc
Excluir recursos individuais
- Exclua a instância de computação:
gcloud compute instances delete abap-trial-docker
- Exclua as regras de firewall:
gcloud compute firewall-rules delete sapmachine
- Exclua a conta de serviço:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com