选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用 AWS Mainframe Modernization 和构建 COBOL Db2 程序 AWS CodeBuild - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Mainframe Modernization 和构建 COBOL Db2 程序 AWS CodeBuild

由路易斯·古斯塔沃·丹塔斯 (AWS) 和爱德华多·齐梅莱维奇 () 创作 AWS

摘要

此模式说明了如何使用 AWS Mainframe Modernization Replatform 工具创建一个用于预编译和绑定 COBOL Db2 程序的简单 AWS CodeBuild 项目。这允许在 AWS Mainframe Modernization Replatform 运行时环境中部署和执行这些程序。

COBOL是一种面向业务的编程语言,由于其可靠性和可读性,它为许多关键应用程序提供了支持。 IBMDb2 是一个关系数据库管理系统,可高效管理大量数据,并通过SQL它与COBOL程序集成。尽管出现了新技术,COBOL但 Db2 共同构成了金融和政府等行业关键任务运营的支柱。

将 Db2 组件从大型机环境迁移COBOL到其他平台会带来诸如平台兼容性、集成复杂性、数据迁移和性能优化等挑战。移动这些关键组件需要仔细的规划、技术专业知识和资源,以确保顺利迁移,同时保持可靠性和功能性。

该 AWS Mainframe Modernization 服务提供工具和资源,用于将大型机应用程序和数据库改为在 AWS 基础设施上运行,例如亚马逊弹性计算云 (AmazonEC2) 实例。这涉及在不进行重大代码更改的情况下将大型机工作负载迁移到云端。

Db2 预编译和绑定过程对于优化数据库应用程序的性能和可靠性至关重要。预编译可将嵌入式SQL语句转换为可执行代码,从而减少运行时开销并提高效率。绑定过程将预编译的代码与数据库结构联系起来,便于访问路径和查询优化。此过程可确保数据完整性、提高应用程序响应能力并防范安全漏洞。正确预编译和绑定应用程序可最大限度地减少资源消耗,增强可扩展性并降低SQL注入攻击的风险。

先决条件和限制

先决条件

  • AWS 账户 和管理员级别的控制台访问权限。

  • 一个 IBM Db2 数据库系统,例如适用于 z/OS 的 IBM Db2 或适用于 Linux、Unix 和 Windows 的 Db2 ()。LUW

  • IBM数据服务器客户端软件,可从IBM网站下载。有关更多信息,请参阅IBM数据服务器客户端和数据服务器驱动程序类型

  • 要编译和绑定的 COBOL Db2 程序。或者,此模式提供了一个基本的示例程序供您使用。

  • 带有私有网络的虚拟私 AWS 有云 (VPC)。有关创建的信息VPC,请参阅亚马逊虚拟私有云 (AmazonVPC) 文档

  • 源代码控制存储库,例如 GitHub 或 GitLab。

限制

架构

源技术堆栈

源堆栈包括:

  • COBOL使用 Db2 数据库存储数据的程序

  • IBMCOBOL编译器和适用于 z/OS 的 Db2 预编译器

  • 大型机设置的其他部分,例如文件系统、事务管理器和缓冲池

目标技术堆栈

这种模式的方法适用于两个选项:将数据从适用于 z/OS 的 Db2 移动到 Db2LUW,或者在 z/OS 上保留在 Db2 上。目标架构包括:

  • COBOL使用 Db2 数据库存储数据的程序

  • AWS Mainframe Modernization 平台重组编译工具

  • AWS CodeBuild 作为构建应用程序的基础架构

  • 其他 AWS Cloud 资源,例如亚马逊 Linux

目标架构

用于构建 COBOL Db2 程序的架构。AWS

