

AWS 大型机现代化服务（托管运行时环境体验）不再向新客户开放。有关类似于 AWS 大型机现代化服务（托管运行时环境体验）的功能，请浏览 AWS 大型机现代化服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅[AWS 大型机现代化可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

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

# 教程：将代码从汇编器转换为 COBOL AWS Mainframe Modernization
<a name="assembler-conversion-steps"></a>

您可以使用本文档作为 step-by-step指南，了解如何将大型机现代化汇编程序代码转换为 COBOL。除此之外，您还可以参阅[从汇编器到 COBOL 的自动代码转换讲习会](https://catalog.workshops.aws/awsm2ccm-assembler-cobol/en-US)，了解有关该转换过程的更多信息。

**Contents**
+ [先决条件](#tutorial-assembler-conversion-prerequisites)
+ [步骤 1：与共享构建资产 AWS 账户](#tutorial-assembler-conversion-share-assets)
+ [步骤 2：创建 Amazon S3 存储桶](#tutorial-assembler-conversion-create-bucket)
+ [步骤 3：创建 IAM 策略](#tutorial-assembler-conversion-IAM-policy)
+ [步骤 4：创建 IAM 角色](#tutorial-assembler-conversion-IAM-role)
+ [步骤 5：将 IAM 策略附加到 IAM 角色](#tutorial-assembler-conversion-attach)
+ [步骤 6：创建 CodeBuild 项目](#tutorial-assembler-conversion-create-project)
  + [步骤 6.1：创建定义项目](#tutorial-conversion-define-project)
  + [步骤 6.2：创建代码分析项目](#tutorial-conversion-analysis-project)
  + [步骤 6.3：创建代码转换项目](#tutorial-conversion-code-project)
+ [步骤 7：定义项目并上传源代码](#tutorial-assembler-conversion-define-upload)
+ [步骤 8：运行分析并理解报告](#tutorial-assembler-conversion-run-analysis)
+ [步骤 9：运行代码转换](#tutorial-assembler-conversion-run-code)
+ [步骤 10：验证代码转换](#tutorial-assembler-conversion-verify)
+ [步骤 11：下载转换后的代码](#tutorial-assembler-conversion-download)
+ [清理资源](#tutorial-assembler-conversion-clean-resources)

## 先决条件
<a name="tutorial-assembler-conversion-prerequisites"></a>

阅读本[了解汇编器转换的代码转换功能计费](assembler-conversion-billing.md)节，了解 Assembler 代码转换如何对您产生费用（账单报告） AWS Account Management，以及计费的工作方式。

## 步骤 1：与共享构建资产 AWS 账户
<a name="tutorial-assembler-conversion-share-assets"></a>

在此步骤中，请确保与您共享构建资产 AWS 账户，尤其是在使用资产的区域。

1. 打开 AWS Mainframe Modernization 控制台，网址为[https://console.aws.amazon.com/m2/](https://us-west-2.console.aws.amazon.com/m2/home?region=us-west-2#/)。

1. 在左侧导航中，选择**工具**。

1. 在**使用 mLogica 进行的 AWS 大型机现代化代码转换中，选择与我****共享资产**。 AWS 账户

**重要**  
您需要在要进行构建的每个 AWS 区域执行一次此步骤。

## 步骤 2：创建 Amazon S3 存储桶
<a name="tutorial-assembler-conversion-create-bucket"></a>

在此步骤中，您将创建 Amazon S3 存储桶。第一个存储桶是供 AWS CodeBuild 保存源代码的项目存储桶，然后推送输出存储桶以保存 AWS CodeBuild 输出（转换后的代码）。有关更多信息，请参阅《Amazon S3 用户指南》**中的[创建、配置和使用 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)。

1. 要创建项目存储桶，请登录 Amazon S3 控制台，然后选择**创建存储桶**。

1. 在**常规配置**中，提供存储桶的名称并指定要 AWS 区域 在哪里创建存储桶。一个示例名称为 `codebuild-regionId-accountId-bucket`，其中：
   + `regionId`是最 AWS 区域 重要的。
   +  `accountId`是你的 AWS 账户 身份证。
**注意**  
如果您要在与美国东部（弗吉尼亚北部）不同的 AWS 区域 位置创建存储桶，请指定`LocationConstraint`参数。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)。

1. 保留所有其他设置，并选择**创建存储桶**。

无论您为这些存储桶选择的名称如何，请务必在本教程中保持统一。

## 步骤 3：创建 IAM 策略
<a name="tutorial-assembler-conversion-IAM-policy"></a>

在此步骤中，您将创建一个 [IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。所提供的 IAM 策略授予与 Amazon S3、Amazon 弹性容器注册表、 CodeBuild 生成的[亚马逊 CloudWatch 日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)以及用于代码转换的 Amazon Elastic Compute Cloud 资源进行交互的特定权限 AWS CodeBuild 。此策略不是为客户自定义的。该政策授予交互权限，并获取代码转化统计数据以向客户开具相应账单的权限。 AWS Mainframe Modernization 

要了解如何创建 IAM 策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

**创建策略**

1. 登录 IAM 控制台，然后在左侧导航窗格中选择**策略**。

1. 选择**创建策略**。

1. 将下面的 JSON 策略复制并粘贴到策略编辑器中。

------
#### [ JSON ]

****  

   ```
   { 
       "Version":"2012-10-17",		 	 	  
       "Statement": [ 
           { 
               "Action": [
                   "s3:PutObject", 
                   "s3:GetObject", 
                   "s3:GetBucketLocation", 
                   "s3:ListBucket", 
                   "s3:PutObjectAcl", 
                   "s3:GetBucketAcl" 
               ], 
               "Resource": [ 
                   "arn:aws:s3:::codebuild-regionId-accountId-bucket", 
                   "arn:aws:s3:::codebuild-regionId-accountId-bucket/*", 
                   "arn:aws:s3:::aws-m2-repo-*" ], 
                       "Effect": "Allow" 
             }, 
             {
                 "Action": [ 
                   "ecr:GetAuthorizationToken", 
                   "ecr:BatchCheckLayerAvailability", 
                   "ecr:BatchGetImage", 
                   "ecr:GetDownloadUrlForLayer", 
                   "logs:*", 
                   "ec2:DescribeSecurityGroups", 
                   "ec2:DescribeSubnets", 
                   "ec2:DescribeNetworkInterfaces", 
                   "ec2:DeleteNetworkInterface", 
                   "ec2:CreateNetworkInterface", 
                   "ec2:DescribeDhcpOptions", 
                   "ec2:DescribeVpcs", 
                   "ec2:CreateNetworkInterfacePermission" 
               ], 
               "Resource": "*", 
               "Effect": "Allow" 
            } 
       ] 
   }
   ```

------

1. （可选）您可以向策略添加标签。标签是一些键值对，可以帮助您组织、跟踪或控制对策略的访问。

1. 选择**下一步: 审核**。

1. 提供策略名称，例如 `CodeBuildAWSM2CCMPolicy`。

1. （可选）您可以输入策略的描述，并检查策略摘要以确保其正确。

1. 选择**创建策略**。

## 步骤 4：创建 IAM 角色
<a name="tutorial-assembler-conversion-IAM-role"></a>

在此步骤中，在 CodeBuild 将之前创建[的 IAM 策略与该新 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)关联后，您将创建一个允许您与 AWS 资源交互的新 IAM 角色。

有关创建服务角色的信息，请参阅 *IAM 用户指南*中的[创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

1. 登录 IAM 控制台，然后在左侧导航窗格中选择**角色**。

1. 选择**创建角色**。

1. 在**可信实体类型**下，选择 **AWS 服务**。

1. 在 “**其他 AWS 服务的使用案例**” 下 **CodeBuild**，选择，然后**CodeBuild**再次选择。

1. 选择**下一步**。

1. 在**添加权限**页面上，选择**下一步**。您稍后给该角色分配策略。

1. 在**角色详细信息**下，提供角色的名称，例如 `IAMRoleTaskExecutionRoleForCodeBuild`。

1. 在**选择可信实体**下，验证策略文档是否如下所示：

------
#### [ JSON ]

****  

   ```
   {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
               {
                 "Effect": "Allow",
                 "Principal": {
                   "Service": "codebuild.amazonaws.com"
                 },
                 "Action": "sts:AssumeRole"
               }
             ]
   }
   ```

------

1. 选择**创建角色**。

## 步骤 5：将 IAM 策略附加到 IAM 角色
<a name="tutorial-assembler-conversion-attach"></a>

在此步骤中，您需要将之前创建的 IAM 策略附加到 `IAMRoleTaskExecutionRoleForCodeBuild` IAM 角色。

1. 登录 IAM 控制台，然后在左侧导航窗格中选择**角色**。

1. 在**角色**中，选择您之前创建的角色，例如 `IAMRoleTaskExecutionRoleForCodeBuild`。

1. 在**权限策略**中，依次选择**添加权限**和**附加策略**。

1. 在**其他权限策略**中，选择您之前创建的策略，例如 `CodeBuildAWSM2CCMPolicy`。

1. 选择**附加策略**。

## 步骤 6：创建 CodeBuild 项目
<a name="tutorial-assembler-conversion-create-project"></a>

在此步骤中，您将基于上述`buildspec.yml`文件创建三个不同的 CodeBuild 项目。

### 步骤 6.1：创建定义项目
<a name="tutorial-conversion-define-project"></a>

**创建定义项目**

1. 登录 CodeBuild 控制台，然后选择 “**创建构建项目**”。

1. 在**项目配置**部分中，为项目提供一个名称，例如 `1-awsm2ccm-define-project`。

1. 在**源**部分中，对于**源提供商**，保留默认选择。

1. 在**环境**部分中，选择**自定义映像**。

1. 在**环境类型**字段中，选择 **Linux**。

1. 在**映像注册表**中，选择**其他注册表**。

1. 在**外部注册表 URL** 字段中，按照 [AWS Mainframe Modernization 容器](assembler-conversion-components-process.md#assembler-conversion-components-container)部分中的说明进行操作。

1. 在**服务角色**下，选择**现有服务角色**，然后在**角色 ARN** 字段中，选择您之前创建的服务角色（例如 `IAMRoleTaskExecutionRoleForCodeBuild`）。

1. 展开**其他配置**部分，进行如下设置：

   1. VPC：请根据您的设置需要进行配置。

   1. 超时：设置为 **60 分钟**。

   1. 排队超时：设置为 **480 分钟**。

   1. 加密：选择适当的加密设置（默认设置即可）。

   1. 在**环境变量**部分中，逐一添加以下内容：
      + 名称：**PROJECT\_BUCKET**。值：`codebuild-regionId-accountId- bucket`。类型：**Plaintext**
      + 名称：**PROJECT\_DIR**。值：`prj_codebuild_01`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_** ACTION。值：`define_project`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_LOGGING\_BUCKET**。值：`s3:// codebuild-regionId-accountId-bucket`。类型：**Plaintext**

1. 在 **Buildspec** 部分中，选择**插入构建命令**，然后选择**切换到编辑器**。

1. 将当前值替换为：

   ```
   version: 0.2 
   phases: 
       build: 
           commands: 
               - . /app/awsm2ccm_prod/bin/setup_env.sh 
               - run_awsm2ccm.sh $PROJECT_DIR 
   artifacts: 
       files: 
           - '**/*' 
       discard-paths: no 
       base-directory: $PROJECT_DIR
   ```

   其中，PROJECT\_DIR 是其中可用的环境变量。 CodeBuild有关更多信息，请参阅[构建环境中的环境变量](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)。

1. 在**构件**部分中，执行以下操作：
   + 在**类型**下，选择 **Amazon S3**，然后选择您的输出存储桶，例如 `codebuild-regionId-accountId-bucket`。
   + 对于**路径**，请将此字段留空。
   + 对于**名称**，请输入 `prj_codebuild_01`。
   + 对于**构件打包**，请选择**无**。
   + 对于**覆盖构件名称**，请取消选中此选项。
   + 对于**加密**，请保留默认设置。

1. 对于**日志**部分，请按如下方式设置：
   + CloudWatch 日志：**已禁用**
   + S3 日志：**已启用**
   + 存储桶：`codebuild-regionId-account-bucket`
   + 日志路径：`CODEBUILD-LOGS`

1. 选择 **Create build project（创建构建项目）**。

### 步骤 6.2：创建代码分析项目
<a name="tutorial-conversion-analysis-project"></a>

**创建代码分析项目**

1. 登录 CodeBuild 控制台，然后选择 “**创建构建项目**”。

1. 在**项目配置**部分中，为项目提供一个名称，例如 `2-awsm2ccm-analysis`。

1. 在**源**部分中，对于**源提供商**，请选择 **Amazon S3**，然后选择您之前创建的输入存储桶（例如 `codebuild-regionId-accountId-bucket`）。

1. 在 **S3 对象键**或 **S3 文件夹**字段中，输入 `prj_codebuild_01`。

1. 在**环境**部分中，选择**自定义映像**。

1. 在**环境类型**字段中，选择 **Linux**。

1. 在**映像注册表**中，选择**其他注册表**。

1. 在**外部注册表 URL** 字段中，按照 [AWS Mainframe Modernization 容器](assembler-conversion-components-process.md#assembler-conversion-components-container)部分中的说明进行操作。

1. 在**服务角色**下，选择**现有服务角色**，然后在**角色 ARN** 字段中，选择您之前创建的服务角色（例如 `IAMRoleTaskExecutionRoleForCodeBuild`）。

1. 展开**其他配置**部分，进行如下设置：

   1. VPC：请根据您的设置需要进行配置。

   1. 超时：设置为 **60 分钟**。

   1. 排队超时：设置为 **480 分钟**。

   1. 加密：选择适当的加密设置（默认设置即可）。

   1. 在**环境变量**部分中，逐一添加以下内容：
      + 名称：**PROJECT\_BUCKET**。值：`codebuild-regionId-accountId-bucket`。类型：**Plaintext**
      + 名称：**PROJECT\_DIR**。值：`prj_codebuild_01`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_** ACTION。值：`analysis`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_LOGGING\_BUCKET**。值：`s3:// codebuild-regionId-accountId-bucket`。类型：**Plaintext**

1. 在 **Buildspec** 部分中，选择**插入构建命令**，然后选择**切换到编辑器**。

1. 将当前值替换为：

   ```
   version: 0.2 
   phases: 
       build: 
           commands: 
               - ln -s $CODEBUILD_SRC_DIR $PROJECT_DIR 
               - . /app/awsm2ccm_prod/bin/setup_env.sh 
               - run_awsm2ccm.sh $PROJECT_DIR
   artifacts: 
       files: 
           - '*.log' 
           - '_Converted/*/*' 
           - '_Reports/*' 
       secondary-artifacts: 
           reports: 
               files: 
                   - '_Reports/AWSM2CCM*' 
       discard-paths: no 
       base-directory: $PROJECT_DIR
   ```

   其中，PROJECT\_DIR 是其中可用的环境变量。 CodeBuild有关更多信息，请参阅[构建环境中的环境变量](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)。

1. 在**构件**部分中，执行以下操作：
   + 在**类型**下，选择 **Amazon S3**，然后选择您的输出存储桶（例如 `codebuild-regionId-accountId-bucket`）。
   + 对于**路径**，请输入 **ARTIFACTS**。
   + 对于**名称**，请输入 `prj_codebuild_01`。
   + 对于**构件打包**，请选择**无**。
   + 对于**覆盖构件名称**，请取消选中此选项。
   + 对于**加密**，请保留默认设置。

1. 对于**日志**部分，请按如下方式设置：
   + CloudWatch 日志：**已禁用**
   + S3 日志：**已启用**
   + 存储桶：`codebuild-regionId-account-bucket`
   + 日志路径：`CODEBUILD-LOGS`

1. 选择 **Create build project（创建构建项目）**。

### 步骤 6.3：创建代码转换项目
<a name="tutorial-conversion-code-project"></a>

**创建代码转换项目**

1. 登录 CodeBuild 控制台，然后选择 “**创建构建项目**”。

1. 在**项目配置**部分中，为项目提供一个名称（例如 `3-awsm2ccm-convert`）。

1. 在**源**部分中，对于**源提供商**，请选择 **Amazon S3**，然后选择您之前创建的输入存储桶（例如 `codebuild-regionId-accountId-bucket`）。

1. 在 **S3 对象键**或 **S3 文件夹**字段中，输入 `prj_codebuild_01`。

1. 在**环境**部分中，选择**自定义映像**。

1. 在**环境类型**字段中，选择 **Linux**。

1. 在**映像注册表**中，选择**其他注册表**。

1. 在**外部注册表 URL** 字段中，按照 [AWS Mainframe Modernization 容器](assembler-conversion-components-process.md#assembler-conversion-components-container)部分中的说明进行操作。

1. 在**服务角色**下，选择**现有服务角色**，然后在**角色 ARN** 字段中，选择您之前创建的服务角色，例如 `IAMRoleTaskExecutionRoleForCodeBuild`。

1. 展开**其他配置**部分，进行如下设置：

   1. VPC：请根据您的设置需要进行配置。

   1. 超时：设置为 **60 分钟**。

   1. 排队超时：设置为 **480 分钟**。

   1. 加密：选择适当的加密设置（默认设置即可）。

   1. 在**环境变量**部分中，逐一添加以下内容：
      + 名称：**PROJECT\_BUCKET**。值：`codebuild-regionId-accountId-bucket`。类型：**Plaintext**
      + 名称：**PROJECT\_DIR**。值：`prj_codebuild_01`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_** ACTION。值：`conversion`。类型：**Plaintext**
      + 名称：**AWSM2CCM\_LOGGING\_BUCKET**。值：`s3:// codebuild-regionId-accountId-bucket`。类型：**Plaintext**

1. 在 **Buildspec** 部分中，选择**插入构建命令**，然后选择**切换到编辑器**。

1. 将当前值替换为：

   ```
   version: 0.2 
   phases: 
       build: 
           commands: 
               - export AWSM2CCM_PUSH_RUNTIME_COPYBOOKS=y 
               - ln -s $CODEBUILD_SRC_DIR $PROJECT_DIR 
               - . /app/awsm2ccm_prod/bin/setup_env.sh
               - run_awsm2ccm.sh $PROJECT_DIR
   artifacts: 
       files: 
           - '*.log' 
           - '_Converted/*/*' 
           - '_Reports/*'  
       discard-paths: no 
       base-directory: $PROJECT_DIR
   ```

   其中，PROJECT\_DIR 是其中可用的环境变量。 CodeBuild有关更多信息，请参阅[构建环境中的环境变量](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)。

1. 在**构件**部分中，执行以下操作：
   + 在**类型**下，选择 **Amazon S3**，然后选择您的输出存储桶（例如 `codebuild-regionId-accountId-bucket`）。
   + 对于**路径**，请输入 **ARTIFACTS**。
   + 对于**名称**，请输入 `prj_codebuild_01`。
   + 对于**构件打包**，请选择**无**。
   + 对于**覆盖构件名称**，请取消选中此选项。
   + 对于**加密**，请保留默认设置。

1. 对于**日志**部分，请按如下方式设置：
   + CloudWatch 日志：**已禁用**
   + S3 日志：**已启用**
   + 存储桶：`codebuild-regionId-account-bucket`
   + 日志路径：`CODEBUILD-LOGS`

1. 选择 **Create build project（创建构建项目）**。

## 步骤 7：定义项目并上传源代码
<a name="tutorial-assembler-conversion-define-upload"></a>

定义项目会设置项目文件夹和配置文件，并使用默认配置进行初始化。在此步骤中，启动构建。要实现此目的，应按照以下步骤进行：

1. 登录 AWS CodeBuild 控制台。

1. 在左侧导航窗格中，选择**构建项目**。

1. 选择先前创建的项目（`1-awsm2ccm-define-project`）来进行构建

1. 选择**开始构建**，然后选择**立即开始**来定义项目。构建开始后，状态将变为*进行中*。

1. 选择 “**阶段详细信息**” 以查看由项目编排的每个步骤的进度。 AWS CodeBuild 

1. 等待所有步骤的状态均变为**已成功**。

1. 前往 Amazon S3 控制台。

1. 找到并单击名为 `codebuild-regionId-accountId-bucket` 的 Amazon S3 存储桶
   + **`CODEBUILD-LOGS/`**文件夹包含正在运行的 AWS CodeBuild 项目的 AWS CodeBuild 日志。
   + **`prj_codebuild_01/`** 文件夹包含项目结构。该文件夹在分析、扩展宏和转换步骤中使用。您可以选择 `prj_codebuild_01/` 来了解详细信息
   + **`cobol_reserved.rsw`** 是为转换器保留的配置文件（COBOL 字列表）。该文件在转换步骤中使用。
   + **`Macro_Expansion/`** 文件夹包含要扩展到汇编器程序中的宏。该文件夹在扩展宏步骤中使用。
   + **`macro_settings.json`** 配置文件包含自定义宏替换。该文件在扩展宏步骤中使用。
   + **`macrolib/`** 文件夹包含要转换的汇编器宏。该文件夹在分析和转换步骤中使用。

     1. 选择 `macrolib/`。

     1. 默认会提供一个名为 `MACRO1.mac` 的汇编器宏作为示例文件。请删除此文件，因为分析不需要该文件。

     1. 将您的宏上传到此目录中。
   + **`project_settings_aux.json`** 配置文件包含与代码页相关的设置。该文件在转换步骤中使用。
   + **`project_settings.json`** 配置文件包含转换器的设置。该文件在转换步骤中使用。
   + **`srclib/`** 文件夹包含要转换的汇编器程序。该文件夹在分析和转换步骤中使用。

     1. 选择 `srclib/`。

     1. 默认会提供名为 `SQtest01.asm` 和 `SQtest02.asm` 的两个汇编器程序作为示例。请删除这两个文件，因为分析和转换不需要它们。

     1. 将您的汇编器程序上传到此目录中。

1. 确认 `1-awsm2ccm-define-project` 步骤的状态。此步骤应该在**最新构建状态**选项卡下显示为“已成功”。

您已准备好进行下一步操作：**代码分析**。

## 步骤 8：运行分析并理解报告
<a name="tutorial-assembler-conversion-run-analysis"></a>

**注意**  
AWS Mainframe Modernization 代码转换*分析*步骤是免费的。

在此步骤中，您将启动另一个构建：

1. 在左侧导航窗格中，选择**构建项目**。

1. 选择您在步骤 6.2 中创建的项目来进行构建：`2-awsm2ccm-analysis`。

1. 选择**开始构建**，然后选择**立即开始**以生成分析报告。此时将开始进行构建，状态将变为*进行中*。

1. 选择 “**阶段详细信息**”，您将在其中看到项目精心策划的每个步骤的进度。 AWS CodeBuild 等到所有步骤的状态均变为*已成功*。

1. 从中 AWS 管理控制台，转到 Amazon S3 服务控制台。

1. 找到并单击 Amazon S3 存储桶：`codebuild-regionId-accountId-bucket`

   1. **`ARTIFACTS/`** 文件夹包含*分析*和*转换*步骤的输出。

   1. 选择 `ARTIFACTS/prj_codebuild_01/_Reports/`。

   1. 将提供以下报告：
      + `AWSM2CCM-Analysis-Report-<timestamp>.pdf`是一份执行报告，提供了 AWS Mainframe Modernization 代码转换计费和范围，改进了转换、转换摘要和详细的转化统计信息。该报告还汇总了项目级别的代码数量和可计费代码数，并提供了每个组件的指标和引用成员列表。在进行实际转换之前，请务必运行并检查此报告。
      + `Conversion_Detailed_Statistics.txt` 提供了每个组件中的每条指令的频率和预期转换结果（显示为“转换状态”）。该报告提供了一种方法来快速识别转换器是否支持指令。可能的*转换状态*结果有：
        + **完全转换**：指令将被准确地转换为 COBOL。
        + **部分转换**：支持该指令，但使用了不支持的参数或表达式。转换后可能需要手动调整。
        + **未转换**：转换器不支持该指令。
        + **预编译指令以进行验证**：这些指令通常包含在宏中，指的是在大型机上可能也称为*条件汇编语言*（例如 AIF、AGO）指令的指令。这些指令由预编译器处理，预编译器由此类指令驱动，会选择并生成*干净/静态*的 ASM 代码。这些指令依赖于所编译的宏参数的实际值。因此，同一个宏可以根据所传递的参数值生成不同的 ASM 代码片段。之所以如此，就是因为存在这样的*预编译指令*。在这种情况下，可以考虑扩展或重新设计宏。
      + `Conversion_Global_Statistics.txt` 提供组件级别的*转换状态*摘要。
      + `CrossReference_PgmToCpyMacro.txt` 报告汇编器程序对宏的依赖。该报告提供了一种方法来快速确定上传的代码中是否缺少任何宏。
      + `CrossReference_PgmToPgm.txt` 报告汇编器程序对其他汇编器程序的依赖。该报告提供了一种方法来快速确定上传的代码中是否缺少任何汇编器程序。

1. 返回 AWS CodeBuild 服务控制台。

1. 确认 **2-awsm2ccm-analysis** 步骤的状态。此步骤应该在**最新构建状态**选项卡下显示为**已成功**。

您已准备好进行下一步操作：**代码转换**。

## 步骤 9：运行代码转换
<a name="tutorial-assembler-conversion-run-code"></a>

**重要**  
AWS Mainframe Modernization 代码转换*转换*步骤将按您的使用量计费。有关定价的更多信息，请参阅 [了解汇编器转换的代码转换功能计费](assembler-conversion-billing.md)。

在此步骤中，您将配置转换过程，然后开始构建。

1. 从中 AWS 管理控制台，转到 Amazon S3 服务。

1. 找到并单击 Amazon S3 存储桶：`codebuild-regionId-accountId-bucket`。

   1. 转到 `prj_codebuild_01/`。

   1. 选择 `project_settings.json`，然后选择**下载**。

   1. 打开 `project_settings.json` 文件，您会看到以下 JSON 结构：

      ```
      { 
      "Source programs directory":"srclib", 
      "Source copybooks/macros directory":"macrolib", 
      "Copybook/Macros Conversion":"Called_only", 
      "Do not regenerate the Copy/Macro if already exists":"false", 
      "Target Compiler":"IBM", 
      "Endianess":"Big", 
      "Converted programs extension":"", 
      "Converted CICS programs extension":"", 
      "Converted copies/macros extension":"", 
      "Trace Level":"STANDARD", 
      "Trace file open mode":"append", 
      "Data definition level":5, 
      "Start picture column":40, 
      "Generate Sync FILLER with name":"FILL-SYNC", 
      "Use SYNC clause":"yes", 
      "Decimal Point Comma":"true", 
      "Original Source Placement":"RIGHT" 
      }
      ```

      其中，
      + **Source program directory**：包含转换所需的汇编器程序。
      + **Source copybooks/macros directory**：包含转换所需的汇编器宏和副本。
      + **Copybooks/Macros Conversion** 可为以下二者之一：
        + **全部**：此单选按钮表示*完全转换将转换*目录中所有 copybook/Macros 可用的内容，无论程序是否正在使用该目录。
        + **called\_** only：此单选按钮表示*完全转换只会转换*程序实际 copybook/Macros 使用的转换。
      + 
**重要**  
 Copy/Macro 如果它已经存在，则无需重新生成。

        对于已经转换（存在于输出文件夹中）的副本/宏，该工具将不会再次转换它。
      + **Target**：程序的转换结果（生成的代码）取决于目标 COBOL 编译器。支持以下选项：
        + “IBM”，适用于 IBM 大型机
        + “MF”，适用于 Micro Focus COBOL 
        + “VERYANT”，适用于 Veryant isCOBOL
        + “NTT”，适用于 NTT DATA Enterprise COBOL（Unikix）
      + **Endianess 和 Bitness**：程序的转换结果（生成的代码）取决于目标平台（Bitness/Endianess）。此组合支持选择以下受支持的选项：
        + Endianess：*Big*（对于 Big-Endian）/Little（对于 Little-Endian）。例如，IBM z/OS 的主机是 Big-Endian，Windows 是 Little-Endian，Linux 因发行版而异（例如，EC2 上的 Amazon Linux 2 是 Little-Endian）。
        + Bitness：32/64（如果未指定，默认为 32）。建议设置为 32 位。
      + **Converted program extension**：这是为了设置所生成的 COBOL 程序的文件扩展名。空（“”）：没有扩展名。对于 Rocket Software（前身为 Micro Focus）CO *BOL* 目标，建议 CBL 让 Rocket Enterprise Develo
      + **Converted CICS program extension**：这是为了设置所生成的 CICS COBOL 程序的文件扩展名。空（“”）：没有扩展名。对于 Rocket Software CO *BOL* 目标，建议使用 CBL 让 Rocket Enterprise 开发人员能够正确识别文件。
      + **Converted copybooks/macros extension**：这是为了设置所生成的 COBOL 副本的文件扩展名。空（“”）：没有扩展名。对于 Rocket Software COBOL 目标，建议使用 *CPY* 来让 Rocket Enterprise Developer
      + **跟踪级别**：跟踪是转换 CodeBuild 过程中使用的记录信息。用户可以通过选择所提供的任何一个选项来选择详细级别。
        + **ERROR** = TRACE ERROR：仅显示转换错误。
        + **STANDARD** = TRACE STANDARD：显示转换错误和标准信息。这是推荐设置。
        + **ALL** = TRACE ALL：最大跟踪级别
      + **Trace file open mode**：未使用。建议使用默认设置 *append*。
      + **Data definition level**：这表示在工作存储和链接部分中定义的子字段的初始级别（在级别“01”之后）。必须是一个数字。
      + **Start picture column**：这与生成的 COBOL 代码的格式有关，表示放置 *PIC* 子句的列（在字段名称之后）。必须是一个数字。
      + **Original source placement**：这表示注释在程序中的放置位置。有两个选项：
        + **RIGHT**：此选项会将注释或附加信息放在第七十三（73）列之后的右侧位置。在 COBOL 中，代码写在前七十二（1-72）列中，从第七十三列开始（>= 73 列）的任何内容都将被视为注释。
        + **ABOVE**：此选项会将注释放在已转换内容的上方。
      + **Generate Sync FILLER with name**：此选项与二进制字段（汇编器“H”、“F”、“D”数据类型，这些数据类型会转换为 COBOL“COMP”数据类型）在内存中的对齐有关。为了保证正确的*对齐边界*，将在转换过程中添加显式*填充*字段。这是一个基于文本的选项，其值必须是字符串（如 FILL-SYNC）。
      + **Use SYNC clause**：此选项与二进制字段在内存中的对齐有关。Yes = 将所有字段转换为 COBOL。“COMP”将用“SYNC”子句定义（例如，05 WRKFLD PIC S9(09) COMP SYNC）。
      + **Decimal Point Comma**：为 true 时，会将 *DECIMAL-POINT IS COMMA* 子句添加到“SPECIAL-NAMES”COBOL 段落中。

   1. 根据您的需求更改相应的参数，然后保存 `project_settings.json`。

   1. 从 Amazon S3 存储桶中的 `prj_codebuild_01/` 中删除现有的 `project_settings.json` 文件，然后上传新版本。

1. 返回 AWS CodeBuild 服务。

1. 选择先前创建的项目（`3-awsm2ccm-convert`）来进行构建

   1. 选择**开始构建**，然后选择**立即开始**，将汇编器程序和宏转换为 COBOL 程序和副本。

   1. 等待此项目的构建状态变为**已成功**。该状态会显示在**最新构建状态**选项卡下。

## 步骤 10：验证代码转换
<a name="tutorial-assembler-conversion-verify"></a>

1. 从中 AWS 管理控制台，转到 Amazon S3 服务。

1. 找到并单击 Amazon S3 存储桶：`codebuild-regionId-accountId-bucket`。

1. 导航到**`awsm2ccm-do-not-delete `**。 AWS Mainframe Modernization 在转换过程中，代码转换会为每个汇编器或宏模块创建编码的二进制文件。这些文件对于防止向客户重复计费以及跟踪所提供的汇编器代码被分析和转换了多少至关重要。这些文件存放在以下位置：`codebuild-regionId-accountId- bucket/awsm2ccm-do-not-delete/<your_AWS_account_id>/Hash`。这些编码的文件不包含任何汇编器代码，也不能从中提取客户代码。
**重要**  
请勿手动编辑或删除这些文件。编辑或删除这些文件可能会导致对相同组件进行重复计费。

   请将 **`awsm2ccm-do-not-delete/`** 文件夹视为系统管理的目录。对此目录或其内容进行任何更改 支持 之前，请先进行咨询。

1. 单击 `codebuild-regionId-accountId-bucket` 返回存储桶。

1. 选择 **`ARTIFACTS/prj_codebuild_01/`**。**\_Converted/** 文件夹包含作为代码转换步骤的结果生成的 COBOL 输出。该文件夹将包含以下子目录：
   + **copybooks/** 文件夹，包含生成的 COBOL 副本。
   + **programs/** 文件夹，包含生成的 COBOL 程序。
   + **runtime\_lib/** 文件夹，包含解决方案提供的其他 COBOL 程序和副本。

1. 如果*分析报告和其他报告*表明转换成功，并且 AWS CodeBuild 项目标记为**成功**，请从 **\_** Conver `3-awsm2ccm-convert` ted/ 目录中下载 COBOL 代码和抄本。

## 步骤 11：下载转换后的代码
<a name="tutorial-assembler-conversion-download"></a>

在此步骤中，从 **\_Converted/** 目录中下载 COBOL 代码和副本，然后在目标 COBOL 环境中对其进行编译。

1. 从中 AWS 管理控制台，转到 Amazon S3 服务。

1. 找到并单击 Amazon S3 存储桶：`codebuild-regionId-accountId-bucket`。

1. 导航到以下位置：` ARTIFACTS/prj_codebuild_01/_Converted/`。

1. 从 **\_Converted/** 下的所有子目录中下载转换后的 COBOL 代码。您也可以使用以下 CLI 命令一次性下载它们：

   ```
   aws s3 cp s3://codebuild-regionId-accountId- 
   bucket/ARTIFACTS/prj_codebuild_01/_Converted/ . --recursive
   ```

1. 在目标 COBOL 环境中分析和编译转换后的 COBOL。

## 清理资源
<a name="tutorial-assembler-conversion-clean-resources"></a>

如果您不再需要为本教程创建的资源，请将其删除，以免产生额外费用。为此，请完成以下步骤：
+ 删除您为本教程创建的 S3 存储桶。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[删除存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。
+ 删除您为本教程创建的 IAM 策略。有关更多信息，请参阅《IAM 用户指南》**中的[删除 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-delete.html)。
+ 删除您为本教程创建的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除角色或实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。
+ 删除您为本教程创建的 CodeBuild 项目。有关更多信息，请参阅《*AWS CodeBuild 用户指南》 CodeBuild*[中的删除构建项目](https://docs.aws.amazon.com/codebuild/latest/userguide/delete-project.html)。