Utilizar herramientas de desarrolladores de AWS para simplificar los procesos de desarrollo de SAP

Una de las grandes ventajas de AWS como plataforma cloud es la gran variedad de servicios disponibles, listos para ser consumidos por el usuario.

Servicios tan básicos como EC2 (instancias virtuales), S3 (almacenamiento escalable y prácticamente infinito) o AWS Cloudfront (CDN) son algunos de los servicios que disponen los usuarios para desplegar sus aplicaciones en la nube pública, pero AWS dispone de servicios más complejos o especializados en tareas más complejas tales como inteligencia artificial, reconocimiento de video y de imágenes, o servicios pensados para ayudar a los desarrolladores y DevOps a simplificar sus tareas diarias.

Los servicios puntuales que deseo destacar en este post, son los que pueden ayudar a los programadores a agilizar el desarrollo de aplicaciones FIORI para NW ABAP.

Integraremos 5 servicios de AWS (AWS CodePipeline, AWS CodeDeploy, AWS S3, AWS SNS, AWS Secrets Manager y AWS CodeCommit) con una instancia SAP NW 7.4 o 7.5 como backend.

Importante aclarar, los requisitos que se detallaron anteriormente, corresponden a la versión de NW necesaria al momento de escribir este post. En caso de que algún requisito cambie, intentaré actualizar el mismo.

Adicionalmente a la versión de NW requerida, es necesario configurar los servicios de ABAP Developer Tools (ADT) en la transacción SICF según la nota 2494880, disponer de un usuario desarrollador con sus permisos y una instancia con salida a internet para poder instalar el agente de CodeDeploy.

Crear el repositorio

En primer lugar es necesario crear un repositorio en donde el código de las aplicaciones se almacenarán junto con su historial completo. Para esto podemos utilizar tanto AWS CodeCommit, como una aplicación de terceros (Github, Bitbucket, o similar).

En este caso, vamos a analizar solamente la creación del repositorio en AWS CodeCommit . En otro post podremos analizar como integrar alguna de las herramientas antes listadas.

En la consola de AWS, seleccionar el servicio AWS CodeCommit.
Si nunca se creó ningún repositorio, debería aparecer la siguiente pantalla

En este caso, seleccionar Repositorios en el menú de la izquierda y clickera sobre el botón Crear repositorio, en donde se solicitarán ciertos datos. Completar el nombre del repositorio y seleccionar Crear.

IMPORTANTE!

Si se crea el repositorio con una cuenta root (no tomando las buenas prácticas de AWS) se deberá ingresar con un usuario de IAM que tenga permisos para CodeCommit, para poder configurar las URLs de accesos al repositorio.

Una vez creado el repositorio, podremos ver la URL de acceso al mismo

A este repositorio podemos ingresar configurando un cliente Git (github o cualquiera, utilizando las credenciales de acceso a la consola) y con tu IDE favorito, desarrollá la aplicación deseada.

Configurando el deploy

Para configurar el deploy de forma segura y práctica, vamos a utilizar el servicio AWS Secrets Manager en donde crearemos un Secret name con el usuario y contraseña para acceder a la instancia NW de SAP.

Y acá empieza lo interesante. Debemos crear 4 archivos en el mismo repositorio. Estos archivos serán de configuración de CodeDeploy y permitirán hacer el deploy de nuestra app.

buildspec.yml

Este archivo lo utiliza AWS CodeBuild para crear los artifacts

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10
      
  build:
    commands:
       - npm install --global @ui5/cli
       - npm install
       - ui5 build -a
       - npm test

reports: #New
  FioriReports: # CodeBuild will create a report group called "FioriReports".
    files: #Store all of the files
      - '**/*.xml'
    base-directory: 'junit' # Location of the reports
    #file-format: CucumberJson #Type of the report, defaults to JunitXml
    