该图阐释了以下内容:

  1. 用户将其代码上传到源代码控制存储库,例如 GitHub 或 GitLab。

  2. AWS CodePipeline 注意到更改并从存储库中获取代码。

  3. CodePipeline 启动 AWS CodeBuild 并发送代码。

  4. CodeBuild 按照buildspec.yml模板(在 “其他信息” 部分中提供)中的说明执行以下操作:

    1. 从亚马逊简单存储服务 (Amazon S3) 存储桶获取IBM数据服务器客户端。

    2. 安装并设置IBM数据服务器客户端。

    3. 从中检索 Db2 凭证。 AWS Secrets Manager

    4. 连接到 Db2 服务器。

    5. 预编译、编译和绑定COBOL程序。

    6. 将成品保存在 S3 存储桶中 AWS CodeDeploy 以备使用。

  5. CodePipeline 开始 CodeDeploy。

  6. CodeDeploy 协调其代理,这些代理已经安装在运行时环境中。代理从 Amazon S3 获取应用程序并根据中的说明进行安装appspec.yml

为了使事情变得简单并专注于构建,此模式中的说明涵盖了步骤 1 到 4,但不包括 COBOL Db2 程序的部署。

自动化和扩缩

为简单起见,此模式描述了如何手动配置资源。但是,有许多自动化选项可用,例如 AWS CloudFormation AWS Cloud Development Kit (AWS CDK)、和 HashiCorp Terraform,它们可以自动执行这些任务。有关更多信息,请参阅AWS CloudFormationAWS CDK文档。

工具

AWS 服务

  • AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。

  • AWS CodeDeploy自动部署到亚马逊EC2或本地实例、 AWS Lambda 函数或亚马逊弹性容器服务 (AmazonECS) 服务。

  • AWS CodePipeline帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件更改所需的步骤。

  • AWS Mainframe Modernization提供工具和资源,帮助您规划和实施从大型机到 AWS 托管运行时环境的迁移和现代化。

其他工具

  • AWS Mainframe Modernization Replatform 工具的 Amazon ECR 图片。要编译COBOL应用程序,您需要使用包含 AWS Mainframe Modernization 重新平台工具 CodeBuild 的亚马逊弹性容器注册表 (AmazonECR) 镜像启动:

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

    有关可用ECR图像的更多信息,请参阅《AWS Mainframe Modernization 用户指南》中的教程

  • IBM数据服务器客户端软件对于预编译和绑定 COBOL Db2 程序至关重要。 CodeBuild它充当COBOL编译器和 Db2 之间的桥梁。

最佳实践

  • 并非每个COBOL程序都依赖于 Db2 作为其数据持久层。确保用于访问 Db2 的编译指令仅应用于专门设计用于与 Db2 交互的COBOL程序。实现一种逻辑来区分 COBOL Db2 COBOL 程序和不使用 Db2 的程序。

  • 我们建议您避免编译尚未修改的程序。实施一个流程来确定哪些程序需要编译。

操作说明

任务描述所需技能

创建 S3 存储桶来托管IBM数据服务器客户端和管道项目。

您需要设置 S3 存储桶,以 (a) 上传IBM数据服务器客户端,(b) 存储存储库中的代码,以及 (c) 存储构建过程的结果。

  1. 登录并打开 Amazon S3 控制台。 AWS Management Console

  2. 选择现有的 S3 存储桶或创建新的存储桶。记下存储桶的 Amazon 资源名称 (ARN),以备将来使用。

有关创建 S3 存储桶的方法,请参阅 Amazon S3 文档。

将军 AWS

将IBM数据服务器客户端上传到 S3 存储桶。

  1. Amazon S3 控制台上,选择要将其打开的存储桶。

  2. 选择 “创建文件夹”,将其名称指定为 “客户端”,然后选择 “创建文件夹”

  3. 打开客户端文件夹,选择上传添加文件

  4. 选择您之前从IBM网站下载到本地文件系统的IBM数据服务器客户端文件。

    文件名应类似于v11.5.8_linuxx64_client.tar.gzv11.5.9_linuxx64_client.tar.gz

  5. 选择 “打开”、“上传”,然后等待上传完成。

  6. 在 “文件和文件夹” 选项卡上,选择数据服务器客户端,并记下其 S3 URI。

将军 AWS

为您的 Db2 凭证创建一个 AWS Secrets Manager 密钥。

