Cree programas COBOL Db2 mediante y AWS Mainframe ModernizationAWS CodeBuild - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree programas COBOL Db2 mediante y AWS Mainframe ModernizationAWS CodeBuild

Luis Gustavo Dantas y Eduardo Zimelewicz, Amazon Web Services

Resumen

nota

AWS Mainframe Modernization El servicio (experiencia de entorno de ejecución gestionado) ya no está abierto a nuevos clientes. Para obtener funcionalidades similares a las AWS Mainframe Modernization de Service (experiencia en entornos de ejecución gestionados), explore AWS Mainframe Modernization Service (experiencia autogestionada). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de AWS Mainframe Modernization.

Este patrón explica cómo crear un AWS CodeBuild proyecto sencillo para precompilar y vincular programas de COBOL Db2 mediante las herramientas Replatform. AWS Mainframe Modernization Esto permite el despliegue y la ejecución de estos programas en el entorno de ejecución de Replatform. AWS Mainframe Modernization

COBOL, un lenguaje de programación orientado a los negocios, potencia muchas aplicaciones críticas debido a su fiabilidad y legibilidad. IBM Db2, un sistema de gestión de bases de datos relacionales, gestiona grandes volúmenes de datos de manera eficiente y se integra con los programas COBOL a través de SQL. COBOL y Db2 forman juntos la columna vertebral de las operaciones de misión crítica en sectores como las finanzas y el gobierno, a pesar de la aparición de nuevas tecnologías.

La migración de los componentes COBOL y Db2 del entorno de mainframe a otras plataformas plantea desafíos como la compatibilidad de las plataformas, la complejidad de la integración, la migración de datos y la optimización del rendimiento. El traslado de estos componentes críticos requiere una planificación cuidadosa, experiencia técnica y recursos para garantizar una migración fluida y, al mismo tiempo, mantener la fiabilidad y la funcionalidad.

El AWS Mainframe Modernization servicio proporciona herramientas y recursos para cambiar la plataforma de las aplicaciones y bases de datos de mainframe para que se ejecuten en la AWS infraestructura, como las instancias de Amazon Elastic Compute Cloud EC2 (Amazon). Esto implica trasladar las cargas de trabajo del mainframe a la nube sin tener que hacer cambios importantes en el código.

El proceso de compilación previo y enlace de Db2 es esencial para optimizar el rendimiento y la fiabilidad de las aplicaciones de bases de datos. La compilación previa transforma las instrucciones de SQL incrustadas en código ejecutable, lo que reduce la sobrecarga del tiempo de ejecución y mejora la eficiencia. El proceso de enlace vincula el código compilado previamente con las estructuras de la base de datos, lo que facilita las rutas de acceso y la optimización de las consultas. Este proceso garantiza la integridad de los datos, mejora la capacidad de respuesta de las aplicaciones y protege contra las vulnerabilidades de seguridad. Las aplicaciones compiladas previamente y enlazadas correctamente minimizan el consumo de recursos, mejoran la escalabilidad y mitigan los riesgos de los ataques de inyección de código SQL.

Requisitos previos y limitaciones

Requisitos previos

  • Acceso a una Cuenta de AWS consola de nivel administrativo.

  • Un sistema de base de datos IBM Db2, como IBM Db2 for z/OS o Db2 para Linux, Unix y Windows (LUW).

  • El software IBM Data Server Client, está disponible para su descarga en el sitio web de IBM. Para obtener más información, consulte los tipos de IBM Data Server Client y Data Server Driver.

  • Un programa COBOL Db2 para compilar y vincular. Como alternativa, este patrón proporciona un programa de ejemplo básico que puede utilizar.

  • Una nube privada virtual (VPC) conectada a una AWS red privada. Para más información sobre la creación de VPC, consulte la documentación de Amazon Virtual Private Cloud (Amazon VPC).

  • Un repositorio de control de código fuente, como GitHub o GitLab.

Limitaciones

Arquitectura

Pila de tecnología de origen