artifacts:
  files:
    - dist/*
    - appspec.yml
    - appspec_deploy.sh
    - appspec_cleanup.sh
    - Gruntfile.js
    - package.json

Para más información sobre las opciones que puede contener este archivo, está la documentación oficial de AWS https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html

appspec.yml

Este archivo es el que utiliza el servicio AWS CodeDeploy para coordinar los pasos del deployment.

version: 0.0
os: linux
files:
  - source: /
    destination: /codedeploy/sapfioriapp
hooks:
  AfterInstall:
    - location: appspec_deploy.sh
      timeout: 180

Para más información sobre las opciones que puede contener este archivo, está la documentación oficial de AWS https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html

appspec_deploy.sh

Este ejecutable es el encargado de hacer los pasos previos al deploy de la aplicación. Va a ser ejecutado por el agente de AWS CodeDeploy.

Se debe ajustar los parámetros para que coincidan con la cuenta de AWs (región y secret creado anteriormente).

En este caso, se utiliza grunt como task runner y el plugin grunt-nwabap-ui5uploader

echo "Starting Deployment Task"
cd /codedeploy/sapfioriapp
echo "Installing grunt & dependencies"
npm install grunt
npm install grunt-nwabap-ui5uploader
echo "Deploy to"
# AWS CLI SECRETSMANAGER
duser=$(aws secretsmanager get-secret-value --secret-id SAP_DEPLOY --region us-east-1 --query SecretString --output text | grep -oP '(?<="USER":")[^"]*')
dpw=$(aws secretsmanager get-secret-value --secret-id SAP_DEPLOY --region us-east-1 --query SecretString --output text | grep -oP '(?<="PASSWORD":")[^"]*')
durl=$(aws secretsmanager get-secret-value --secret-id SAP_DEPLOY --region us-east-1 --query SecretString --output text | grep -oP '(?<="URL":")[^"]*')
echo $durl
echo "as"
echo $duser
grunt deploy --server=$durl --user=$duser --pwd=$dpw

Gruntfile.js

Finalmente, este archivo es el encargado de hacer todo el deploy de la aplicación FIORI en el servidor NW.

En este blog de SAP hay información de como utilizar las distintas opciones del plugin grunt-nwabap-ui5uploader, por ejemplo para colocar el número de orden de transporte y en este link se encuentra el listado completo de opciones configurables al momento de hacer el deploy.

Este archivo es solo un ejemplo con pocos parámetros

module.exports = function (grunt) {

    //DOC: https://www.npmjs.com/package/grunt-nwabap-ui5uploader

    var sUser = grunt.option('user');
    var sPwd = grunt.option('pwd');
    var sServer = grunt.option('server');

    grunt.initConfig({
        nwabap_ui5uploader: {
            options: {
                conn: {
                    server: sServer,
                    useStrictSSL: false
                },
                auth: {
                    user: sUser,
                    pwd: sPwd
                }
            },
            upload_build: {
                options: {
                    ui5: {
                        package: '$TMP',
                        bspcontainer: 'z_sap_fiori_app',
                        bspcontainer_text: 'test App',
                    },
                    resources: {
                        cwd: 'dist',
                        src: '**/*.*'
                    }
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-nwabap-ui5uploader');

    grunt.registerTask('deploy', ['nwabap_ui5uploader']);

};

Como paso final, queda subir todos los archivos creados junto con el código de la aplicación, al repositorio de CodeCommit, con los comandos git (git commit y git push) o usando la consola del cliente instalado.

Instalar el agente de CodeDeploy

Para que el deploy pueda realizarse, se debe instalar y configurar el agente de CodeDeploy en una instancia según los sistemas operativos homologados.

  1. Instalar el AWS Cli y configurar con las credenciales correctas
  2. Crear las carpetas en donde se alojará temporalmente la aplicación FIORI
$ mkdir /codedeploy
$ mkdir /codedeploy/sapfioriapp

3. Instalar las últimas versiones de Node.js y el agente de AWS CodeDeploy

4. Registrar el agente. Configurar la región correctamente e indicar un nombre de instancia (cualquiera)

$ aws deploy register --instance-name <NAME> --tags Key=Name,Value=CodeDeployDemo-OnPrem --region <AWS REGION>
$ cp codedeploy.onpremises.yml /etc/codedeploy-agent/conf/codedeploy.onpremises.yml
$ sudo service codedeploy-agent stop
$ sudo service codedeploy-agent start
$ sudo service codedeploy-agent status

Crear el Pipeline

Ingresar en el servicio CodePipeline y crear un nuevo pipeline. Como origen, seleccionar el repositorio creado oportunamente.

En la etapa de compilación, se debe crear una nueva seleccionando AWS CodeBuild como origen, y crear u nuevo proyecto.

Y finalizar el asistente omitiendo la etapa de deploy.

Configurando el workplow de aprobaciones

Ahora si, llegó la hora de realizar la etapa final de nuestro proceso de deploy. Hay que configurar el workflow de aprobaciones para poder (o no ) implementar los cambios realizados.

Crear una aplicación en CodeDeploy seleccionando EC2/On-Premises como plataforma de cómputo.

Una vez finalizada esa creación, crear un nuevo deployment group

Revisar que ninguna de las opciones de configuración del entorno se encuentren tildadas con excepción de instancias locales, y agregar la etiqueta Name:CodeDeployDemo-OnPrem (esto viene del proceso de registro, revisar más arriba cuando se registró el agente) y destildar la opción de Balanceador de carga y finalizar la creación del grupo.

Abrir el pipeline creado previamente y editarlo para agregar una nueva etapa (llamada Aprobar) antes de Build, con la aprobación.

En esta etapa se debe crear una acción manual tal como se muestra.

Hacer lo mismo para la etapa de deploy, pero esta vez, despues de la etapa de Build y presionar guardar

Listo! ahora queda probar todo el circuito.

Subi un cambio al repositorio, liberá el cambio y lo podrás ver luego de unos instantes, en la instancia NW seleccionada.

Para mejorar el proceso de configuración, y que no sea tan tedioso, AWS nos provee de las herramientas de AWS CloudFormation, que por medio de templates nos dejará provisionar todo el circuito en un instante.

Cualquier duda o consulta, podes escribirlo en los comentarios e intentaré responderlo!

Un pensamiento en “Utilizar herramientas de desarrolladores de AWS para simplificar los procesos de desarrollo de SAP

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *