O blog da AWS

SAP CAR na AWS — Uma abordagem sem servidor para a ingestão de dados de PDV

Por César Páez Román, Senior SAP Migrations SA, Latam

 

O setor de varejo enfrenta cada vez mais cenários desafiadores para manter uma experiência de cliente boa e agradável. O (CAR) da SAP busca resolver esse problema coletando, limpando e centralizando todos os dados relacionados aos clientes presentes em ambientes omnichannel, em tempo real, e disponibilizando-os para aplicativos de terceiros.

No entanto, carregar dados e obter informações úteis para o gerenciamento operacional do negócio é uma tarefa complexa.

Neste blog, mostraremos um exemplo de como integrar o SAP CAR com a plataforma da AWS e, assim, se beneficiar da profundidade e amplitude de nossos serviços.

Em seguida, vamos configurar um cenário para consumir dados do SAP CAR com o AWS Lambda, AWS Serverless Computing, que permite escalar para milhões de transações, sem se preocupar com o provisionamento da infraestrutura.

Visão geral da solução

A seguir está o diagrama de arquitetura definido para a solução. Usamos o AWS Lambda e uma camada do Lambda contendo o driver PyrFC para estabelecer conectividade com o AS ABAP onde o SAP CAR está instalado.

Além disso, usaremos o IoT Device Simulator para gerar dados de teste, criando um ponto de venda virtual. As informações geradas são recebidas por um tópico do AWS IoT Core MQTT, que ativará nossa função Lambda sempre que uma nova mensagem chegar.

A função lambda se conectará ao SAP CAR e executará a ingestão usando a BAPI “/POSDW/CREATE_TRANSACTIONS_EXT”.

 

 

Pré-requisitos

Para este tutorial, os seguintes requisitos devem ser atendidos:

Tutorial

Neste blog, orientaremos você na configuração das funções do IoT Simulator e do Lambda para publicar transações no SAP CAR.

  1. Configure o dispositivo IoT Simulator com o tipo de dispositivo POS.
  2. Crie uma camada do Lambda com PyrFC e uma função Lambda.
  3. Configure as regras do IoT Core para enviar mensagens para a função Lambda.

1.- Configure o simulador de dispositivos IoT:

  1. Faça login no console do IoT Device Simulator e clique em tipo de dispositivo.
  2. Clique em adicionar tipo de dispositivo.
  3. Preencha os campos obrigatórios de acordo com a imagem a seguir

 

 

 

  1. Adicione os atributos a seguir e clique em Salvar.

 

Para os atributos Loja e Data, use os seguintes valores padrão: R100 e 20200602 (ou qualquer data no formato AAAAMMDD).

 

5. Repita as etapas de 1 a 4 alterando o Nome da loja e o Padrão. Para este exemplo, vamos usar lojas (R100, R200, R250 e R300).

6. Depois de criar o número de dispositivos que você deseja, vá para a seção Widgets na barra de menu à esquerda e, em seguida, Adicionar Widget.

7. No Tipo de dispositivo, selecione um dos criados nas etapas anteriores e o número de widgets que você deseja criar:

 

8. Você verá o novo dispositivo criado. Agora pressione start para executar a simulação:

 

A simulação começará a enviar dados para o tópico configurado:

 

2.- Crie uma camada do Lambda com a função PyRFC e também a função Lambda.

 

  1. Faça o download do SAP NW RFC SDK 7.50 no SAP Marketplace (versão para LINUX ON X86_64 64 BIT). Descompacte em uma rota local, ele será usado nas próximas etapas.
  2. Nesse caso, usaremos um ambiente do AWS Cloud9 baseado no Amazon Linux 2 para gerar a camada do Lambda. Um guia passo a passo sobre como executar ambientes Cloud9 pode ser encontrado no seguinte link: https://docs.thinkwithwp.com/cloud9/latest/user-guide/create-environment-main.html
  3. No ambiente do Cloud9, selecione Window->New Terminal e execute os seguintes comandos shell para criar o ambiente Python e instalar as dependências necessárias:

 

sudo yum install -y amazon-linux-extras
sudo amazon-linux-extras enable python3.8
sudo yum install python3.8 -y
virtualenv -p /usr/bin/python3.8 PyRFC_Layer
source PyRFC_Layer/bin/activate
cd PyRFC_Layer
mkdir python
cd python
pip3 install https://github.com/SAP/PyRFC/releases/download/2.1.0/pynwrfc-2.1.0-cp38-cp38-linux_x86_64.whl -t .
cp /usr/lib64/libuuid.so.1 /home/ec2-user/environment/PyRFC_Layer/lib
Python

 

4. Copie todos os arquivos do caminho lib/ da etapa 1 para Pyrfc_layer/lib/ na Cloud9 (arrastar e soltar):

  1. Novamente, abra o console como fizemos na etapa 3 e execute os seguintes comandos, substituindo-os pelo bucket do S3 onde a camada Lambda será armazenada.