要创建用于安全存储您的DB2凭据的密钥,请执行以下操作:

  1. 在 S ecrets Manager 控制台上,选择存储新密钥

  2. 选择密钥类型窗格中,选择另一种密钥类型纯文本

  3. 纯文本框中,使用以下结构键入您的 Db2 凭证。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. 选择 “下一步”,然后为密钥命名,例如dev-db2-cred

  5. 选择 “下一步”、“下一步” 和 “存储”。

有关创建密钥的更多信息,请参阅 Secr ets Manager 文档

将军 AWS

验证是否可以从VPC子网访问 Db2。

AWS CodeBuild 需要连接到 Db2 服务器,以便数据服务器客户端可以执行预编译和绑定操作。确保它 CodeBuild 可以通过安全连接到 Db2 服务器。

  1. 打开 Amazon VPC 控制台

  2. 在导航窗格上,选择 Subnet s,然后记下私有子网IPv4CIDRs CodeBuild 的IDs和。

  3. 通过引入入站规则来更新 Db2 系统的当前网络访问控制设置。此规则应允许仅从与您的 CodeBuild 项目关联的子网CIDRs中对 Db2 端口进行自定义TCP访问。

网络管理员,常规 AWS

创建云基础架构

任务描述所需技能

创建 S3 存储桶来托管IBM数据服务器客户端和管道项目。

您需要设置 S3 存储桶,以 (a) 上传IBM数据服务器客户端,(b) 存储存储库中的代码,以及 (c) 存储构建过程的结果。

  1. 登录并打开 Amazon S3 控制台。 AWS Management Console

  2. 选择现有的 S3 存储桶或创建新的存储桶。记下存储桶的 Amazon 资源名称 (ARN),以备将来使用。

有关创建 S3 存储桶的方法,请参阅 Amazon S3 文档。

将军 AWS

将IBM数据服务器客户端上传到 S3 存储桶。

  1. Amazon S3 控制台上,选择要将其打开的存储桶。

  2. 选择 “创建文件夹”,将其名称指定为 “客户端”,然后选择 “创建文件夹”

  3. 打开客户端文件夹,选择上传添加文件

  4. 选择您之前从IBM网站下载到本地文件系统的IBM数据服务器客户端文件。

    文件名应类似于v11.5.8_linuxx64_client.tar.gzv11.5.9_linuxx64_client.tar.gz

  5. 选择 “打开”、“上传”,然后等待上传完成。

  6. 在 “文件和文件夹” 选项卡上,选择数据服务器客户端,并记下其 S3 URI。

将军 AWS

为您的 Db2 凭证创建一个 AWS Secrets Manager 密钥。

要创建用于安全存储您的DB2凭据的密钥,请执行以下操作:

  1. 在 S ecrets Manager 控制台上,选择存储新密钥

  2. 选择密钥类型窗格中,选择另一种密钥类型纯文本

  3. 纯文本框中,使用以下结构键入您的 Db2 凭证。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. 选择 “下一步”,然后为密钥命名,例如dev-db2-cred

  5. 选择 “下一步”、“下一步” 和 “存储”。

有关创建密钥的更多信息,请参阅 Secr ets Manager 文档

将军 AWS

验证是否可以从VPC子网访问 Db2。

AWS CodeBuild 需要连接到 Db2 服务器,以便数据服务器客户端可以执行预编译和绑定操作。确保它 CodeBuild 可以通过安全连接到 Db2 服务器。

  1. 打开 Amazon VPC 控制台

  2. 在导航窗格上,选择 Subnet s,然后记下私有子网IPv4CIDRs CodeBuild 的IDs和。

  3. 通过引入入站规则来更新 Db2 系统的当前网络访问控制设置。此规则应允许仅从与您的 CodeBuild 项目关联的子网CIDRs中对 Db2 端口进行自定义TCP访问。

网络管理员,常规 AWS
任务描述所需技能

创建 D COBOL b2 资产。

  1. 如果要使用简单的 COBOL Db2 示例,请将以下源代码另存为CDB2SMP.cbl。或者,你可以用你已经拥有的程序替换此示例。

    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. 提交更改并将文件推送到您的存储库。

应用程序开发人员