La pila de orígenes incluye:

  • Programas COBOL que utilizan una base de datos Db2 para almacenar datos

  • Compilador IBM COBOL y Db2 para precompilador z/OS

  • Otras partes de la configuración del mainframe, como el sistema de archivos, el administrador de transacciones y el spool

Pila de tecnología de destino

El enfoque de este patrón funciona con dos opciones: mover datos de Db2 for a Db2 para LUW o z/OS permanecer en Db2 para z/OS. La arquitectura de destino incluye:

  • Programas COBOL que utilizan una base de datos Db2 para almacenar datos

  • AWS Mainframe Modernization Cambie la plataforma de las herramientas de compilación

  • AWS CodeBuild como infraestructura para crear la aplicación

  • Otros Nube de AWS recursos, como Amazon Linux

Arquitectura de destino

Arquitectura para crear programas COBOL Db2 en AWS.

En el siguiente diagrama se ilustra lo siguiente:

  1. El usuario carga su código en un repositorio de control de código fuente, como GitHub o GitLab.

  2. AWS CodePipeline nota el cambio y obtiene el código del repositorio.

  3. CodePipeline inicia AWS CodeBuild y envía el código.

  4. CodeBuild sigue las instrucciones de la buildspec.yml plantilla (que se proporcionan en la sección de información adicional) para:

    1. Obtener IBM Data Server Client de un bucket de Amazon Simple Storage Service (Amazon S3).

    2. Instalar y configurar IBM Data Server Client.

    3. Recupere las credenciales de Db2 de AWS Secrets Manager.

    4. Conexión al servidor Db2.

    5. Precompilar, compilar y vincular el programa COBOL.

    6. Guarde los productos terminados en un depósito de S3 AWS CodeDeploy para su uso.

  5. CodePipeline comienza CodeDeploy.

  6. CodeDeploy coordina sus agentes, que ya están instalados en los entornos de ejecución. Los agentes obtienen la aplicación de Amazon S3 y la instalan según las instrucciones que se indican en appspec.yml.

Para simplificar las cosas y centrarlas en la compilación, las instrucciones de este patrón abarcan los pasos 1 a 4, pero no incluyen la implementación del programa COBOL Db2.

Automatización y escala

Para mayor simplicidad, este patrón describe cómo aprovisionar los recursos de forma manual. Sin embargo, existen numerosas opciones de automatización disponibles, como CloudFormation AWS Cloud Development Kit (AWS CDK), y HashiCorp Terraform, que automatizan estas tareas. Para obtener más información, consulte la documentación de CloudFormation y AWS CDK.

Tools (Herramientas)

Servicios de AWS

  • AWS CodeBuild es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.

  • AWS CodeDeployautomatiza las implementaciones en instancias, AWS Lambda funciones EC2 o servicios de Amazon Elastic Container Service (Amazon ECS) o en instancias locales.

  • AWS CodePipeline permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.

  • AWS Mainframe Modernizationproporciona herramientas y recursos que le ayudan a planificar e implementar la migración y la modernización de los mainframes a AWS entornos de tiempo de ejecución gestionados.

Otras herramientas

  • Imagen de Amazon ECR para las herramientas de AWS Mainframe Modernization Replatform. Para compilar una aplicación COBOL, tendrá que empezar CodeBuild con una imagen de Amazon Elastic Container Registry (Amazon ECR) que contenga las herramientas de Replatform: AWS Mainframe Modernization

    673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1

    Para obtener más información sobre la imagen de ECR disponible, consulte el tutorial de la Guía del usuario de AWS Mainframe Modernization .

  • El software IBM Data Server Client es esencial para precompilar y vincular los programas COBOL Db2. CodeBuild Actúa como puente entre el compilador COBOL y Db2.

Prácticas recomendadas

  • No todos los programas COBOL utilizan Db2 como capa de persistencia de datos. Asegúrese de que las directivas de compilación para acceder a Db2 se apliquen únicamente a los programas COBOL diseñados específicamente para interactuar con Db2. Implemente una lógica para distinguir entre los programas COBOL Db2 y los programas COBOL que no utilizan Db2.

  • Se recomienda evitar compilar programas que no hayan sido modificados. Implemente un proceso para identificar qué programas deben compilarse.

Epics

TareaDescripciónHabilidades requeridas

Cree un bucket de S3 para alojar IBM Data Server Client y los artefactos de canalización.

Debe configurar un bucket de S3 para (a) cargar IBM Data Server Client, (b) almacenar el código del repositorio y (c) almacenar los resultados del proceso de creación.

  1. Inicie sesión en la Consola de administración de AWSconsola Amazon S3 y ábrala.

  2. Utilice un bucket de S3 existente, o bien cree un bucket nuevo. Anote el nombre de recurso de Amazon (ARN) del bucket para utilizarlo más adelante.

Para ver más maneras de crear un bucket de S3, consulte la documentación de Amazon S3.

AWS general

Cargue IBM Data Server Client en el bucket de S3.

  1. En la consola de Amazon S3, elija el bucket que quiere abrir.

  2. Elija Crear carpeta, especifique su nombre como cliente y, a continuación, elija Crear carpeta.

  3. Abra la carpeta del cliente, seleccione Cargar y Añadir archivos.

  4. Elija el archivo IBM Data Server Client que descargó previamente del sitio web de IBM a su sistema de archivos local.

    El nombre del archivo debe ser similar a v11.5.8_linuxx64_client.tar.gz o v11.5.9_linuxx64_client.tar.gz.

  5. Seleccione Abrir, Cargar y espere a que se complete la carga.

  6. En la pestaña Archivos y carpetas, elija Data Server Client y anote su URI de S3.

AWS general

Cree un AWS Secrets Manager secreto para sus credenciales de Db2.

Para crear un secreto para almacenar sus DB2 credenciales de forma segura:

  1. En la consolade Secrets Manager, seleccione Almacenar un nuevo secreto.

  2. En el panel Elegir un tipo de secreto, elija Otro tipo de secreto y Texto sin formato.

  3. En el cuadro de texto sin formato, escriba sus credenciales de Db2 mediante la siguiente estructura JSON.

    { "username": "<your-db2-user-name>", "password": "<your-db2-password>", "db2node": "db2dev", "db2host": "<your-db2-hostname-or-IP>", "db2port": <your-db2-port>, "db2name": "<your-db2-location>", "qualifier": "<your-db2-qualifier>" }
  4. Seleccione Siguiente y asigne al secreto un nombre como dev-db2-cred.

  5. Seleccione Siguiente, Siguiente y Almacenar.

Para más información sobre la creación de secretos, consulte la documentación de Secrets Manager.

AWS general

Compruebe que Db2 sea accesible desde la subred de la VPC.

AWS CodeBuild necesita una conexión al servidor Db2 para que el cliente del servidor de datos pueda realizar operaciones de precompilación y enlace. Asegúrese de que CodeBuild puede acceder al servidor Db2 a través de una conexión segura.

  1. Abra la Consola de Amazon VPC.

  2. En el panel de navegación, elija Subredes y anote las IDs subredes privadas en IPv4 CIDRslas que CodeBuild funcionarán.

  3. Actualice la configuración actual de control de acceso a la red de su sistema Db2 mediante una regla de entrada. Esta regla debería permitir el acceso TCP personalizado al puerto Db2 exclusivamente desde la subred CIDRs asociada al proyecto. CodeBuild

Administrador de red, AWS general
TareaDescripciónHabilidades requeridas

Cree el activo COBOL Db2.

  1. Si desea utilizar un ejemplo sencillo de COBOL Db2, guarde el siguiente código fuente como CDB2SMP.cbl. O bien, puede sustituir este ejemplo por un programa que ya tenga.

    IDENTIFICATION DIVISION. PROGRAM-ID. CDB2SMP. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NAME PIC X(100). PROCEDURE DIVISION. EXEC SQL SELECT NAME INTO :WS-NAME FROM SYSIBM.SYSTABLES END-EXEC GOBACK.
  2. Confirme los cambios y envíe el proyecto a su repositorio.

