本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Lambda 在 ASCII Amazon S3 中将大型机文件从EBCDIC格式转换为以字符分隔的格式 AWS
由路易斯·古斯塔沃·丹塔斯创作 () AWS
代码存储库:大型机数据实用程序 | 环境:PoC 或试点 | 来源:IBMEBCDIC文件 |
目标:带分隔符ASCII的文件 | R 类型:更换平台 | 工作量:IBM |
技术:大型机 | AWS服务:AWS CloudShell; AWS Lambda; 亚马逊 S3; 亚马逊 CloudWatch |
Summary
此模式向您展示如何启动 AWS Lambda 函数,该函数可自动将大型机EBCDIC(扩展二进制编码的十进制交换码)文件转换为字符分隔ASCII(美国信息交换标准代码)文件。Lambda 函数将在ASCII文件上传到亚马逊简单存储服务 (Amazon S3) 存储桶后运行。文件转换后,您可以读取基于 x86 的工作负载上的ASCII文件或将文件加载到现代数据库中。
此模式中演示的文件转换方法可以帮助您克服在现代环境中处理EBCDIC文件所面临的挑战。编码的文件EBCDIC通常包含以二进制或压缩十进制格式表示的数据,并且字段的长度是固定的。这些特征造成了障碍,因为基于 x86 的现代工作负载或分布式环境通常使用ASCII编码的数据并且无法处理文件。EBCDIC
先决条件和限制
先决条件
一个活跃的AWS账户
一个 S3 存储桶
具有管理权限的 AWS Identity and Access Management (IAM) 用户
AWS CloudShell
Python 3.8.0
或更高版本 以通用业务为导向EBCDIC的语言 () COBOL 字帖中编码的平面文件及其相应的数据结构
注意:此模式使用示例EBCDIC文件 (CLIENT. EBCDIC.txt
限制
COBOL字帖通常包含多个布局定义。该mainframe-data-utilities
项目可以解析这种抄本,但无法推断出在数据转换时要考虑哪种布局。这是因为抄写本不包含这种逻辑(改为保留在COBOL程序上)。因此,解析副本后,必须要手动配置布局选择规则。 这种模式受 Lambda 配额约束。
架构
源技术堆栈
IBMz/OS、IBM i 和其他系统 EBCDIC
使用编码数据的顺序文件EBCDIC(例如 IBM Db2 卸载)
COBOL复印本
目标技术堆栈
Amazon S3
Amazon S3 事件通知
IAM
Lambda 函数
Python 3.8 或更高版本
大型机数据实用程序
JSON元数据
以字符分隔的文件 ASCII
目标架构
下图显示了将大型机EBCDIC文件转换为ASCII文件的架构。
图表显示了以下工作流:
用户运行抄本解析器脚本将COBOL抄写本转换为文件。JSON
用户将JSON元数据上传到 S3 存储桶。这使得数据转换 Lambda 函数可读取元数据。
用户或自动流程将EBCDIC文件上传到 S3 存储桶。
S3 通知事件将会触发数据转换 Lambda 函数。
AWS验证 Lambda 函数的 S3 存储桶读写权限。
Lambda 从 S3 存储桶读取文件并在本地将文件从EBCDIC转换为。ASCII
Lambda 在亚马逊上记录流程状态。 CloudWatch
Lambda 将ASCII文件写回亚马逊 S3。
注意:Copybook 解析器脚本在将元数据转换为 S3 存储桶JSON然后将其上传到 S3 存储桶之后,仅运行一次。初始转换后,任何EBCDIC使用上传到 S3 存储桶的相同JSON文件的文件都将使用相同的元数据。
工具
AWS工具
Amazon CloudWatch 可帮助您实时监控您的AWS资源和运行的应用程序AWS的指标。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWS CloudShell是一个基于浏览器的外壳,您可以使用AWS命令行界面 (AWSCLI) 和一系列预装的开发工具来管理AWS服务。
AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。
AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。Lambda 仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
其他工具
代码
此模式的代码可在 GitHub mainframe-data-utilities
最佳实践
考虑下面的最佳实践:
在 Amazon 资源名称 (ARN) 级别设置所需的权限。
始终为策略授予最低权限权限。IAM有关更多信息,请参阅IAM文档IAM中的安全最佳实践。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建环境变量。 | 将以下环境变量复制至文本编辑器,然后将<placeholder>以下示例中的值替换为您的资源值:
注意:稍后您将创建对您的 S3 存储桶、AWS账户和AWS区域的引用。 要定义环境变量,请打开CloudShell 控制台 注意:每次 CloudShell 会话重新启动时都必须重复此步骤。 | 将军 AWS |
创建工作文件夹。 | 要简化以后的资源清理过程,请运行以下命令在中 CloudShell 创建一个工作文件夹:
注意:每次断开与 CloudShell 会话的连接时,都必须将目录更改为工作目录 ( | 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
创建 Lambda 函数的信任策略。 | EBCDIC转换器在 Lambda 函数中运行。该函数必须有IAM角色。在创建IAM角色之前,必须定义一个信任策略文档,使资源能够承担该策略。 在 CloudShell 工作文件夹中,通过运行以下命令创建策略文档:
| 将军 AWS |
创建用于 Lambda 转换的IAM角色。 | 要创建IAM角色,请在 CloudShell 工作文件夹中运行以下AWSCLI命令:
| 将军 AWS |
为 Lambda 函数创建IAM策略文档。 | Lambda 函数必须具有对 S3 存储桶的读写访问权限以及对 Amazon 日志的写入权限。 CloudWatch 要创建IAM策略,请在 CloudShell 工作文件夹中运行以下命令:
| 将军 AWS |
将IAM策略文档附加到该IAM角色。 | 要将IAM策略附加到IAM角色,请从您的 CloudShell 工作文件夹中运行以下命令:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
下载EBCDIC转换源代码。 | 在 CloudShell 工作文件夹中,运行以下命令从中下载 mainframe-data-utilities源代码 GitHub:
| 将军 AWS |
创建ZIP软件包。 | 在 CloudShell 工作文件夹中,运行以下命令来创建用于转换的 Lambda 函数的ZIPEBCDIC包:
| 将军 AWS |
创建 Lambda 函数。 | 在 CloudShell 工作文件夹中,运行以下命令来创建用于EBCDIC转换的 Lambda 函数:
注意:环境变量布局告知 Lambda 函数JSON元数据所在的位置。 | 将军 AWS |
为 Lamba 函数创建基于资源的策略。 | 在 CloudShell 工作文件夹中,运行以下命令以允许您的 Amazon S3 事件通知触发 Lambda 函数进行EBCDIC转换:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
为 Amazon S3 的事件通知创建配置文档。 | 当文件放入输入文件夹时,Amazon S3 事件通知会启动EBCDIC转换 Lambda 函数。 在 CloudShell 工作文件夹中,运行以下命令为 Amazon S3 事件通知创建JSON文档:
| 将军 AWS |
创建 Amazon S3 事件通知。 | 在 CloudShell 工作文件夹中,运行以下命令来创建 Amazon S3 事件通知:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
解析字COBOL帖。 | 在 CloudShell 工作文件夹中,运行以下命令将示例COBOL抄写本解析为JSON文件(该文件定义了如何正确读取和切片数据文件):
| 将军 AWS |
添加转换规则。 | 样本数据文件及其对应的COBOL副本是一个多布局文件。这意味着转换必须按某些规则对数据进行切片。在这种情况下,每行位置 3 和 4 的字节定义了布局。 在 CloudShell 工作文件夹中,编辑
| 通用AWS、IBM大型机、Cobol |
将JSON元数据上传到 S3 存储桶。 | 在 CloudShell 工作文件夹中,运行以下AWSCLI命令将JSON元数据上传到您的 S3 存储桶:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
将EBCDIC文件发送到 S3 存储桶。 | 在 CloudShell 工作文件夹中,运行以下命令将EBCDIC文件发送到 S3 存储桶:
注意:我们建议您为输入 (EBCDIC) 和输出 (ASCII) 文件设置不同的文件夹,以免在ASCII文件上传到 S3 存储桶时再次调用 Lambda 转换函数。 | 将军 AWS |
检查输出情况。 | 在 CloudShell 工作文件夹中,运行以下命令以检查ASCII文件是否在您的 S3 存储桶中生成:
注意:数据转换可能需要几秒钟才能完成。我们建议您多次检查该ASCII文件。 ASCII文件可用后,运行以下命令将文件从 S3 存储桶下载到当前文件夹:
检查ASCII文件内容:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
(可选)准备变量与文件夹。 | 如果与断开连接 CloudShell,请重新连接,然后运行以下命令将目录更改为工作文件夹:
确保您已定义环境变量:
| 将军 AWS |
移除存储桶的通知配置。 | 在 CloudShell 工作文件夹中,运行以下命令以删除 Amazon S3 事件通知配置:
| 将军 AWS |
删除 Lambda 函数。 | 在 CloudShell 工作文件夹中,运行以下命令删除转换器的 Lambda 函数:EBCDIC
| 将军 AWS |
删除IAM角色和策略。 | 在 CloudShell 工作文件夹中,运行以下命令以删除EBCDIC转换器角色和策略:
| 将军 AWS |
删除 S3 存储桶内生成的文件。 | 在 CloudShell 工作文件夹中,运行以下命令删除 S3 存储桶中生成的文件:
| 将军 AWS |
删除工作文件夹。 | 在 CloudShell 工作文件夹中,运行以下命令以删除
| 将军 AWS |
相关资源
大型机数据实用程序 README
() GitHub EBCDIC字符集
(IBM文档) EBCDIC到 ASCII
(IBM文档) COBOL
(IBM文档) 使用 Amazon S3 触发器调用 Lambda 函数(Lambd a 文档)AWS