

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 入門 適用於 SAP ABAP 的 AWS SDK
<a name="getting-started"></a>

本節說明如何開始使用 SDK。它包含安裝 SDK、執行基本組態，以及建立 Hello World 程式碼範例，將片語從一種語言轉譯為另一種語言的相關資訊。如果您是初次使用 AWS SDK，建議您在沙盒環境中執行這些步驟。

**Topics**
+ [步驟 1：準備 AWS 您的帳戶](#prepare-account)
+ [步驟 2：安裝 SDK](#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>

若要開始使用適用於 SAP ABAP 的 SDK，您必須有作用中的 AWS 帳戶 。 AWS 帳戶 即使您的 SAP 系統是在內部部署、SAP Business Technology Platform (BTP) 上或其他雲端供應商託管，您也需要 。

如果您的 SAP 系統在 AWS 雲端上執行，則您將呼叫 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 Resource Name (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 Credential Store 服務的登入資料
  + 特定角色 – 當 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 Roles Anywhere 使用憑證](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/using-iam.html)

## 步驟 2：安裝 SDK
<a name="installation-sdk"></a>

如需安裝說明，請參閱下列索引標籤。

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

在您的 SAP 系統中匯入適用於 SAP ABAP 傳輸的 SDK。您可以將傳輸匯入任何用戶端。如需詳細資訊，請參閱[安裝適用於 SAP ABAP 的 SDK](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/installation.html)。

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

使用**部署產品**應用程式安裝適用於 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`。
    + **OPT-IN：enh 遙測**：將此保留空白。
  + 選取**儲存**。
+ 前往**執行期設定** → **作用中案例**。
  + 在**新案例**下，選取 `DEFAULT`。
  + 選取**遞交案例變更**。
  + 接受提示。

 **現場部署系統的先決條件** 

如果您的 SAP 系統正在內部部署或其他雲端中執行，則必須將登入資料存放在 SAP 資料庫中。登入資料會使用 SAP SSF 加密，並需要設定的密碼編譯程式庫，例如 SAP 的 CommonCryptoLib。

`/AWS1/IMG` 交易中說明設定 SSF for SDK for SAP ABAP 的步驟。

**注意**  
 如果您的 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**：下拉式清單，您可以在其中找到由 Basis 管理員建立的 DEFAULT 案例。
    + **AWS 區域**：輸入您要呼叫 AWS 的區域。如果您的 SAP 系統正在執行 AWS，請輸入正在執行 AWS 的區域。
    + 身分驗證方法：
      + 如果您的 SAP 系統在 Amazon EC2 上執行，**請透過中繼資料選取執行個體角色**。
      + 如果您的 SAP 系統正在內部部署或其他雲端中執行，**請從 SSF Storage 選取登入**資料。
        + 選取**設定登入資料**。
        + 輸入您在上一個步驟中建立的存取金鑰 ID 和私密存取金鑰。
  + **將停用 IAM 角色**保留空白。
  + 選取**儲存**。
+ 按一下 **IAM 角色映射**樹狀目錄分支。
  + 選取**新項目**。
    + 輸入**序號**：010。
    + 輸入**邏輯 IAM 角色**：TESTUSER。
    + 輸入 **IAM 角色 ARN**：輸入包含上一個步驟中建立之`TranslateReadOnly`政策的 IAM 角色 arn：aws：。

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

使用 SAP Credential Store 設定身分驗證。如需詳細資訊，請參閱[使用 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**：下拉式清單，您可以在其中找到由 Basis 管理員建立的 DEFAULT 案例。
  + **AWS 區域**：輸入您要呼叫 AWS 的區域。如果您的 SAP 系統正在其中執行 AWS，請輸入正在其中執行 AWS 的區域。
  + 身分驗證方法：**從 SAP Credential Store 選取登入**資料。
  + 輸入儲存在 SAP Credentials Store 中登入資料的**命名空間**和**金鑰名稱**。
  + 輸入建立的**通訊安排**名稱，以在適用於 SAP ABAP 的 SDK - BTP 版本和 SAP 登入資料存放區之間建立通訊。
  + **將停用 IAM 角色**保留空白。
+ 在已建立項目旁的向右箭頭鍵上按一下滑鼠右鍵，以導覽至 **IAM 角色映射**索引標籤。

  選取**新增項目**。
  + 輸入**序號**：010。
  + 輸入**邏輯 IAM 角色**：TESTUSER。
  + 輸入 **IAM 角色 ARN**：輸入包含上一個步驟中建立之`TranslateReadOnly`政策的 IAM 角色 arn：aws：。

------

## 步驟 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`
  + 選取**儲存**。
  + 選取**產生**。
  + 選取**返回**。
  + 選取**儲存**以儲存角色。

**將 PFCG 角色指派給 SAP 使用者**

指派`ZAWS_SDK_DEMO_TESTUSER` 角色的任何使用者將獲授權使用 AWS SDK 函數與 `DEMO` SDK 描述檔中設定的設定。授權使用者也會擔任對應至該設定檔中邏輯 `TESTUSER` IAM 角色的 IAM 角色。
+ 執行交易 `SU01`。
  + 輸入將測試 AWS SDK 功能的 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 設定檔中設定的設定。授權使用者也會擔任對應至該設定檔中邏輯 `TESTUSER` IAM 角色的 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
```

如果您缺少授權、組態或 Basis 先決條件，您可能會收到錯誤訊息。請參閱以下範例。

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

如果您的 SAP 角色授權您使用 SDK 設定檔，並在您的 IAM 許可未設定為讓 SAP 系統擔任 IAM 角色時將其映射至邏輯 IAM 角色，則以下將是您的輸出。

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

在此情況下，請檢閱您在 中定義的 IAM 角色、使用者或兩者上的 IAM 許可和信任組態[步驟 1：準備 AWS 您的帳戶](#prepare-account)。

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

在 **Eclipse** > **執行為** > **ABAP 應用程式 （主控台） **上執行應用程式。如果成功，以下將是您的輸出。

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

如果您缺少授權、組態或 Basis 先決條件，您可能會收到錯誤訊息。請參閱以下範例。

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

如果您的 SAP 角色授權您使用 SDK 設定檔，並在您的 IAM 許可未設定為讓 SAP 系統擔任 IAM 角色時將其映射到邏輯 IAM 角色，則以下將是您的輸出。

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

在此情況下，請檢閱您在 中定義的 IAM 角色、使用者或兩者上的 IAM 許可和信任組態[步驟 1：準備 AWS 您的帳戶](#prepare-account)。

------