Desarrollador de aplicaciones

Creación del archivo buildspec.yml.

  1. Genere el archivo buildspec.yml según el ejemplo que se proporciona en la sección Información adicional.

  2. Confirme los cambios y envíe el proyecto a su repositorio.

AWS DevOps

Conecta tu repositorio a CodePipeline.

  1. Abra la consola de herramientas para desarrolladores de AWS.

  2. En el panel de navegación, seleccione Configuración, conexiones.

  3. Siga las instrucciones de la documentación de la consola de Herramientas para desarrolladores y elija el proveedor de código fuente que prefiera.

Necesitará el nombre del recurso de Amazon (ARN) para la conexión cuando cree la política AWS Identity and Access Management (IAM) para un paso CodePipeline posterior.

AWS DevOps
TareaDescripciónHabilidades requeridas

Cree una política de IAM para CodeBuild.

El CodeBuild proyecto requiere acceso a algunos recursos, como Secrets Manager y Amazon S3.

Para configurar los permisos necesarios:

  1. Abra la consola de IAM.

  2. En el panel de navegación, elija Políticas, Crear política y, a continuación, seleccione el CodeBuild servicio.

  3. Cambie el formato de Visual a JSON y copie la CodeBuild política que se proporciona en la sección Información adicional en el campo del editor de políticas.

  4. Asigne un nombre a esta política y guárdela para consultarla en el siguiente paso.

Para obtener más información sobre la creación de políticas de IAM, consulte la documentación de IAM.

AWS general

Cree un rol de IAM para CodeBuild.

Para que las políticas de seguridad estén disponibles CodeBuild, debe configurar un rol de IAM.

Para crear el rol:

1. En el panel de navegación de la consola de IAM, seleccione Roles, Crear rol.

3. En Tipo de entidad de confianza, mantenga la selección predeterminada de Servicio de AWS.

4. En Caso de uso, seleccione el CodeBuild servicio y, a continuación, elija Siguiente.

4. En la lista de políticas de IAM disponibles, busque la política para la que creó y CodeBuild, a continuación, seleccione Siguiente para asociarla al rol.

5. Especifique un nombre para el rol y elija Crear rol para guardarlo para consultarlo en el futuro CodeBuild.

Para obtener más información sobre la creación de un rol de IAM para un Servicio de AWS, consulte la documentación de IAM.

AWS general

Cree una política de IAM para. CodePipeline

La AWS CodePipeline canalización requiere acceso a algunos recursos, incluidos su repositorio de código y Amazon S3.

Repita los pasos indicados anteriormente CodeBuild para crear una política de IAM CodePipeline (en el paso 2, elija en CodePipelinelugar de CodeBuild).

AWS DevOps

Cree un rol de IAM para CodePipeline.

Para que las políticas de seguridad estén disponibles CodePipeline, debe configurar un rol de IAM.

Para crear el rol:

  1. En la consola de IAM, seleccione Roles y, a continuación, Crear rol.

  2. En Tipo de entidad de confianza, elija Política de confianza personalizada.

    Aparecerá una política con un elemento Principal vacío.

  3. En la línea Principal, entre las llaves, añada lo siguiente:

    "Service": "codepipeline.amazonaws.com"

    La política de confianza tendrá el siguiente aspecto:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "codepipeline.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  4. Elija Siguiente.

  5. En la lista de políticas de IAM disponibles, busque la política para la que creó y CodePipeline, a continuación, seleccione Siguiente para asociarla a la función.

  6. Especifique un nombre para el rol y elija Crear rol para guardarlo para consultarlo en el futuro CodePipeline.

AWS DevOps
TareaDescripciónHabilidades requeridas

Cree una CodePipeline canalización y un CodeBuild proyecto.