创建 buildspec.yml 文件。

  1. 根据 “其他信息” 部分提供的示例生成buildspec.yml文件。

  2. 提交更改并将文件推送到您的存储库。

AWS DevOps

将您的存储库连接到 CodePipeline。

  1. 打开AWS 开发人员工具控制台

  2. 在导航窗格中,选择 “设置”、“连接”。

  3. 按照您选择的源提供商的开发者工具控制台文档中的说明进行操作。

在后续步骤中创建 (ARN) 策略时,您将需要连接的 Amazon 资源名称 AWS Identity and Access Management (IAM)。 CodePipeline

AWS DevOps

创建应用程序构件

任务描述所需技能

创建 D COBOL b2 资产。

  1. 如果要使用简单的 COBOL Db2 示例,请将以下源代码另存为CDB2SMP.cbl。或者,你可以用你已经拥有的程序替换此示例。

    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. 提交更改并将文件推送到您的存储库。

应用程序开发人员

创建 buildspec.yml 文件。

  1. 根据 “其他信息” 部分提供的示例生成buildspec.yml文件。

  2. 提交更改并将文件推送到您的存储库。

AWS DevOps

将您的存储库连接到 CodePipeline。

  1. 打开AWS 开发人员工具控制台

  2. 在导航窗格中,选择 “设置”、“连接”。

  3. 按照您选择的源提供商的开发者工具控制台文档中的说明进行操作。

在后续步骤中创建 (ARN) 策略时,您将需要连接的 Amazon 资源名称 AWS Identity and Access Management (IAM)。 CodePipeline

AWS DevOps
任务描述所需技能

为创建IAM策略 CodeBuild。

该 CodeBuild 项目需要访问某些资源,包括 Secrets Manager 和 Amazon S3。

设置必要权限:

  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择策略,创建策略,然后选择 CodeBuild 服务。

  3. 将格式从 Visual 切换为 JSON,然后将 “其他信息” 部分中提供的CodeBuild 策略复制到 “策略编辑器” 字段。

  4. 命名并保存此政策,以备将来在下一步中参考。

有关创建IAM策略的更多信息,请参阅IAM文档

将军 AWS

为创建IAM角色 CodeBuild。

要使安全策略可用 CodeBuild,您需要配置一个IAM角色。

要创建此角色,请执行以下操作:

1. 在IAM控制台的导航窗格中,选择角色创建角色

3. 对于 “可信实体” 类型,请保留默认AWS 服务设置。

4. 在 “用例” 中,选择 CodeBuild 服务,然后选择 “下一步”。

4. 在可用IAM策略列表中,找到您为其创建的策略 CodeBuild,然后选择下一步将其附加到该角色。

5. 为角色指定名称,然后选择创建角色将其保存以备将来参考 CodeBuild。

有关为创建IAM角色的更多信息 AWS 服务,请参阅IAM文档

将军 AWS

为创建IAM策略 CodePipeline。

该 AWS CodePipeline 管道需要访问某些资源,包括您的代码存储库和 Amazon S3。

重复之前提供的步骤 CodeBuild ,为创建IAM策略 CodePipeline (在步骤 2 中,选择CodePipeline不是 CodeBuild)。

AWS DevOps

为创建IAM角色 CodePipeline。

要使安全策略可用 CodePipeline,您需要配置一个IAM角色。

要创建此角色,请执行以下操作:

  1. IAM控制台上,选择角色创建角色

  2. 对于 Trusted entity type(可信实体类型),选择 Custom trust policy(自定义信任策略)。

    将显示一个带有空Principal元素的策略。

  3. 在这Principal行的大括号之间,添加:

    "Service": "codepipeline.amazonaws.com"

    信任策略将如下所示:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "codepipeline.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  4. 选择下一步

  5. 在可用IAM策略列表中,找到您为其创建的策略 CodePipeline,然后选择下一步将其附加到该角色。

  6. 为角色指定名称,然后选择创建角色将其保存以备将来参考 CodePipeline。

AWS DevOps

配置 权限

任务描述所需技能

为创建IAM策略 CodeBuild。

该 CodeBuild 项目需要访问某些资源,包括 Secrets Manager 和 Amazon S3。

设置必要权限:

  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择策略,创建策略,然后选择 CodeBuild 服务。

  3. 将格式从 Visual 切换为 JSON,然后将 “其他信息” 部分中提供的CodeBuild 策略复制到 “策略编辑器” 字段。

  4. 命名并保存此政策,以备将来在下一步中参考。

有关创建IAM策略的更多信息,请参阅IAM文档

将军 AWS

为创建IAM角色 CodeBuild。

要使安全策略可用 CodeBuild,您需要配置一个IAM角色。

要创建此角色,请执行以下操作:

1. 在IAM控制台的导航窗格中,选择角色创建角色

3. 对于 “可信实体” 类型,请保留默认AWS 服务设置。

4. 在 “用例” 中,选择 CodeBuild 服务,然后选择 “下一步”。

4. 在可用IAM策略列表中,找到您为其创建的策略 CodeBuild,然后选择下一步将其附加到该角色。

5. 为角色指定名称,然后选择创建角色将其保存以备将来参考 CodeBuild。

有关为创建IAM角色的更多信息 AWS 服务,请参阅IAM文档

将军 AWS

为创建IAM策略 CodePipeline。

该 AWS CodePipeline 管道需要访问某些资源,包括您的代码存储库和 Amazon S3。

重复之前提供的步骤 CodeBuild ,为创建IAM策略 CodePipeline (在步骤 2 中,选择CodePipeline不是 CodeBuild)。

AWS DevOps

为创建IAM角色 CodePipeline。

要使安全策略可用 CodePipeline,您需要配置一个IAM角色。

要创建此角色,请执行以下操作:

  1. IAM控制台上,选择角色创建角色

  2. 对于 Trusted entity type(可信实体类型),选择 Custom trust policy(自定义信任策略)。

    将显示一个带有空Principal元素的策略。

  3. 在这Principal行的大括号之间,添加:

    "Service": "codepipeline.amazonaws.com"

    信任策略将如下所示:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "codepipeline.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  4. 选择下一步

  5. 在可用IAM策略列表中,找到您为其创建的策略 CodePipeline,然后选择下一步将其附加到该角色。

  6. 为角色指定名称,然后选择创建角色将其保存以备将来参考 CodePipeline。

AWS DevOps
任务描述所需技能

创建 CodePipeline 管道和 CodeBuild 项目。

要创建 CodePipeline 管道以及编译和绑定 D COBOL b2 程序的 CodeBuild 项目,请执行以下操作:

  1. 打开CodePipeline 控制台,然后选择 “创建管道”、“生成自定义管道”。

  2. 为管道指定名称。

  3. 对于服务角色,选择现有服务角色,然后选择ARN为其创建的IAM角色指定 CodePipeline。

  4. 展开高级设置,选择自定义位置,选择您之前创建的 S3 存储桶,然后选择下一步

  5. 对于来源提供商,请选择您的第三方来源提供商,并为该提供商提供相关信息:。

    1. 在 “连接” 中,选择为源提供商创建的连接。

    2. 在 “存储库名称” 中,选择您的存储库。

    3. 对于默认分支,请选择存储COBOL程序的分支和buildspec.yml

    4. 选择下一步

  6. 对于生成提供商,请选择其他生成提供商AWS CodeBuild

  7. 在 “项目名称” 中,选择 “创建项目”。

    控制台会显示一个 CodeBuild 窗口,您可以在其中创建构建项目。在此窗口中:

    1. 输入项目的名称。

    2. 对于 Environment image (环境映像),选择 Custom image (自定义映像)

    3. 对于环境类型,请选择 Linux 容器

    4. 对于ECR账户,选择其他ECR账户

    5. 对于亚马逊ECR存储库 URI,请输入:673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:8.0.9.R1

    6. 对于服务角色,选择现有服务角色并选择您为其创建的角色 CodeBuild。

    7. 展开其他配置部分,然后选择该VPC项目的私有子网和安全组。

    8. 构建规范部分中,选择使用构建规范文件

    9. 在窗口末尾,选择 “继续” CodePipeline。 CodeBuild 窗口将关闭,因此您可以返回 CodePipeline 控制台。

  8. 返回 CodePipeline 控制台,选择 “下一步”。

  9. 在 “添加部署阶段” 窗格中,选择 “跳过部署阶段”,然后确认。

  10. 查看管道参数,然后选择创建管道

AWS DevOps

检查输出。

通过查看构建日志来验证 CodePipeline 构建是否成功。

AWS DevOps

在 Db2 中查看结果。

验证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

版本必须与 CodeBuild 构建 ID 相匹配,在我们的示例CDB2SMP中:

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

编译并绑定 D COBOL b2 程序

任务描述所需技能

创建 CodePipeline 管道和 CodeBuild 项目。

要创建 CodePipeline 管道以及编译和绑定 D COBOL b2 程序的 CodeBuild 项目,请执行以下操作:

  1. 打开CodePipeline 控制台,然后选择 “创建管道”、“生成自定义管道”。

  2. 为管道指定名称。

  3. 对于服务角色,选择现有服务角色,然后选择ARN为其创建的IAM角色指定 CodePipeline。

  4. 展开高级设置,选择自定义位置,选择您之前创建的 S3 存储桶,然后选择下一步

  5. 对于来源提供商,请选择您的第三方来源提供商,并为该提供商提供相关信息:。

    1. 在 “连接” 中,选择为源提供商创建的连接。

    2. 在 “存储库名称” 中,选择您的存储库。

    3. 对于默认分支,请选择存储COBOL程序的分支和buildspec.yml

    4. 选择下一步

  6. 对于生成提供商,请选择其他生成提供商AWS CodeBuild

  7. 在 “项目名称” 中,选择 “创建项目”。

    控制台会显示一个 CodeBuild 窗口,您可以在其中创建构建项目。在此窗口中:

    1. 输入项目的名称。

    2. 对于 Environment image (环境映像),选择 Custom image (自定义映像)

    3. 对于环境类型,请选择 Linux 容器

    4. 对于ECR账户,选择其他ECR账户

    5. 对于亚马逊ECR存储库 URI,请输入:673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:8.0.9.R1

    6. 对于服务角色,选择现有服务角色并选择您为其创建的角色 CodeBuild。

    7. 展开其他配置部分,然后选择该VPC项目的私有子网和安全组。

    8. 构建规范部分中,选择使用构建规范文件

    9. 在窗口末尾,选择 “继续” CodePipeline。 CodeBuild 窗口将关闭,因此您可以返回 CodePipeline 控制台。

  8. 返回 CodePipeline 控制台,选择 “下一步”。

  9. 在 “添加部署阶段” 窗格中,选择 “跳过部署阶段”,然后确认。

  10. 查看管道参数,然后选择创建管道

AWS DevOps

检查输出。

通过查看构建日志来验证 CodePipeline 构建是否成功。

AWS DevOps

在 Db2 中查看结果。

验证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

版本必须与 CodeBuild 构建 ID 相匹配,在我们的示例CDB2SMP中:

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

故障排除

事务解决方案

有时,当您在服务之间切换时, AWS 控制台会切换区域。

AWS 区域 每当您在服务之间切换时,请务必验证所选内容。

AWS 区域 选择器位于控制台窗口的右上角。

可能很难从 CodeBuild中识别 Db2 连接问题。

要解决连接问题,请在buildspec.yml文件中添加以下 c DB2 onnect 命令。此新增功能可帮助您调试和解决连接问题。

db2 connect to $DB_NAME user $DB2USER using $DB2PASS

有时,IAM控制台中的角色窗格不会立即显示您创建的IAM策略。

如果遇到延迟,请刷新屏幕以显示最新信息。

相关资源

IBM 文档

AWS 文档

其他信息

CodeBuild 策略

用您的值替换占位符<RegionID><AccountID><SubnetARN><BucketARN>、、、和<DB2CredSecretARN>

{"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 策略

用您的值替换占位<ConnectionARN><BucketARN>和。

{ "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

<your-bucket-name>占位符替换为您实际的 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
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。