

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 從遠端主機載入資料
<a name="loading-data-from-remote-hosts"></a>

您可以使用 COPY 命令從一或多台遠端主機平行載入資料，例如 Amazon EC2 執行個體或其他電腦。COPY 會使用 SSH 連接至遠端主機，然後在遠端主機執行命令來產生文字輸出。

遠端主機可以是 Amazon EC2 Linux 執行個體，或另一台設定為接受 SSH 連線的 Unix 或 Linux 電腦。本指南假設您的遠端主機為 Amazon EC2 執行個體。當其他電腦上的程序不同時，指南將指出差異。

Amazon Redshift 可以連線到多台主機，而且可以對每台主機開啟多個 SSH 連線。Amazon Redshift 會透過每個連線傳送一個唯一的命令，將文字輸出產生到主機的標準輸出，然後 Amazon Redshift 會像讀取文字檔一樣讀取該輸出。

## 開始之前
<a name="load-from-host-before-you-begin"></a>

開始之前，您應該備妥下列各項：
+ 您可以使用 SSH 連線的一或多個主機，例如 Amazon EC2 執行個體。
+ 主機上的資料來源。

  您將提供 Amazon Redshift 叢集將在主機上執行以產生文字輸出的命令。叢集連線至主機之後，COPY 命令會執行這些命令，讀取來自主機標準輸出的文字，以及並行載入資料至 Amazon Redshift 資料表。文字輸出必須採用 COPY 命令可以擷取的格式。如需詳細資訊，請參閱[準備您的輸入資料](t_preparing-input-data.md)
+ 從您的電腦存取主機。

  針對 Amazon EC2 執行個體，您將使用 SSH 連線來存取主機。您將需要存取主機以將 Amazon Redshift 叢集的公有金鑰新增至主機的授權金鑰檔案。