Para crear una CodePipeline canalización y el CodeBuild proyecto que compila y enlaza el programa COBOL Db2:

  1. Abre la CodePipeline consola y selecciona Crear canalización, Construir canalización personalizada.

  2. Escriba un nombre para la canalización.

  3. En Función de servicio, elija Función de servicio existente y, a continuación, especifique el ARN de la función de IAM para la que la creó. CodePipeline

  4. Expanda la configuración avanzada, elija una ubicación personalizada, elija el bucket de S3 que creó anteriormente y, a continuación, elija Siguiente.

  5. En el proveedor de origen, seleccione su proveedor de origen externo y proporcione la información relevante del proveedor:

    1. En Conexión, seleccione la conexión que se creó para el proveedor de origen.

    2. En Nombre del repositorio, elija un repositorio.

    3. En la rama predeterminada, seleccione la rama que almacena el programa COBOL y buildspec.yml.

    4. Elija Siguiente.

  6. En Proveedor de compilación, elija Otros proveedores de compilación y, a continuación, AWS CodeBuild.

  7. En Nombre del proyecto, seleccione Crear proyecto.

    La consola muestra una CodeBuild ventana en la que puede crear un proyecto de compilación. En esta ventana:

    1. Escriba un nombre para el proyecto.

    2. En Environment image (Imagen de entorno), elija Custom image (Imagen personalizada).

    3. En Tipo de entorno, elija Contenedor de Linux.

    4. En Cuenta de ECR, elija Mi cuenta de ECR.

    5. En la URI del repositorio Amazon ECR, introduzca 673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:8.0.9.R1.

    6. En Función de servicio, elija Función de servicio existente y seleccione la función para la que la creó CodeBuild.

    7. Amplíe la sección Configuración adicional y, a continuación, elija la VPC, las subredes privadas y el grupo de seguridad para este proyecto.

    8. En Especificaciones de la compilación, elija Utilizar un archivo de especificación de compilación.

    9. Al final de la ventana, selecciona Continuar aCodePipeline. La CodeBuild ventana se cerrará para que puedas volver a la CodePipeline consola.

  8. De vuelta a la CodePipeline consola, selecciona Siguiente.

  9. En el panel Añadir fase de implementación, seleccione Omitir fase de implementación y confirme la opción.

  10. Revise los parámetros de la canalización y, a continuación, elija Crear canalización.

AWS DevOps

Revise la salida.

Compruebe el éxito de la compilación revisando los registros de CodePipeline compilación.

AWS DevOps

Compruebe los resultados en Db2.

Compruebe la versión del paquete en la tabla SYSPLAN.

select CAST(NAME AS VARCHAR(10)) as name, VALIDATE, LAST_BIND_TIME, LASTUSED, CAST(PKGVERSION AS VARCHAR(10)) as PKGVERSION from SYSIBM.SYSPLAN where NAME = 'CDB2SMP' order by LAST_BIND_TIME desc

La versión debe coincidir con el ID de CodeBuild compilación, que se muestra CDB2SMP en nuestro ejemplo:

NAME VALIDATE LAST_BIND_TIME LASTUSED PKGVERSION ---------- -------- -------------------------- ---------- ---------- CDB2SMP B 2024-05-18-11.53.11.503738 01/01/0001 19

Resolución de problemas

ProblemaSolución

Ocasionalmente, la AWS consola cambia de región cuando te mueves de un servicio a otro.

Asegúrese de verificar lo seleccionado Región de AWS cada vez que cambie de un servicio a otro.

El Región de AWS selector está en la esquina superior derecha de la ventana de la consola.

Puede resultar difícil identificar los problemas de conectividad de Db2 desde. CodeBuild

Para solucionar problemas de conectividad, añada el siguiente comando de DB2 conexión al buildspec.yml archivo. Esta adición lo ayudará a depurar y resolver los problemas de conectividad.

db2 connect to $DB_NAME user $DB2USER using $DB2PASS

En ocasiones, el panel de roles de la consola de IAM no muestra inmediatamente la política de IAM que ha creado.

Si se produce un retraso, actualice la pantalla para mostrar la información más reciente.

Recursos relacionados

