

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

# 搭配 使用延伸套件 AWS Schema Conversion Tool
<a name="CHAP_ExtensionPack"></a>

*AWS SCT 延伸套件*是一種附加元件模組，可模擬來源資料庫中存在的函數，這些函數在將物件轉換為目標資料庫時需要。您必須先轉換資料庫結構描述，才能安裝 AWS SCT 延伸套件。

每個 AWS SCT 延伸套件都包含下列元件：
+ 資料庫結構描述 – 包括用於模擬特定線上交易處理 (OLTP) 和線上分析處理 (OLAP) 資料庫物件的 SQL 函數、程序和資料表，例如序列。此外， 會模擬來源資料庫中不支援的built-in-functions。此結構描述的名稱具有下列格式：`aws_database_engine_name_ext`。
+ AWS Lambda 函數 （適用於特定 OLTP 資料庫） – 包括模擬複雜資料庫功能的 AWS Lambda 函數，例如任務排程和傳送電子郵件。
+ OLAP 資料庫的自訂程式庫 – 包含一組 Java 和 Python 程式庫，可用於將 Microsoft SQL Server Integration Services (SSIS) 擷取、轉換和載入 (ETL) 指令碼遷移至 AWS Glue 或 AWS Glue Studio。

  Java 程式庫包含下列模組：
  + `spark-excel_2.11-0.13.1.jar` – 模擬 Excel 來源和目標元件的功能。
  + `spark-xml_2.11-0.9.0.jar`、 `poi-ooxml-schemas-4.1.2.jar`和 `xmlbeans-3.1.0.jar` – 模擬 XML 來源元件的功能。

  Python 程式庫包含下列模組：
  + `sct_utils.py` – 模擬來源資料類型並準備 Spark SQL 查詢的參數。
  + `ssis_datetime.py` – 模擬內建函數的日期和時間。
  + `ssis_null.py` – 模擬 `ISNULL`和`REPLACENULL`內建函數。
  + `ssis_string.py` – 模擬字串內建函數。

  如需這些程式庫的詳細資訊，請參閱 [針對 AWS SCT 延伸套件使用自訂程式庫](#CHAP_ExtensionPack.DW)。

您可以透過兩種方式套用 AWS SCT 延伸套件：
+ AWS SCT 當您從內容功能表中選擇**套用至資料庫**， 可以在套用目標資料庫指令碼時自動套用延伸套件。 AWS SCT 會在套用所有其他結構描述物件之前套用延伸套件。
+ 若要手動套用延伸套件，請選擇目標資料庫，然後從內容 （按一下滑鼠右鍵） 功能表中選擇**套用延伸套件。**在大多數情況下，自動應用程式已足夠。不過，如果不小心刪除套件，建議您手動套用套件。

每次您將 AWS SCT 延伸套件套用至目標資料存放區時，元件都會遭到覆寫，並 AWS SCT 顯示相關通知。若要關閉這些通知，請選擇**設定**、**全域設定**、**通知**，然後選取**隱藏延伸套件取代提醒**。

若要從 Microsoft SQL Server 轉換為 PostgreSQL，您可以使用 SQL Server 轉換為 PostgreSQL 延伸套件 AWS SCT。此延伸套件模擬 SQL Server Agent 和 SQL Server Database Mail。如需詳細資訊，請參閱[使用延伸套件在 PostgreSQL 中模擬 SQL Server 代理程式](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Agent.md)及[使用延伸套件模擬 PostgreSQL 中的 SQL Server Database Mail](CHAP_Source.SQLServer.ToPostgreSQL.ExtensionPack.Mail.md)。

您可以在下面找到有關使用 AWS SCT 延伸套件的詳細資訊。

**Topics**
+ [使用 AWS SCT 延伸套件的許可](#CHAP_ExtensionPack.Permissions)
+ [使用延伸套件結構描述](#CHAP_ExtensionPack.Schema)
+ [針對 AWS SCT 延伸套件使用自訂程式庫](#CHAP_ExtensionPack.DW)
+ [使用 AWS SCT 延伸套件中的 AWS Lambda 函數](#CHAP_ExtensionPack.OLTP)
+ [設定 AWS SCT 延伸套件的 函數](#CHAP_ExtensionPack.ConfigureFunctions)

## 使用 AWS SCT 延伸套件的許可
<a name="CHAP_ExtensionPack.Permissions"></a>

Amazon Aurora 的 AWS SCT 延伸套件使用 AWS Lambda 函數模擬郵件傳送、任務排程、佇列和其他操作。當您將 AWS SCT 延伸套件套用至目標 Aurora 資料庫時， 會 AWS SCT 建立新的 AWS Identity and Access Management (IAM) 角色和內嵌 IAM 政策。接著， AWS SCT 建立新的 Lambda 函數，並為傳出連線設定 Aurora 資料庫叢集 AWS Lambda。若要執行這些操作，請確定您將下列必要許可授予 IAM 使用者：
+ `iam:CreateRole` – 為您的 AWS 帳戶建立新的 IAM 角色。
+ `iam:CreatePolicy` – 為您的 AWS 帳戶建立新的 IAM 政策。
+ `iam:AttachRolePolicy` – 將指定的政策連接至您的 IAM 角色。
+ `iam:PutRolePolicy` – 更新內嵌在您的 IAM 角色中的內嵌政策文件。
+ `iam:PassRole` – 將指定的 IAM 角色傳遞至規則引擎。
+ `iam:TagRole` – 將標籤新增至 IAM 角色。
+ `iam:TagPolicy` – 將標籤新增至 IAM 政策。
+ `lambda:ListFunctions` – 查看 Lambda 函數的清單。
+ `lambda:ListTags` – 查看 Lambda 函數的標籤清單。
+ `lambda:CreateFunction` – 建立新的 Lambda 函數。
+ `rds:AddRoleToDBCluster` – 將 IAM 角色與您的 Aurora 資料庫叢集建立關聯。

Amazon Redshift 的 AWS SCT 延伸套件會模擬將轉換物件套用至 Amazon Redshift 時所需的來源資料倉儲基本函數。將轉換後的程式碼套用至 Amazon Redshift 之前，您必須套用 Amazon Redshift 的延伸套件。若要這樣做，請在 IAM 政策中包含 `iam:SimulatePrincipalPolicy`動作。

AWS SCT 使用 IAM 政策模擬器來檢查安裝 Amazon Redshift 延伸套件所需的許可。即使您已正確設定 IAM 使用者，IAM 政策模擬器也可以顯示錯誤訊息。這是 IAM 政策模擬器的已知問題。此外，當您的 IAM 政策中沒有 `iam:SimulatePrincipalPolicy`動作時，IAM 政策模擬器會顯示錯誤訊息。在這些情況下，您可以忽略錯誤訊息，並使用延伸套件精靈套用延伸套件。如需詳細資訊，請參閱[套用延伸套件](#CHAP_ExtensionPack.DW.Installing)。

## 使用延伸套件結構描述
<a name="CHAP_ExtensionPack.Schema"></a>

當您轉換您的資料庫或資料倉儲結構描述， AWS SCT 會新增額外的結構描述到您的目標資料庫。此結構描述會實作來源資料庫的 SQL 系統功能，當您將已轉換的結構描述寫入至目標資料庫時需要這些功能。這個額外的結構描述稱為延伸套件結構描述。

OLTP 資料庫的延伸套件結構描述的命名是根據來源資料庫，如下所示：
+ Microsoft SQL Server: `AWS_SQLSERVER_EXT`
+ MySQL: `AWS_MYSQL_EXT`
+ Oracle: `AWS_ORACLE_EXT`
+ PostgreSQL：`AWS_POSTGRESQL_EXT`

OLAP 資料倉儲應用程式的延伸套件結構描述的命名是根據來源資料存放區，如下所示：
+ Greenplum：`AWS_GREENPLUM_EXT`
+ Microsoft SQL Server: `AWS_SQLSERVER_EXT`
+ Netezza：`AWS_NETEZZA_EXT`
+ Oracle: `AWS_ORACLE_EXT`
+ Teradata：`AWS_TERADATA_EXT`
+ Vertica：`AWS_VERTICA_EXT`

## 針對 AWS SCT 延伸套件使用自訂程式庫
<a name="CHAP_ExtensionPack.DW"></a>

在某些情況下， AWS SCT 無法將來源資料庫功能轉換為目標資料庫中的同等功能。相關的 AWS SCT 延伸套件包含自訂程式庫，可模擬目標資料庫中 上的一些來源資料庫功能。

如果您要轉換交易資料庫，請參閱 [使用 AWS SCT 延伸套件中的 AWS Lambda 函數](#CHAP_ExtensionPack.OLTP)。

### 套用延伸套件
<a name="CHAP_ExtensionPack.DW.Installing"></a>

您可以使用 AWS SCT 延伸套件精靈或將轉換後的程式碼套用至目標資料庫時，套用延伸套件。

**使用延伸套件精靈套用延伸套件**

1. 在 AWS Schema Conversion Tool的目標資料庫樹狀目錄中，開啟內容 （按一下滑鼠右鍵） 選單，選擇**套用延伸套件，**然後選擇來源資料庫平台。  
![\[套用延伸套件內容功能表\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/images/extension-pack-context.png)

   會顯示延伸套件精靈。

1. 閱讀 **Welcome** (歡迎) 頁面，然後選擇 **Next** (下一步)。

1. 在**AWS 設定檔設定**頁面上，執行下列動作：
   + 如果您只是要重新安裝延伸套件結構描述，請選擇 **Skip this step for now** (暫時略過此步驟)，然後選擇 **Next** (下一步)。現在**略過此步驟**選項僅適用於線上交易處理 (OLTP) 資料庫。
   + 如果您要上傳新的程式庫，請提供登入資料以連線至您的 AWS 帳戶。只有在您轉換 OLAP 資料庫或 ETL 指令碼時，才使用此步驟。如果您已安裝 ， AWS CLI 則可以使用 AWS Command Line Interface (AWS CLI) 登入資料。您也可以使用先前存放在全域應用程式設定的設定檔中，並與專案建立關聯的登入資料。如有必要，請選擇**導覽至全域設定**，以設定將不同的設定檔與您的 AWS SCT 專案建立關聯。如需詳細資訊，請參閱[在 中管理設定檔 AWS Schema Conversion Tool](CHAP_UserInterface.Profiles.md)。

1. 如果您要上傳新的程式庫，請選擇**我需要在程式庫上傳**頁面上**上傳程式庫**。只有在您轉換 OLAP 資料庫或 ETL 指令碼時，才使用此步驟。接著，提供 Amazon S3 路徑，然後選擇**上傳程式庫到 S3**。

   如果您已上傳程式庫，請選擇**我已上傳程式庫，請在程式庫上傳頁面上使用我現有的 S3 儲存貯**體。 ****接著，提供 Amazon S3 路徑。

   完成時請選擇 **Next** (下一步)。

1. 在**函數模擬**頁面上，選擇**建立延伸套件**。會出現訊息，包含延伸套件操作的狀態。

   完成時請選擇 **Finish** (完成)。

**在套用轉換後的程式碼時套用延伸套件**

1. 在 AWS 服務設定檔中指定 Amazon S3 儲存貯體。只有在您轉換 OLAP 資料庫或 ETL 指令碼時，才使用此步驟。如需詳細資訊，請參閱[在 中管理設定檔 AWS Schema Conversion Tool](CHAP_UserInterface.Profiles.md)。

   請確定您的 Amazon S3 儲存貯體政策包含下列許可：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": ["s3:ListBucket"],
           "Resource": ["*"]
         },
         {
           "Effect": "Allow",
           "Action": ["s3:PutObject"],
           "Resource": ["*"]
         },
         {
           "Effect": "Allow",
           "Action": ["iam:SimulatePrincipalPolicy"],
           "Resource": ["*"]
         },
         {
           "Effect": "Allow",
           "Action": ["iam:GetUser"],
           "Resource": ["arn:aws:iam::111122223333:user/DataExtractionAgentName"]
         }
       ]
   }
   ```

------

   在上述範例中，將 *111122223333：user/DataExtractionAgentName* 取代為您的 IAM 使用者名稱。

1. 轉換來源資料倉儲結構描述。如需詳細資訊，請參閱[轉換資料倉儲結構描述](CHAP_Converting.DW.md)。

1. 在右窗格中，選擇轉換後的結構描述。

1. 開啟結構描述元素的內容 (按一下右鍵) 選單，然後選擇 **Apply to database** (套用至資料庫)。

1. AWS SCT 會產生具有必要元件的延伸套件，並在目標樹狀結構中新增`aws_database_engine_name_ext`結構描述。接著， AWS SCT 將轉換後的程式碼和延伸套件結構描述套用至您的目標資料倉儲。

   當您使用 Amazon Redshift 和 的組合 AWS Glue 做為目標資料庫平台時， 會在延伸套件中 AWS SCT 新增額外的結構描述。

## 使用 AWS SCT 延伸套件中的 AWS Lambda 函數
<a name="CHAP_ExtensionPack.OLTP"></a>

AWS SCT 提供延伸套件，其中包含電子郵件的 Lambda 函數、任務排程，以及 Amazon EC2 上託管資料庫的其他功能。

### 使用 AWS Lambda 函數模擬資料庫功能
<a name="CHAP_ExtensionPack.OLTP.Services"></a>

在某些情況下，資料庫功能無法轉換為同等的 Amazon RDS 功能。例如，Oracle 傳送使用 `UTL_SMTP` 的電子郵件呼叫，而 Microsoft SQL Server 可以使用任務排程工具。如果您在 Amazon EC2 上託管和自我管理資料庫，您可以透過為它們替換 AWS 服務來模擬這些功能。

 AWS SCT 延伸套件精靈可協助您安裝、建立和設定 Lambda 函數，以模擬電子郵件、任務排程和其他功能。

### 套用延伸套件以支援 Lambda 函數
<a name="CHAP_ExtensionPack.OLTP.Installing"></a>

您可以使用延伸套件精靈或將轉換後的程式碼套用至目標資料庫時，套用延伸套件以支援 Lambda 函數。

**重要**  
 AWS 服務模擬功能僅支援在 Amazon EC2 上安裝和自我管理的資料庫。如果您的目標資料庫位於 Amazon RDS 資料庫執行個體上，請勿安裝服務模擬功能。

**使用延伸套件精靈套用延伸套件**

1. 在 AWS Schema Conversion Tool的目標資料庫樹狀目錄中，開啟內容 （按一下滑鼠右鍵） 選單，選擇**套用延伸套件，**然後選擇來源資料庫平台。  
![\[套用延伸套件內容功能表\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/images/extension-pack-context.png)

   會顯示延伸套件精靈。

1. 閱讀 **Welcome** (歡迎) 頁面，然後選擇 **Next** (下一步)。

1. 在**AWS 設定檔設定**頁面上，執行下列動作：
   + 如果您只是要重新安裝延伸套件結構描述，請選擇 **Skip this step for now** (暫時略過此步驟)，然後選擇 **Next** (下一步)。
   + 如果您要安裝 AWS 服務，請提供登入資料以連線至您的 AWS 帳戶。如果您 AWS CLI 已安裝 ，則可以使用您的 AWS CLI 登入資料。您也可以使用先前存放在全域應用程式設定的設定檔中，並與專案建立關聯的登入資料。如有需要，選擇 **Navigate to Project Settings** (前往專案設定) 將不同的設定檔關聯至專案。如有需要，可以選擇 **Global Settings** (全域設定) 來建立新的設定檔。如需詳細資訊，請參閱[在 中管理設定檔 AWS Schema Conversion Tool](CHAP_UserInterface.Profiles.md)。

1. 在 **Email Sending Service** (電子郵件傳送服務) 頁面上，執行下列步驟：
   + 如果您只是要重新安裝延伸套件結構描述，請選擇 **Skip this step for now** (暫時略過此步驟)，然後選擇 **Next** (下一步)。
   + 如果您正在安裝 AWS 服務，並且有現有的 Lambda 函數，則可以提供它。否則，精靈會為您建立。完成時請選擇 **Next** (下一步)。

1. 在 **Job Emulation Service** (任務模擬服務) 頁面上，執行下列步驟：
   + 如果您只是要重新安裝延伸套件結構描述，請選擇 **Skip this step for now** (暫時略過此步驟)，然後選擇 **Next** (下一步)。
   + 如果您正在安裝 AWS 服務，並且有現有的 Lambda 函數，則可以提供它。否則，精靈會為您建立。完成時請選擇 **Next** (下一步)。

1. 在**函數模擬**頁面上，選擇**建立延伸套件**。會出現訊息，包含延伸套件操作的狀態。

   完成時請選擇 **Finish** (完成)。

**注意**  
若要更新延伸套件並覆寫舊的延伸套件元件，請確定您使用的是最新版本的 AWS SCT。如需詳細資訊，請參閱[安裝和設定 AWS Schema Conversion Tool](CHAP_Installing.md)。

## 設定 AWS SCT 延伸套件的 函數
<a name="CHAP_ExtensionPack.ConfigureFunctions"></a>

延伸套件包含您在使用前必須設定的函數。常數會`CONVERSION_LANG`定義 Service Pack 使用的語言。這些函數適用於英文和德文。

若要將語言設定為英文或德文，請在函數程式碼中進行下列變更。尋找下列常數宣告：

```
CONVERSION_LANG CONSTANT VARCHAR := '';
```

若要`CONVERSION_LANG`將 設定為英文，請將 行變更為下列內容：

```
CONVERSION_LANG CONSTANT VARCHAR := 'English';
```

若要`CONVERSION_LANG`將 設定為英文，請將 行變更為下列內容：

```
CONVERSION_LANG CONSTANT VARCHAR := 'Deutsch';
```

為下列函數設定此設定：
+ `aws_sqlserver_ext.conv_datetime_to_string`
+ `aws_sqlserver_ext.conv_date_to_string`
+ `aws_sqlserver_ext.conv_string_to_date`
+ `aws_sqlserver_ext.conv_string_to_datetime`
+ `aws_sqlserver_ext.conv_string_to_datetime`
+ `aws_sqlserver_ext.parse_to_date`
+ `aws_sqlserver_ext.parse_to_datetime`
+ `aws_sqlserver_ext.parse_to_time`