cd /home/ec2-user/environment/PyRFC_Layer

zip -r9 pyrfc_layer.zip python lib

aws s3 cp pyrfc_layer.zip s3://<bucket>/pyrfc_layer.zi

6. No console da AWS, abra o serviço Lambda e selecione Recursos adicionais-> Camadas->Criar camada.

7. Digite o nome e o caminho do bucket do S3 listado acima (modificando) e escolha ambiente de execução compatível com Python 3.8:

 

8.Dentro do Lambda, crie a função que terá a lógica para se conectar ao SAP CAR (tempo de execução do Python 3.8):

 

 

9. Selecione a VPC e a sub-rede onde a instância do SAP CAR está localizada, selecione também um Security Group com acesso às portas 33 (número do sistema ABAP):

 

10. Depois de criar a função, selecione a camada criada nas etapas anteriores:

11. Copie e cole o seguinte código:

import logging

import json

from pyrfc import Connection




USERID = <SAP User>

PASSWD = <SAP Password>

LANG = 'EN'

SAPHOST= <SAP CAR IP Address>

SAPINSTANCENUM= <SAP CAR Instance Number>

SAPCLIENT= <SAP CAR Client Number>




logger = logging.getLogger()

logger.setLevel(logging.DEBUG)







def lambda_handler(event, context):

print(event)

STORE=str(event['STORE'])

WORKSTATIONID =str(event['WORKSTATION_ID'])

DATE=str(event['Date'])

Department=str(event['Department'])

TRANSNUMBER=str(event['Trans_Number'])

RETAIL_Number=str(event['Retail_Number'])

ITEM_ID=str(event['Item_ID'])

Quantity = str(event['Quantity'])

Amount = str(event['Amount'])




con = Connection(ashost=SAPHOST, sysnr=SAPINSTANCENUM, client=SAPCLIENT, user=USERID, passwd=PASSWD)

ITEM = [{ "RETAILNUMBER": RETAIL_Number, "ITEMID": ITEM_ID,"RETAILQUANTITY":Quantity,"SALESAMOUNT":Amount }]

IMPORTSTRUCT = [{ "RETAILSTOREID": STORE, "BUSINESSDAYDATE": DATE, "TRANSNUMBER":TRANSNUMBER, "WORKSTATIONID": WORKSTATIONID, "DEPARTMENT":Department, "RETAILLINEITEM":ITEM }]




BapiCAR = con.call('/POSDW/CREATE_TRANSACTIONS_EXT', IT_TRANSACTION=IMPORTSTRUCT)

print (BapiCAR)

return 0

 

12. Clique em Implantar e execute um evento de teste com os seguintes dados:

{

"WORKSTATION_ID": "zs9x0u9uF",

"STORE": "R100",

"Date": "20210408",

"Department": 1001,

"Trans_Number": 4075247,

"Retail_Number": 193480,

"Item_ID": 150580,

"Quantity": 7,

"Amount": 889,

"_id_": "zs9x0u9uF"

}

 

3.- Configure a regra IoT Core para enviar mensagens para a função Lambda.

  1. No console deIoT core service, clique em Agir->Regras e, em seguida, clique em criar.
  2. Dê um nome e uma descrição à sua regra.
  3. Na consulta de regra, insira a seguinte consulta SQL:
SELECT * FROM '/sapcar/posdata'

4. Clique em “Adicionar ação” e selecione “Enviar uma mensagem para uma função do Lambda” e selecione a função Lambda criada anteriormente.

 

Limpeza dos serviços

Para evitar cobranças futuras, exclua os recursos criados.

Conclusão

Neste blog, mostramos uma maneira de integrar serviços nativos da AWS ao SAP para ingestão de dados no SAP CAR. A mesma lógica pode ser usada para integrar qualquer tipo de serviço ao SAP Business Suite de forma simples, escalável e econômica.

Abaixo está um vídeo demonstrando o cenário implementado nas etapas anteriores:

https://amazon.awsapps.com/workdocs/index.html#/folder/5e9a3693e62ad245e96fdc991a6aecb961343125188d93358c9028f3c1b15d16

 

 

 


Sobre o autor

César Páez Román é um SAP Migrations SA-Latam sênior da AWS com sede no Chile, com vasta experiência na implementação de projetos SAP, S/4HANA Conversion e SAP System Upgrade, OS/DB Migrations, HANA e AWS como arquiteto e consultor.

 

 

 

 

Revisor

Davi Garcia é Arquiteto Especialista de Soluções, focado em Modernização de Aplicações na AWS, e ajuda clientes de diversos segmentos na América Latina. Possui larga experiência em plataforma de containers e automação de infraestrutura. Ele gosta de contribuir com projetos open-source, se divertir em família com jogos de tabuleiros e velejar.