

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

# 入门 适用于 SAP ABAP 的 AWS SDK
<a name="getting-started"></a>

本节介绍如何开始使用 SDK。其中包括有关安装 SDK、执行基本配置和创建使用不同语言翻译短语的 Hello World 代码示例的信息。如果您不熟悉 AWS SDK，我们建议您在沙盒环境中执行这些步骤。

**Topics**
+ [

## 第 1 步：准备 AWS 账户
](#prepare-account)
+ [

## 第 2 步：安装软件开发工具包
](#installation-sdk)
+ [

## 步骤 3：配置 SDK
](#configure)
+ [

## 第 4 步：功能设置
](#functional-setup)
+ [

## 步骤 5：授权 SAP 用户
](#authorize-users)
+ [

## 第 6 步：编写代码
](#write-code)
+ [

## 步骤 7：运行应用程序
](#run-application)

## 第 1 步：准备 AWS 账户
<a name="prepare-account"></a>

必须准备一个活动 AWS 账户 ，才能开始使用适用于 SAP ABAP 的 SDK。 AWS 账户 即使你的 SAP 系统托管在本地、SAP 业务技术平台 (BTP) 上或其他云提供商，你也需要一个。

如果您的 SAP 系统在 AWS Cloud 上运行，那么您将调用自己的 AWS 服务 AWS 账户。

**Topics**
+ [

### 适用于 SAP 用户的 IAM 角色
](#iamrole)
+ [

### 身份验证
](#authentication)

### 适用于 SAP 用户的 IAM 角色
<a name="iamrole"></a>
+ 根据 *AWS Identity and Access Management 用户指南*说明，创建 IAM 角色。有关更多信息，请参阅[创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。记下 IAM 角色的 Amazon 资源名称 (ARN) 以备后用。
+ 选择 Amazon EC2 作为用例。
+ 使用 `SapDemoTranslate` 作为角色名称。
+ 为角色附加 `TranslateReadOnly` 配置文件。
+ 角色必须具有以下实体，才能支持 SAP 系统代入此角色。将 `"111122223333"` 替换为您的 AWS 账号。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sts:AssumeRole"
              ],
              "Principal": {
                  "AWS": "111122223333"
              }
          }
      ]
  }
  ```

------

  此示例表明，来自的任何委托人 AWS 账户 `"111122223333"`都可以担任该角色。这是一个广泛的权限，适用于 proof-of-concept。在生产环境中可以使用权限更小的主体，如以下示例。
  + 特定用户 — 当 SAP 系统使用以下任一用户时：
    + 来自本地 SAP 系统的 SSF 加密证书
    + 来自 SAP BTP、ABAP 环境上的 SAP 凭证存储服务的证书
  + 特定角色：当 SAP 系统运行在 Amazon EC2 上且具有实例配置文件时。
  + Amazon EC2：当 SAP 系统运行在 Amazon EC2 上但*没有*实例配置文件时。

有关更多信息，请参阅 [IAM 安全最佳实践](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/best-practices.html)。

### 身份验证
<a name="authentication"></a>

身份验证取决于 SAP 系统的托管位置。

**Topics**
+ [

#### 在 AWS 云上
](#aws-cloud)
+ [

#### 本地、SAP BTP 或其他云端
](#on-premises-other)

#### 在 AWS 云上
<a name="aws-cloud"></a>

确保运行 SAP 系统的 EC2 实例的实例配置文件具有以下权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111122223333:role/SapDemoTranslate"
        }
    ]
}
```

------

添加之前步骤中记录的 ARN。

此权限能让 SAP 系统代表 ABAP 用户代入 `SapDemoTranslate` 角色。

#### 本地、SAP BTP 或其他云端
<a name="on-premises-other"></a>

如果您的 SAP 系统位于本地、SAP BTP 或其他云上，请使用以下步骤使用私有访问密钥建立身份验证连接。

1. 创建 IAM 用户。有关更多信息，请参阅[创建 IAM 用户（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)。

1. 使用 `SapDemoSID` 作为 IAM 用户名以及 `SID` 作为 SAP 系统的系统 ID。

1. 为用户分配 `SapDemoTranslate` 角色。

保留`access_key`和`secret_access_key`。您必须在 SAP 系统中配置这些凭证。

**注意**  
如果您的 SAP 系统位于本地、SAP BTP 或其他云上，则可以使用以下选项之一进行身份验证。  
使用 SSF 或 SAP 凭据存储进行@@ [秘密访问密钥身份验证](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/system-authentication.html#key-authentication)
[随处使用带有 IAM 角色的证书](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/using-iam.html)

## 第 2 步：安装软件开发工具包
<a name="installation-sdk"></a>

有关安装说明，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

向 SAP 系统传输适用于 SAP ABAP 的 SDK。此传输内容可导入任意客户端。有关更多信息，请参阅[安装适用于 SAP ABAP 的开发工具包](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/installation.html)。

------
#### [ SDK for SAP ABAP - BTP edition ]

使用 Deplo **y Pro** duct 应用程序安装适用于 SAP ABAP 的 SDK-BTP 版。有关更多信息，请参阅[安装适用于 SAP ABAP 的 SDK-BTP 版](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/installation-btp.html)。

------

## 步骤 3：配置 SDK
<a name="configure"></a>

在配置 SDK 之前，请确保您拥有所需的授权。有关更多信息，请参阅 [SAP 授权。](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/authorizations.html)

有关配置说明，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

运行`/AWS1/IMG`事务以打开适用于 SAP ABAP 的 SDK 实施指南。如需运行此事务，请在 SAP 系统的命令栏中输入 `/n/AWS1/IMG `，然后点击 **Enter**。

完成以下配置。
+ 转到**技术先决条件**。
  + 查看推荐的[参数](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/prerequisites.html#parameters)和 [HTTPS 连接](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/prerequisites.html#https-connectivity)。
+ 转到**全局设置** → **配置场景**。
  + 根据[全局设置中的建议更改设置](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/global-settings.html)。
+ 转到**全局设置** → **技术设置**。
  + 根据[全局设置中的建议更改设置](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/global-settings.html)。
+ 转到**运行时设置** → **记录和跟踪**。
  + 选择**新建条目**。
    + **跟踪等级**：无跟踪。
    + **最大转储行数**：`100`。
    + **选择加入：增强遥测功能**：留空。
  + 选择**保存**。
+ 转到**运行时设置** → **活动场景**。
  + 在**新建场景**中选择 `DEFAULT`。
  + 选择**提交场景更改**。
  + 接受提示。

 **本地系统的先决条件** 

如果 SAP 系统运行在本地或其他云中，则必须将凭证存储在 SAP 数据库中。凭证使用 SAP SSF 进行加密，需要配置加密库，例如 SAP 的加密库。 CommonCryptoLib

`/AWS1/IMG` 事务描述了为适用于 SAP ABAP 的 SDK 配置 SSF 的步骤。

**注意**  
 如果 SAP 系统运行在 Amazon EC2 上，则上述先决条件不适用。因为运行在 Amazon EC2 上的 SAP 系统会在 Amazon EC2 实例元数据中检索自动轮换的短期凭证。

------
#### [ SDK for SAP ABAP - BTP edition ]

在 Web 浏览器中打开您的 ABAP 环境，然后导航到 “自定义业务配置” 应用程序。

完成以下配置。
+ 转至**配置方案**。
  + 根据[全局设置中的建议更改设置](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/global-settings.html)。
+ 前往 **“技术设置”**。
  + 根据[全局设置中的建议更改设置](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/global-settings.html)。

------

## 第 4 步：功能设置
<a name="functional-setup"></a>

有关设置说明，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

运行事务`/AWS1/IMG`（`/n/AWS1/IMG`在命令栏中输入，然后选择 **Enter**）以打开 AWS SDK 的实现指南。
+ 转到**应用程序配置** → **SDK 配置文件**。
  + 选择**新建条目**。
    + **配置文件**：`DEMO`。
    + **描述：**`Demo profile`
    + 选择**保存**。
+ 突出显示创建的条目，然后单击**身份验证和设置**树分支。
  + 选择**新建条目**。
    + **SID**：当前 SAP 系统的系统 ID。
    + **客户端**：当前 SAP 系统的客户端。
    + **场景 ID**：下拉列表，其中列出了由基础管理员创建的默认场景。
    + **AWS 区域**：输入您要拨打电话的 AWS 区域。如果您的 SAP 系统正在运行 AWS，请输入其运行所在的 AWS 区域。
    + 身份验证方法：
      + 如果 SAP 系统运行在 Amazon EC2 上，则选择**元数据中的实例角色**。
      + 如果 SAP 系统运行在本地或其他云中，则选择 **SSF 存储中的凭证**。
        + 选择**设置凭证**。
        + 输入之前步骤中创建的访问密钥 ID 和秘密访问密钥。
  + 将**禁用 IAM 角色**留空。
  + 选择**保存**。
+ 单击 **IAM 角色映射**树分支。
  + 选择**新建条目**。
    + 输入**序列号**：010。
    + 输入** IAM 逻辑角色**：TESTUSER。
    + 输入** IAM 角色 ARN**：输入 IAM 角色的 arn:aws:，其中包含之前步骤中创建的 `TranslateReadOnly` 策略。

------
#### [ SDK for SAP ABAP - BTP edition ]

使用 SAP 凭据存储设置身份验证。有关更多信息，请参阅[使用 SAP 凭据存储](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/credential-store.html)。

在 Web 浏览器中打开您的 ABAP 环境，然后导航到 “自定义业务配置” 应用程序。
+ 前往 **SDK 配置文件**。
  + 选择 “**编辑”** 以创建新的配置文件。
    + **配置文件**：`DEMO`。
    + **描述：**`Demo profile`
+ 选择创建的条目旁边的右箭头键导航到 “**身份验证和设置**” 选项卡。

  选择**新建条目**。
  + **SID**：当前 SAP 系统的系统 ID。
  + **客户端**：当前 SAP 系统的客户端。
  + **场景 ID**：下拉列表，其中列出了由基础管理员创建的默认场景。
  + **AWS 区域**：输入您要拨打电话的 AWS 区域。如果您的 SAP 系统正在运行 AWS，请输入其运行所在的 AWS 区域。
  + 身份验证方法：**从 SAP 凭据存储中选择凭据**。
  + 输入存储在 SAP 凭证存储中的凭据的**命名空间**和**密钥名称**。
  + 输入为在适用于 SAP ABAP 的 SDK-BTP 版本和 SAP 凭证存储区之间建立通信而创建的通信**安排**的名称。
  + 将**禁用 IAM 角色**留空。
+ 右键单击创建的条目旁边的右箭头键以导航到 **IAM 角色映射**选项卡。

  选择**新建条目**。
  + 输入**序列号**：010。
  + 输入** IAM 逻辑角色**：TESTUSER。
  + 输入** IAM 角色 ARN**：输入 IAM 角色的 arn:aws:，其中包含之前步骤中创建的 `TranslateReadOnly` 策略。

------

## 步骤 5：授权 SAP 用户
<a name="authorize-users"></a>

默认情况下，SAP 用户无权使用 AWS 功能。必须使用 SAP 权限对用户进行明确授权。有关更多详细信息，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

**创建 PFCG 角色**
+ 转到 `PFCG` 事务
+ 输入角色名称 `ZAWS_SDK_DEMO_TESTUSER` 并选择**创建单个角色**。
  + **描述**：`Role for demo AWS SDK functionality`。
  + 转到**授权**选项卡。
  + 选择**更改授权数据**并接受信息弹出窗口。
  + 在*选择模板*弹出窗口中选择**不选择模板**。
  + 在工具栏中选择**手动添加**。
  +  添加以下授权对象：
    +  `/AWS1/LROL` 
    +  `/AWS1/SESS` 
  +  在授权树中输入：
    +  访问 AWS 的个人资料 APIs：`DEMO`
    +  IAM 逻辑角色：`TESTUSER`
  + 选择**保存**。
  + 选择**生成**。
  + 选择**返回**。
  + 选择**保存**，保存角色。

**向 SAP 用户分配 PFCG 角色**

任何分配了`ZAWS_SDK_DEMO_TESTUSER`角色的用户都将被授权使用 AWS SDK 配置文件中配置的设置的 `DEMO` SDK 功能。授权用户还将代入 IAM 角色，其映射在配置文件的 `TESTUSER` IAM 逻辑角色中。
+ 运行 `SU01` 事务。
  + 输入将要测试 S AWS DK 功能的 SAP 用户的用户 ID。
  + 选择**更改**。
  + 转到**角色**选项卡，然后向用户分配 `ZAWS_SDK_DEMO_TESTUSER` 角色。
  + 选择**保存**。

------
#### [ SDK for SAP ABAP - BTP edition ]

**创建业务角色**
+ 在 Web 浏览器中打开您的 ABAP 环境，然后导航到 “**维护业务角色**” 应用程序。
+ 选择 “**从模板创建**”，然后输入以下详细信息。
  + **模板** —选择`/AWS1/RT_BTP_ENDUSER`。
  + **新的业务角色 ID**-输入 ID。
  + **新业务角色描述**-输入描述。
+ 选择 “**确定**” 以查看业务角色的页面。
+ 在 “**常规角色详细信息**” 选项卡下，转到 “**访问类别**”，然后将 “**写入、读取、值帮助**” 字段设置为 “**受限**”。
+ 选择 “**维护限制**”，然后从左侧导航窗格中展开 “**分配的限制类型**”。更新 “**限制和值**” 部分中的以下字段。
  + 在 **“选择 SDK 会话**” 下，选择 **SDK 配置文件**旁边的铅笔图标，然后导航到 “**范围**” 选项卡。输入`DEMO`，然后选择**添加**。
  + 在 **“选择逻辑 IAM 角色**” 下，选择 “**逻辑 IAM 角色**” 旁边的铅笔图标，然后导航到 “**范围**” 选项卡。输入`TESTUSER`，然后选择**添加**。

    选择 **SDK 配置文件**旁边的铅笔图标，然后导航到 “**范围**” 选项卡。输入`DEMO`，然后选择**添加**
+ 返回到 “业务角色” 模板，然后打开 “**业务用户**” 选项卡。选择 “**添加**”，将新创建的业务角色分配给将测试 SDK 功能的 SAP 业务用户。选择**保存**。

分配给所创建业务角色的任何业务用户都将被授权使用 AWS SDK 配置文件中配置的设置的 `DEMO` SDK 功能。授权用户还将代入 IAM 角色，其映射在配置文件的 `TESTUSER` IAM 逻辑角色中。

------

## 第 6 步：编写代码
<a name="write-code"></a>

有关更多详细信息，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

1. 打开 `SE38` 事务。
   + 输入 `ZDEMO_TRANSLATE_HELLO_WORLD` 作为程序名称。
   + 选择 `Create`。
   + 输入 `AWS SDK Hello World In Any Language` 作为标题。
   + 类型：选择**可执行程序**。
   + 状态：选择**测试程序**。
   + 选择**保存**。
   + 将程序另存为**本地对象**。

**添加以下代码**。

```
*&---------------------------------------------------------------------*
*& Report  ZAWS1_DEMO_XL8_SIMPLE
*&
*&---------------------------------------------------------------------*
*& A simple demo of language translation with AWS Translate
*&
*&---------------------------------------------------------------------*
REPORT zaws1_demo_xl8_simple.

START-OF-SELECTION.
  PARAMETERS pv_text TYPE /aws1/xl8boundedlengthstring DEFAULT 'Hello, World' OBLIGATORY.

  PARAMETERS pv_lang1 TYPE languageiso DEFAULT 'EN' OBLIGATORY.
  PARAMETERS pv_lang2 TYPE languageiso DEFAULT 'ES' OBLIGATORY.

  TRY.
      DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ).
      DATA(go_xl8)     = /aws1/cl_xl8_factory=>create( go_session ).
      DATA(lo_output) = go_xl8->translatetext(
           iv_text               = pv_text
           iv_sourcelanguagecode = CONV /aws1/xl8languagecodestring( pv_lang1 )
           iv_targetlanguagecode = CONV /aws1/xl8languagecodestring( pv_lang2 )
      ).

      WRITE: / 'Source Phrase: ', pv_text.
      WRITE: / 'Target Phrase: ', lo_output->get_translatedtext( ).
    CATCH /aws1/cx_xl8unsuppedlanguage00 INTO DATA(lo_lang).
      WRITE: / 'ERROR' COLOR COL_NEGATIVE,
               'Cannot translate from',
               lo_lang->sourcelanguagecode,
               'to',
               lo_lang->targetlanguagecode.
    CATCH cx_root INTO DATA(lo_root).
      WRITE: / 'ERROR' COLOR COL_NEGATIVE, lo_root->get_text( ).
  ENDTRY.
```

------
#### [ SDK for SAP ABAP - BTP edition ]

1. 右键单击需要创建 ABAP 类的软件包，然后选择 “**新**建” > “**ABAP** 类”。

1. 输入`ZCL_DEMO_XL8_SIMPLE`类名，然后添加班级描述。选择**下一步**。

1. 创建或选择传输请求。选择 “**完成**”。

**添加以下代码**。

```
CLASS zcl_demo_xl8_simple DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_demo_xl8_simple IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.

    TRY.
        " input parameters
        DATA(pv_text) = |Hello, World|.
        DATA(pv_lang1) = |EN|.
        DATA(pv_lang2) = |ES|.

        DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ).
        DATA(go_xl8)     = /aws1/cl_xl8_factory=>create( go_session ).
        DATA(lo_output) = go_xl8->translatetext(
             iv_text               = pv_text
             iv_sourcelanguagecode = pv_lang1
             iv_targetlanguagecode = pv_lang2
        ).

        out->write( |Source Phrase: { pv_text }| ).
        out->write( |Target Phrase: { lo_output->get_translatedtext( ) }| ).
      CATCH /aws1/cx_xl8unsuppedlanguage00 INTO DATA(lo_lang).
        out->write( |ERROR - Cannot translate from { lo_lang->sourcelanguagecode } to { lo_lang->targetlanguagecode }| ).
      CATCH cx_root INTO DATA(lo_root).
        out->write( |ERROR - { lo_root->get_text( ) }| ).
    ENDTRY.
  ENDMETHOD.
ENDCLASS.
```

------

有关如何编写使用 SDK 的 ABAP 代码的详细信息，请参阅[使用 适用于 SAP ABAP 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/using-sdk.html)。

## 步骤 7：运行应用程序
<a name="run-application"></a>

有关更多详细信息，请参阅以下选项卡。

------
#### [ SDK for SAP ABAP ]

在 `SE38` 中运行应用程序。成功运行后将输出以下内容。

```
Source Phrase: Hello, World
Target Phrase: Hola, mundo
```

如果缺失授权、配置或基础先决条件，您会收到一条错误消息。请参阅以下示例。

```
ERROR Could not find configuration under profile DEMO with 
scenario DEFAULT for SBX:001
```

如果您尚未向 SAP 系统配置可代入 IAM 角色的 IAM 权限，就已获得 SAP 角色授予的 SDK 配置文件使用权限，并能够将其映射到 IAM 逻辑角色，则您会收到以下输出内容。

```
ERROR Could not assume role arn:aws:iam::111122223333:role/SapDemoTranslate
```

此时，请查看 [第 1 步：准备 AWS 账户](#prepare-account) 中定义的 IAM 角色和/或用户上的 IAM 权限和信任配置。

------
#### [ SDK for SAP ABAP - BTP edition ]

在 **Eclipse** > **运行**方式 > **ABAP 应用程序（控制台）上运行该应用程序**。成功运行后将输出以下内容。

```
Source Phrase: Hello, World
Target Phrase: Hola, mundo
```

如果缺失授权、配置或基础先决条件，您会收到一条错误消息。请参阅以下示例。

```
ERROR Could not find configuration under profile DEMO with 
scenario DEFAULT for SBX:001
```

如果您尚未向 SAP 系统配置可代入 IAM 角色的 IAM 权限，就已获得 SAP 角色授予的 SDK 配置文件使用权限，并能够将其映射到 IAM 逻辑角色，则您会收到以下输出内容。

```
ERROR Could not assume role arn:aws:iam::111122223333:role/SapDemoTranslate
```

此时，请查看 [第 1 步：准备 AWS 账户](#prepare-account) 中定义的 IAM 角色和/或用户上的 IAM 权限和信任配置。

------