1. Introdução
Neste codelab, listamos as etapas para criar uma conta de serviço e usá-la para configurar a tabela de chaves de cliente e mapa de comunicação fornecida pelo ABAP SDK for Google Cloud e invocar a API JSON do Cloud Storage no ABAP.
Os seguintes serviços do Google Cloud são usados neste codelab:
- Compute Engine
- Serviços de rede
- Cloud Shell
- API Cloud Storage JSON v1
Observação: quando você cria um projeto do Google Cloud, um conjunto específico de APIs e serviços, incluindo o Cloud Storage, é ativado automaticamente. Assim, você pode aproveitar imediatamente os benefícios dessa solução de armazenamento robusta. Portanto, não é necessário ativá-lo como uma etapa adicional.
Pré-requisitos
- Verifique se você tem acesso a um sistema SAP com o ABAP SDK for Google Cloud instalado.
- Consulte o codelab Instalar o teste da plataforma ABAP no Google Cloud Platform e instalar o SDK ABAP para configurar um novo sistema.
O que você vai criar
Você vai criar os seguintes programas no seu sistema SAP usando o SDK ABAP for Google Cloud.
- Crie um bucket do Cloud Storage.
- Leia um arquivo do servidor do aplicativo e faça o upload dele para o bucket do Cloud Storage criado.
2. Requisitos
- Um navegador, como o Chrome ou o Firefox
- Um projeto do Google Cloud com o faturamento ativado ou Crie uma conta de teste sem custo financeiro de 90 dias para o Google Cloud Platform.
- GUI do SAP (Windows ou Java) instalado no sistema. Se o SAP GUI já estiver instalado no seu laptop, conecte-se ao SAP usando o endereço IP externo da VM como o IP do servidor de aplicativos. Se você estiver usando um Mac, também poderá instalar o SAP GUI para Java disponível neste link.
3. Antes de começar
- Verifique se você tem acesso a um sistema SAP com o ABAP SDK for Google Cloud instalado.
- Consulte o codelab Instalar o teste da plataforma ABAP no Google Cloud Platform e instalar o ABAP SDK para configurar um novo sistema.
- No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud. Por exemplo:
abap-sdk-poc).
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto. Pule esta etapa se você estiver usando a conta de teste sem custo financeiro de 90 dias.
- Você vai usar 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
- É necessário ter acesso a um sistema SAP com o SDK do ABAP para Google Cloud instalado.
- É necessário concluir o codelab 1 (Instalar o teste da plataforma ABAP 1909 no Google Cloud Platform e instalar o SDK ABAP para o Google Cloud) e o codelab 2 (Configurar a autenticação do SDK ABAP usando tokens para SAP hospedado na VM do Compute Engine) antes de prosseguir com este codelab.
- Se você concluiu o codelab 1 e o codelab 2, você teria um sistema de teste da plataforma ABAP 1909 no Google Cloud, além da configuração necessária para autenticação e conectividade.
- Se você não tiver concluído os codelabs 1 e 2, não terá toda a infraestrutura e conectividade necessárias para realizar as etapas fornecidas neste codelab. Portanto, você precisa concluir o codelab 1 e o codelab 2 antes de prosseguir com este codelab.
4. Criar uma conta de serviço com o papel de usuário de objeto de armazenamento
Para criar uma conta de serviço com a função necessária, siga estas etapas:
- Execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Agora adicione os papéis necessários à conta de serviço criada na etapa acima:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'
O comando acima usa abap-sdk-poc
como marcador de posição para o projeto do Google Cloud. Substitua abap-sdk-poc
pelo ID do projeto.
- Para verificar se o papel foi adicionado, acesse a página IAM. A conta de serviço que você criou deve ser listada com a função atribuída a ela, conforme mostrado abaixo:
5. Criar configuração de chave de cliente
Agora que você configurou os pré-requisitos no Google Cloud, podemos prosseguir com a configuração no SAP.
Para a configuração relacionada à autenticação e conectividade, o SDK ABAP para Google Cloud usa a tabela /GOOG/CLIENT_KEY
.
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.
- Mantenha os seguintes valores nos campos:
Campo | Valor |
Nome da chave do Google Cloud | TEST_STORAGE |
Nome da conta de serviço do Google Cloud |
|
Escopo do Google Cloud |
|
ID do projeto | abap-sdk-poc |
Classe de autorização |
|
Deixe todos os outros campos em branco
6. Criar um relatório Z para criar um bucket no Cloud Storage
- Faça login no sistema SAP.
- Acesse o código da transação
SE38
e crie um programa de relatório com o nomeZDEMO_CREATE_BUCKET.
. - No pop-up que abrir, forneça os detalhes, conforme mostrado abaixo:
No próximo pop-up, selecione "Objeto local" ou "Forneça um nome de pacote", conforme sua escolha.
- No Editor ABAP, adicione o seguinte código:
DATA lv_json_response TYPE string.
DATA ls_input TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
TRY.
lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
" Bucket Name should be globally unique & permanent
ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).
lo_storage->insert_buckets
( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
is_input = ls_input
IMPORTING es_raw = lv_json_response
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_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket was created:'
)->next_section( 'JSON Response:'
)->write_json( lv_json_response
)->display( ).
ELSE.
DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket creation failed;'
)->next_section( 'Error:'
)->write_json( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
Se o nome do bucket não for globalmente exclusivo, ele não será criado. Portanto, use um nome exclusivo antes de executar o código.
- Salve e ative o relatório.
- Execute o relatório (pressione F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:
7. Criar um relatório Z para ler um arquivo do servidor de aplicativos e fazer upload dele para o bucket do Cloud Storage
Antes de realizar esta atividade, você precisa preparar um arquivo de texto grande. Aqui já temos um arquivo de texto grande criado e enviado para o servidor do aplicativo. Você pode usar o código de transação CG3Z para fazer upload de um arquivo para o servidor de aplicativos do sistema SAP.
Neste exemplo, usamos um arquivo de texto com cerca de 40 MB, que já foi enviado para o servidor de aplicativos no diretório /tmp
.
Também é possível fazer o download dessa pasta do GitHub usando o seguinte link: Sample File
- Faça login no seu sistema SAP
- Acesse o código de transação
SE38
e crie um programa de relatórios com o nomeZDEMO_UPLOAD_FILE.
. - No pop-up que abrir, forneça os detalhes, conforme mostrado abaixo:
No próximo pop-up, selecione "Objeto local" ou "Forneça um nome de pacote", conforme sua escolha.
- No Editor ABAP, adicione o seguinte código:
DATA lv_file_length TYPE i.
DATA lv_msg TYPE string.
DATA lv_dset TYPE string.
DATA lv_data TYPE string.
DATA ls_data TYPE xstring.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
READ DATASET dset INTO lv_dset.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
CLEAR lv_dset.
ENDDO.
CLOSE DATASET dset.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING text = lv_data
IMPORTING buffer = ls_data
EXCEPTIONS failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.
TRY.
lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).
lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).
lo_storage->insert_objects( EXPORTING iv_q_name = 'large_text_file_demo.txt'
iv_p_bucket = 'newtest_bucket_abapsdk_gcloud001'
is_data = ls_data
iv_content_type = 'text/pdf'
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_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Object was uploaded successfully'
)->write_text( 'Object Self Link:'
)->write_text( ls_output-self_link
)->display( ).
ELSE.
cl_demo_output=>new(
)->begin_section( 'Error:'
)->write_text( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDTRY.
lo_storage->close( ).
- Salve e ative o relatório.
- Execute o relatório (pressione F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:
Para verificar se o upload do arquivo foi concluído, acesse o bucket do Cloud Storage conforme mostrado abaixo.
8. Explicação sobre o upload de arquivos para o Cloud Storage usando o código do SDK do ABAP
Em essência, esse programa ABAP é integrado ao Google Cloud Storage. Ele lê um arquivo do servidor do aplicativo e transmite os dados do arquivo para o stub de cliente da API Storage para fazer upload para um bucket de armazenamento, que foi criado no programa de relatórios anterior.
O programa de relatório que você criou para fazer upload de um arquivo faz o seguinte:
Detalhes do processo
Estabelecer conexão:
- Ele estabelece uma conexão HTTP com o serviço do Google Storage usando a classe
/GOOG/CL_STORAGE_V1
.
Ler dados de arquivo
- Lê o arquivo no servidor de aplicativos fazendo um
DATASET
OPEN
e, em seguida, chama o módulo de função SAP padrãoSCMS_STRING_TO_XSTRING
para converter para o formatoXSTRING
.
Adicionar parâmetros de consulta comuns
- Para conseguir o chunking, o tipo de upload que precisamos escolher é o "Resumable". Por padrão, quando o upload retomável é selecionado, os dados do arquivo são divididos em blocos de 8 MB e enviados. No entanto, os desenvolvedores podem alterar esse tamanho de divisão definindo o parâmetro
IV_P_CHUNK_SIZE
, mas é recomendável usar a configuração padrão. - Para informar ao método da API que a opção de upload "Resumable" precisa ser escolhida, chamamos o método
ADD_COMMON_QPARAM
e transmitimosuploadType
comoresumable.
.
Inserir objetos
- Chama o método
INSERT_OBJECTS
transmitindo os seguintes parâmetros: IV_Q_NAME
: nome do arquivo em que o conteúdo será armazenado no Cloud StorageIV_P_BUCKET
: nome do bucket em que o arquivo precisa ser enviadoIS_DATA
: dados do arquivo que precisam ser enviadosIV_CONTENT_TYPE
: o tipo de conteúdo do arquivo. No nosso cenário atual, estamos usando "text/plain" porque estamos fazendo o upload de um arquivo de texto.
Não transmitimos nenhum valor para o parâmetro de importação IV_CHUNK_SIZE
e permitimos que o stub de cliente da API use o valor padrão associado a esse parâmetro, que é 8 MB.
Processar sucessos/erros:
- Mostra a resposta da API com base no sucesso ou não da chamada.
Encerrar conexão:
- Fecha a conexão HTTP com o serviço de armazenamento.
9. Parabéns
Parabéns! Você concluiu o codelab "Como fazer upload de um arquivo para um bucket do Cloud Storage".
A API JSON do Cloud Storage tem muitos recursos, e com o SDK do ABAP for Google Cloud, você pode acessá-los diretamente nos sistemas SAP de forma nativa usando ABAP.
O Google Cloud Storage é uma ótima opção para armazenar e gerenciar grandes quantidades de dados. Ele é usado por uma ampla variedade de empresas, empreendimentos e aplicativos.
Alguns dos benefícios do uso do Google Cloud Storage:
- Economia: o Google Cloud Storage é uma maneira econômica de armazenar e gerenciar grandes quantidades de dados.
- Simplicidade: o Google Cloud Storage é fácil de usar e tem uma API simples e intuitiva.
- Flexibilidade: o Google Cloud Storage pode ser usado com vários aplicativos e plataformas.
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.
- Enviar um evento para o Pub/Sub
- Receber um evento do Cloud Pub/Sub
- Usar a API Cloud Translation para traduzir textos
- Usar a API DLP para remover PIIs
- Chamar o BigQuery ML do ABAP
10. 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