+ 執行中的 Amazon Redshift 叢集。

  如需如何啟動叢集的相關資訊，請參閱《Amazon Redshift 入門指南》[https://docs.aws.amazon.com/redshift/latest/gsg/](https://docs.aws.amazon.com/redshift/latest/gsg/)。

## 載入資料程序
<a name="load-from-host-process"></a>

本節會逐步演練如何從從遠端主機載入資料的程序。下列小節提供每個步驟中必須完成的詳細資訊。
+ **[步驟 1：擷取叢集公有金鑰和叢集節點 IP 地址](#load-from-host-steps-retrieve-key-and-ips)**

  公有金鑰可讓 Amazon Redshift 叢集節點與遠端主機建立 SSH 連線。您將使用每個叢集節點的 IP 地址來設定主機安全群組或防火牆，以允許使用這些 IP 地址從您的 Amazon Redshift 叢集存取。
+ **[步驟 2:將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案](#load-from-host-steps-add-key-to-host)**

  您可以將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案，以便主機識別 Amazon Redshift 叢集並接受 SSH 連線。
+ **[步驟 3：設定主機以接受所有 Amazon Redshift 叢集的 IP 地址](#load-from-host-steps-configure-security-groups)** 

  針對 Amazon EC2，請修改執行個體的安全群組，以新增傳入規則來接受 Amazon Redshift IP 地址。針對其他主機，修改防火牆使得您的 Amazon Redshift 節點可以與遠端主機建立 SSH 連線。
+ **[步驟 4：取得主機的公有金鑰](#load-from-host-steps-get-the-host-key)**

  您可以選擇性地指定 Amazon Redshift 應該使用公有金鑰來識別主機。您必須找到公有金鑰，並將文字複製到您的資訊清單檔案。
+ **[步驟 5：建立資訊清單檔案](#load-from-host-steps-create-manifest)** 

  清單檔案是 JSON 格式的文字檔案，具有 Amazon Redshift 連線至主機和擷取資料所需的詳細資訊。
+ **[步驟 6：上傳資訊清單檔案至 Amazon S3 儲存貯體](#load-from-host-steps-upload-manifest)** 

  Amazon Redshift 會讀取清單檔案，並使用該資訊來連線至遠端主機。如果 Amazon S3 儲存貯體不是位於與 Amazon Redshift 叢集所在的同一區域，您必須使用 [REGION](copy-parameters-data-source-s3.md#copy-region) 選項來指定資料所在的區域。
+ **[步驟 7：執行 COPY 命令以載入資料](#load-from-host-steps-run-copy)**

  從 Amazon Redshift 資料庫，執行 COPY 命令以將資料載入至 Amazon Redshift 資料表。

## 步驟 1：擷取叢集公有金鑰和叢集節點 IP 地址
<a name="load-from-host-steps-retrieve-key-and-ips"></a>

您將使用每個叢集節點的 IP 地址來設定主機安全群組，以允許使用這些 IP 地址從您的 Amazon Redshift 叢集存取。

**使用主控台擷取您的叢集的叢集公有金鑰和叢集節點 IP 地址**

1. 存取 Amazon Redshift 管理主控台。

1. 在導覽窗格中，選擇**叢集**連結。

1. 從清單選取您的叢集。

1. 找到 **SSH Ingestion Settings (SSH 擷取設定)** 群組。

   記下 **Cluster Public Key (叢集公有金鑰)** 和 **Node IP addresses (節點 IP 地址)**。您將在稍後的步驟中用到它們。  
![\[SSH 擷取設定群組的螢幕擷取畫面，其中顯示叢集公有金鑰和節點 IP 位址。\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/images/copy-from-ssh-console-2.png)

   您將使用步驟 3 的 IP 地址來設定主機以接受來自 Amazon Redshift 的連線。取決於您連線的主機類型以及它是否位於 VPC，您將使用公有 IP 地址或私有 IP 地址。

若要使用 Amazon Redshift CLI 來擷取叢集的叢集公有金鑰和叢集節點 IP 地址，請執行 describe-clusters 命令。

例如：

```
aws redshift describe-clusters --cluster-identifier <cluster-identifier> 
```

 回應將包含 ClusterPublicKey 和私有和公有 IP 地址的清單，類似於下列：

```
{
    "Clusters": [
        {
            "VpcSecurityGroups": [], 
            "ClusterStatus": "available", 
            "ClusterNodes": [
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "LEADER", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }, 
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "COMPUTE-0", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }, 
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "COMPUTE-1", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }
            ], 
            "AutomatedSnapshotRetentionPeriod": 1, 
            "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", 
            "AvailabilityZone": "us-east-1a", 
            "NodeType": "dc2.large", 
            "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", 
             ...
             ...
}
```

若要使用 Amazon Redshift API 來擷取叢集的叢集公有金鑰和叢集節點 IP 地址，請使用 DescribeClusters 動作。如需詳細資訊，請參閱《Amazon Redshift CLI 指南》**中的 [describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/redshift/describe-clusters.html) 或《Amazon Redshift API 指南》中的 [DescribeClusters](https://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusters.html)。

## 步驟 2:將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案
<a name="load-from-host-steps-add-key-to-host"></a>

您可以將叢集公有金鑰新增至每個主機的授權金鑰檔案，以便主機識別 Amazon Redshift 並接受 SSH 連線。

**將 Amazon Redshift 叢集公有金鑰新增至主機的授權金鑰檔案**

1. 使用 SSH 連線存取主機。

   如需使用 SSH 連接至執行個體的詳細資訊，請參閱《Amazon EC2 使用者指南》**中的[連接至您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html)。

1. 從主控台或從 CLI 回應文字複製 Amazon Redshift 公有金鑰。

1. 將公有金鑰的內容複製和貼上至遠端主機上的 `/home/<ssh_username>/.ssh/authorized_keys` 檔案。`<ssh_username>` 必須符合資訊清單檔案中 "username" 欄位的值。包括完整字串，包括字首 "`ssh-rsa`" 和字尾 "`Amazon-Redshift`"。例如：

   ```
   ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift
   ```

## 步驟 3：設定主機以接受所有 Amazon Redshift 叢集的 IP 地址
<a name="load-from-host-steps-configure-security-groups"></a>

 如果是使用 Amazon EC2 執行個體或 Amazon EMR 叢集，新增輸出規則至主機的安全群組可允許來自每個 Amazon Redshift 叢集節點的流量。針對**類別**，對連接埠 22 上的 TCP 通訊協定選取 SSH。針對**來源**，輸入您在 [步驟 1：擷取叢集公有金鑰和叢集節點 IP 地址](#load-from-host-steps-retrieve-key-and-ips) 中擷取的 Amazon Redshift 叢集節點 IP 地址。如需將規則新增至 Amazon EC2 安全群組的相關資訊，請參閱《Amazon EC2 使用者指南》**中的[授權執行個體的傳入流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)。

使用私有 IP 地址的時機：
+ 您有一個不在 Virtual Private Cloud (VPC) 中的 Amazon Redshift 叢集，以及一個 Amazon EC2 -Classic 執行個體，兩者都在同一 AWS 區域中。
+  您有一個位於 VPC 中的 Amazon Redshift 叢集，以及一個 Amazon EC2 -VPC 執行個體，兩者都位於相同的 AWS 區域和相同的 VPC 中。

 否則，請使用公有 IP 地址。

如需在 VPC 中使用 Amazon Redshift 的相關資訊，請參閱《Amazon Redshift 管理指南》**中的[在虛擬私有雲端 (VPC) 中管理叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-vpc.html)。

## 步驟 4：取得主機的公有金鑰
<a name="load-from-host-steps-get-the-host-key"></a>

您可以選擇性地在資訊清單檔案中提供主機的公有金鑰，使得 Amazon Redshift 可以識別主機。COPY 命令不需要主機公有金鑰，但因為安全原因，我們強烈建議使用公有金鑰來幫助避免 'man-in--middle' 攻擊。

您可以在下列位置中尋找主機的公有金鑰，其中的 `<ssh_host_rsa_key_name>` 為主機公有金鑰的唯一名稱：

```
:  /etc/ssh/<ssh_host_rsa_key_name>.pub
```

**注意**  
Amazon Redshift 只支援 RSA 金鑰。我們不支援 DSA 索引鍵。

在步驟 5 建立您的資訊清單檔案時，您會將公有金鑰的文字貼上至資訊清單檔案項目中的「公有金鑰」資料欄。

## 步驟 5：建立資訊清單檔案
<a name="load-from-host-steps-create-manifest"></a>

COPY 命令可以使用 SSH 來連接至多台主機，也可以對每台主機建立多個 SSH 連線。COPY 會透過每個主機連線執行命令，然後將命令的輸出平行載入資料表。資訊清單檔案是 JSON 格式的文字檔案，供 Amazon Redshift 用來連接至主機。資訊清單檔案指定 SSH 主機端點，以及在主機上執行以將資料傳回給 Amazon Redshift 的命令。您可以選擇在每個項目中包含主機公有金鑰、登入使用者名稱及 mandatory 旗標。

在本機電腦上建立資訊清單檔案。在稍後的步驟中，您會將檔案上傳到 Amazon S3。

資訊清單檔案的格式如下所示：

```
{ 
   "entries": [ 
     {"endpoint":"<ssh_endpoint_or_IP>", 
       "command": "<remote_command>",
       "mandatory":true, 
       "publickey": "<public_key>", 
       "username": "<host_user_name>"}, 
     {"endpoint":"<ssh_endpoint_or_IP>", 
       "command": "<remote_command>",
       "mandatory":true, 
       "publickey": "<public_key>", 
       "username": "host_user_name"} 
    ] 
}
```

資訊清單檔案會對每個 SSH 連線包含一個 "entries" 結構。每個項目代表單一 SSH 連線。您可以對單一主機建立多個連線，也可以對多台主機建立多個連線。如上所示，欄位名稱和值都需要雙引號。不需要雙引號的唯一值為強制欄位的布林值 **true** 或 **false**。

下列描述資訊清單檔案中的欄位。

端點  
主機的 URL 地址或 IP 地址。例如，"`ec2-111-222-333.compute-1.amazonaws.com`" 或 "`22.33.44.56`"

command   
主機將執行的命令，以產生文字或二進位 (gzip、lzop 或 bzip2) 輸出。命令可以是使用者 *"host\$1user\$1name"* 有許可執行的任何命令。命令可能只是列印檔案這麼簡單，也可能查詢資料庫或啟動指令碼。輸出 (文字檔案、gzip 二進位檔案、lzop 二進位檔案，或 bzip2 二進位檔案) 必須採用 Amazon Redshift COPY 命令可擷取的格式。如需詳細資訊，請參閱[準備您的輸入資料](t_preparing-input-data.md)。

publickey  
(選用) 主機的公有金鑰。如果提供公有金鑰，Amazon Redshift 會使用此金鑰來識別主機。如果未提供公有金鑰，Amazon Redshift 不會嘗試識別主機。例如，如果遠端主機的公有金鑰是：`ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com`，請在公有金鑰欄位中輸入下列文字：`AbcCbaxxx…xxxDHKJ`。

mandatory  
(選用) 指出如果嘗試連線失敗，COPY 命令是否就應該失敗。預設值為 `false`。如果 Amazon Redshift 未成功建立至少一個連線，則 COPY 命令會失敗。

使用者名稱  
(選用) 用來登入主機系統並執行遠端命令的使用者名稱。使用者登入名稱與步驟 2 中用來將公有金鑰新增至主機授權金鑰檔案的登入必須相同。預設的使用者名稱為 "redshift"。

下列範例顯示完整的清單檔案，可開啟對相同主機的四個連線，並透過每個連線執行不同的命令：

```
{ 
  "entries": [ 
       {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", 
          "command": "cat loaddata1.txt", 
          "mandatory":true, 
          "publickey": "ec2publickeyportionoftheec2keypair", 
          "username": "ec2-user"}, 
       {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", 
          "command": "cat loaddata2.txt", 
          "mandatory":true, 
          "publickey": "ec2publickeyportionoftheec2keypair", 
          "username": "ec2-user"},
       {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", 
          "command": "cat loaddata3.txt", 
          "mandatory":true, 
          "publickey": "ec2publickeyportionoftheec2keypair", 
          "username": "ec2-user"},
       {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", 
          "command": "cat loaddata4.txt", 
          "mandatory":true, 
          "publickey": "ec2publickeyportionoftheec2keypair", 
          "username": "ec2-user"}
     ] 
}
```

## 步驟 6：上傳資訊清單檔案至 Amazon S3 儲存貯體
<a name="load-from-host-steps-upload-manifest"></a>

上傳資訊清單檔案至 Amazon S3 儲存貯體。如果 Amazon S3 儲存貯體與您的 Amazon Redshift AWS 叢集不在同一個區域中，您必須使用 [REGION](copy-parameters-data-source-s3.md#copy-region)選項來指定資訊清單所在的 AWS 區域。如需有關建立 Amazon S3 儲存貯體及上傳檔案的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》[https://docs.aws.amazon.com/AmazonS3/latest/userguide/](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)。

## 步驟 7：執行 COPY 命令以載入資料
<a name="load-from-host-steps-run-copy"></a>

執行 [COPY](r_COPY.md) 命令以連線至主機，並將資料載入至 Amazon Redshift 資料表。在 COPY 命令中，指定資訊清單檔案的明確 Amazon S3 物件路徑，並包括 SSH 選項。例如 

```
COPY sales
FROM 's3://amzn-s3-demo-bucket/ssh_manifest'  
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|'
SSH;
```

**注意**  
如果您使用自動壓縮，COPY 命令會執行兩次資料讀取，也就是會執行遠端命令兩次。第一次讀取會提供樣本進行壓縮分析，第二次讀取就實際載入資料。如果執行遠端命令兩次可能因為潛在的副作用造成問題，您應該關閉自動壓縮。若要關閉自動壓縮，請在執行 COPY 命令時將 COMPUPDATE 選項設為 OFF。如需詳細資訊，請參閱[利用自動壓縮載入資料表](c_Loading_tables_auto_compress.md)。