Documentación de IBM

AWS documentación

Información adicional

CodeBuild política

Sustituya los marcadores de posición <RegionID>, <AccountID>, <SubnetARN>, <BucketARN> y <DB2CredSecretARN> por sus propios valores.

{"Version": "2012-10-17", "Statement": [ {"Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Resource": "*" }, {"Action": ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability"], "Effect": "Allow", "Resource": "arn:aws:ecr:*:673918848628:repository/m2-enterprise-build-tools"}, {"Action": "s3:PutObject", "Effect": "Allow", "Resource": "arn:aws:s3:::aws-m2-repo-*/*"}, {"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"], "Effect": "Allow", "Resource": "arn:aws:logs:<RegionId>:<AccountId>:*"}, {"Action": ["ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DescribeDhcpOptions", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterface"], "Effect": "Allow", "Resource": "*"}, {"Action": "ec2:CreateNetworkInterfacePermission", "Effect": "Allow", "Resource": ["<SubnetARN>"]}, {"Action": "s3:*", "Effect": "Allow", "Resource": ["<BucketARN>/*","<BucketARN>"]}, {"Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Resource": "<DB2CredSecretARN>"} ] }

CodePipeline política

Sustituya los marcadores de posición <BucketARN> y <ConnectionARN> por sus propios valores.

{ "Version": "2012-10-17", "Statement": [ {"Action": ["s3:List*", "s3:GetObjectVersion", "s3:GetObject", "s3:GetBucketVersioning" ], "Effect": "Allow", "Resource": ["<BucketARN>/*", "<BucketARN>"]}, {"Action": ["codebuild:StartBuild", "codebuild:BatchGetBuilds"], "Effect": "Allow", "Resource": "*"}, {"Action": ["codestar-connections:UseConnection"], "Effect": "Allow", "Resource": "<ConnectionARN>"} ] }

buildspec.yml

Sustituya el marcador de posición <your-bucket-name> con el nombre real de su bucket de S3.

version: 0.2 phases: pre_build: commands: - /var/microfocuslicensing/bin/mfcesd -no > /var/microfocuslicensing/logs/mfcesd_startup.log 2>&1 & - | mkdir $CODEBUILD_SRC_DIR/db2client aws s3 cp s3://<your-bucket-name>/v11.5.8_linuxx64_client.tar.gz $CODEBUILD_SRC_DIR/db2client/ >> /dev/null 2>&1 tar -xf $CODEBUILD_SRC_DIR/db2client/v11.5.8_linuxx64_client.tar.gz -C $CODEBUILD_SRC_DIR/db2client/ cd $CODEBUILD_SRC_DIR/db2client/ ./client/db2_install -f sysreq -y -b /opt/ibm/db2/V11.5 >> /dev/null 2>&1 useradd db2cli /opt/ibm/db2/V11.5/instance/db2icrt -s client -u db2cli db2cli DB2CRED=$(aws secretsmanager get-secret-value --secret-id dev-db2-cred | jq -r '.SecretString | fromjson') read -r DB2USER DB2PASS DB_NODE DB_HOST DB_PORT DB_NAME DB_QUAL <<<$(echo $DB2CRED | jq -r '.username, .password, .db2node, .db2host, .db2port, .db2name, .qualifier') . /home/db2cli/sqllib/db2profile db2 catalog tcpip node $DB_NODE remote $DB_HOST server $DB_PORT db2 catalog db $DB_NAME as $DB_NAME at node $DB_NODE authentication server build: commands: - | revision=$CODEBUILD_SRC_DIR/loadlib mkdir -p $revision; cd $revision . /opt/microfocus/EnterpriseDeveloper/bin/cobsetenv cob -zU $CODEBUILD_SRC_DIR/CDB2SMP.cbl -C "DB2(DB==${DB_NAME} PASS==${DB2USER}.${DB2PASS} VERSION==${CODEBUILD_BUILD_NUMBER} COLLECTION==DB2AWSDB" artifacts: files: - "**/*" base-directory: $revision