

AWS Data Pipeline 不再提供給新客戶。的現有客戶 AWS Data Pipeline 可以繼續正常使用服務。[進一步了解](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

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

# 使用命令列複製 MySQL 資料
<a name="dp-copymysql-cli"></a>

您可以建立管道，將資料從 MySQL 資料表複製到 Amazon S3 儲存貯體中的檔案。

**先決條件**

開始之前，您必須完成下列步驟：

1. 安裝和設定命令列界面 (CLI)。如需詳細資訊，請參閱[存取 AWS Data Pipeline](what-is-datapipeline.md#accessing-datapipeline)。

1. 確保名為 **DataPipelineDefaultRole** 和 **DataPipelineDefaultResourceRole** 的 IAM 角色存在。 AWS Data Pipeline 主控台會自動為您建立這些角色。如果您至少尚未使用 AWS Data Pipeline 主控台一次，則必須手動建立這些角色。如需詳細資訊，請參閱[的 IAM 角色 AWS Data Pipeline](dp-iam-roles.md)。

1. 設定 Amazon S3 儲存貯體和 Amazon RDS 執行個體。如需詳細資訊，請參閱[開始之前](dp-copydata-mysql-prereq.md)。

**Topics**
+ [以 JSON 格式定義管道](#dp-copymysql-define-pipeline-cli)
+ [上傳和啟用管道定義](#dp-copymysql-json-upload-cli)

## 以 JSON 格式定義管道
<a name="dp-copymysql-define-pipeline-cli"></a>

此範例案例示範如何使用 JSON 管道定義和 CLI， AWS Data Pipeline 在指定的時間間隔將資料 （資料列） 從 MySQL 資料庫中的資料表複製到 Amazon S3 儲存貯體中的 CSV （逗號分隔值） 檔案。

這是完整的管道定義 JSON 檔案，後面接著說明其每個部分。

**注意**  
 建議您使用文字編輯器，協助您驗證 JSON 格式檔案的語法，並使用 .json 副檔名命名檔案。

```
{
  "objects": [
    {
      "id": "ScheduleId113",
      "startDateTime": "2013-08-26T00:00:00",
      "name": "My Copy Schedule",
      "type": "Schedule",
      "period": "1 Days"
    },
    {
      "id": "CopyActivityId112",
      "input": {
        "ref": "MySqlDataNodeId115"
      },
      "schedule": {
        "ref": "ScheduleId113"
      },
      "name": "My Copy",
      "runsOn": {
        "ref": "Ec2ResourceId116"
      },
      "onSuccess": {
        "ref": "ActionId1"
      },
      "onFail": {
        "ref": "SnsAlarmId117"
      },
      "output": {
        "ref": "S3DataNodeId114"
      },
      "type": "CopyActivity"
    },
    {
      "id": "S3DataNodeId114",
      "schedule": {
        "ref": "ScheduleId113"
      },
      "filePath": "s3://amzn-s3-demo-bucket/rds-output/output.csv",
      "name": "My S3 Data",
      "type": "S3DataNode"
    },
    {
      "id": "MySqlDataNodeId115",
      "username": "my-username",
      "schedule": {
        "ref": "ScheduleId113"
      },
      "name": "My RDS Data",
      "*password": "my-password",
      "table": "table-name",
      "connectionString": "jdbc:mysql://your-sql-instance-name.id.region-name.rds.amazonaws.com:3306/database-name",
      "selectQuery": "select * from #{table}",
      "type": "SqlDataNode"
    },
    {
      "id": "Ec2ResourceId116",
      "schedule": {
        "ref": "ScheduleId113"
      },
      "name": "My EC2 Resource",
      "role": "DataPipelineDefaultRole",
      "type": "Ec2Resource",
      "resourceRole": "DataPipelineDefaultResourceRole"
    },
    {
      "message": "This is a success message.",
      "id": "ActionId1",
      "subject": "RDS to S3 copy succeeded!",
      "name": "My Success Alarm",
      "role": "DataPipelineDefaultRole",
      "topicArn": "arn:aws:sns:us-east-1:123456789012:example-topic",
      "type": "SnsAlarm"
    },
    {
      "id": "Default",
      "scheduleType": "timeseries",
      "failureAndRerunMode": "CASCADE",
      "name": "Default",
      "role": "DataPipelineDefaultRole",
      "resourceRole": "DataPipelineDefaultResourceRole"
    },
    {
      "message": "There was a problem executing #{node.name} at for period #{node.@scheduledStartTime} to #{node.@scheduledEndTime}",
      "id": "SnsAlarmId117",
      "subject": "RDS to S3 copy failed",
      "name": "My Failure Alarm",
      "role": "DataPipelineDefaultRole",
      "topicArn": "arn:aws:sns:us-east-1:123456789012:example-topic",
      "type": "SnsAlarm"
    }
  ]
}
```

### MySQL 資料節點
<a name="dp-copymysql-rds-node-cli"></a>

輸入 MySqlDataNode 管道元件會定義輸入資料的位置；在此情況下為 Amazon RDS 執行個體。輸入 MySqlDataNode 元件是由下列欄位定義：

```
{
  "id": "MySqlDataNodeId115",
  "username": "my-username",
  "schedule": {
    "ref": "ScheduleId113"
  },
  "name": "My RDS Data",
  "*password": "my-password",
  "table": "table-name",
  "connectionString": "jdbc:mysql://your-sql-instance-name.id.region-name.rds.amazonaws.com:3306/database-name",
  "selectQuery": "select * from #{table}",
  "type": "SqlDataNode"
},
```

Id  
使用者定義的名稱，這是僅供您參考的標籤。

使用者名稱  
資料庫帳戶的使用者名稱，該帳戶具備足以從資料庫資料表擷取資料的許可。以您的使用者名稱取代 *my-username*。

Schedule  
我們在上述 JSON 檔案的程式碼行中已建立的排程元件參考。

名稱  
使用者定義的名稱，這是僅供您參考的標籤。

\$1Password  
具有星號字首的資料庫帳戶密碼，表示 AWS Data Pipeline 必須加密密碼值。將 *my-password* 取代為您的使用者正確的密碼。密碼欄位前面會加上星號特殊字元。如需詳細資訊，請參閱[特殊字元](dp-pipeline-characters.md)。

資料表  
包含所要複製資料的資料庫資料表名稱。請以您的資料庫資料表名稱取代 *table-name*。

connectionString  
CopyActivity 物件用來連接至資料庫的 JDBC 連接字串。

selectQuery  
有效的 SQL SELECT 查詢，指定要從資料庫資料表複製的資料。請注意，`#{table}` 是一種表達式，會重複使用上述 JSON 檔案程式碼行中 "table" 變數所提供的資料表名稱。

Type  
SqlDataNode 類型，在此範例中是使用 MySQL 的 Amazon RDS 執行個體。  
MySqlDataNode 類型已移除。雖然您仍可使用 MySqlDataNode，但我們建議您使用 SqlDataNode。

### Amazon S3 資料節點
<a name="dp-copymysql-json-s3-node-cli"></a>

接著，S3Output 管道元件會定義輸出檔案的位置；在此情況下，Amazon S3 儲存貯體位置中的 CSV 檔案。輸出 S3DataNode 元件是由下列欄位定義：

```
{
  "id": "S3DataNodeId114",
  "schedule": {
    "ref": "ScheduleId113"
  },
  "filePath": "s3://amzn-s3-demo-bucket/rds-output/output.csv",
  "name": "My S3 Data",
  "type": "S3DataNode"
},
```

Id  
使用者定義的 ID，這是僅供您參考的標籤。

Schedule  
我們在上述 JSON 檔案的程式碼行中已建立的排程元件參考。

filePath  
資料節點的相關資料路徑，在此範例中是 CSV 輸出檔案。

名稱  
使用者定義的名稱，這是僅供您參考的標籤。

Type  
管道物件類型，也就是與 Amazon S3 儲存貯體中資料所在的位置相符的 S3DataNode。

### 資源
<a name="dp-copymysql-json-resource-cli"></a>

這是執行複製操作的運算資源定義。在此範例中， AWS Data Pipeline 應該自動建立 EC2 執行個體來執行複製任務，並在任務完成後終止資源。此處定義的欄位會控制執行此工作之 EC2 執行個體建立和運作。EC2Resource 是由下列欄位定義：

```
{
  "id": "Ec2ResourceId116",
  "schedule": {
    "ref": "ScheduleId113"
  },
  "name": "My EC2 Resource",
  "role": "DataPipelineDefaultRole",
  "type": "Ec2Resource",
  "resourceRole": "DataPipelineDefaultResourceRole"
},
```

Id  
使用者定義的 ID，這是僅供您參考的標籤。

Schedule  
建立此運算資源所依據的排程。

名稱  
使用者定義的名稱，這是僅供您參考的標籤。

Role  
存取 資源之帳戶的 IAM 角色，例如存取 Amazon S3 儲存貯體以擷取資料。

Type  
要執行工作的運算資源類型；在本例中是 EC2 執行個體。您可以使用其他資源類型，例如 EmrCluster 類型。

resourceRole  
建立資源的帳戶 IAM 角色，例如代您建立和設定 EC2 執行個體。Role 和 ResourceRole 可以是相同的角色，但不同的角色可提高您安全組態的精細程度。

### 活動
<a name="dp-copymysql-json-activity-cli"></a>

JSON 檔案的最後部分是代表所要執行工作的活動定義。在這種情況下，我們使用 CopyActivity 元件將資料從 Amazon S3 儲存貯體中的檔案複製到另一個檔案。CopyActivity 元件是由下列欄位定義：

```
{
  "id": "CopyActivityId112",
  "input": {
    "ref": "MySqlDataNodeId115"
  },
  "schedule": {
    "ref": "ScheduleId113"
  },
  "name": "My Copy",
  "runsOn": {
    "ref": "Ec2ResourceId116"
  },
  "onSuccess": {
    "ref": "ActionId1"
  },
  "onFail": {
    "ref": "SnsAlarmId117"
  },
  "output": {
    "ref": "S3DataNodeId114"
  },
  "type": "CopyActivity"
},
```

Id  
使用者定義的 ID，這是僅供您參考的標籤

Input  
要複製的 MySQL 資料位置

Schedule  
執行此活動所依據的排程

名稱  
使用者定義的名稱，這是僅供您參考的標籤

runsOn  
執行此活動所定義工作的運算資源。在此範例中，我們參考了之前定義的 EC2 執行個體。使用 `runsOn` 欄位 AWS Data Pipeline 可讓 為您建立 EC2 執行個體。`runsOn` 欄位表示資源存在於 AWS 基礎設施，而 workerGroup 值表示您想要使用自己的現場部署資源來執行工作。

onSuccess  
活動成功完成時所要傳送的 [SnsAlarm](dp-object-snsalarm.md)

onFail  
活動失敗時所要傳送的 [SnsAlarm](dp-object-snsalarm.md)

Output  
CSV 輸出檔案的 Amazon S3 位置

Type  
要執行的活動類型。

## 上傳和啟用管道定義
<a name="dp-copymysql-json-upload-cli"></a>

您必須上傳管道定義並啟用管道。在下列範例命令中，將 *pipeline\$1name* 取代為管道的標籤，並將 *pipeline\$1file* 取代為管道定義`.json`檔案的完整路徑。

**AWS CLI**

若要建立管道定義並啟用管道，請使用下列 [create-pipeline](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/create-pipeline.html) 命令。請注意管道的 ID，因為您會將此值與大多數 CLI 命令搭配使用。

```
aws datapipeline create-pipeline --name pipeline_name --unique-id token
{
    "pipelineId": "df-00627471SOVYZEXAMPLE"
}
```

若要上傳管道定義，請使用下列 [put-pipeline-definition](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/put-pipeline-definition.html) 命令。

```
aws datapipeline put-pipeline-definition --pipeline-id df-00627471SOVYZEXAMPLE --pipeline-definition file://MyEmrPipelineDefinition.json
```

如果您管道驗證成功， `validationErrors` 欄位會是空的。您應該檢閱任何警告。

若要啟用管道，請使用下列 [activate-pipeline](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/activate-pipeline.html) 命令。

```
aws datapipeline activate-pipeline --pipeline-id df-00627471SOVYZEXAMPLE
```

您可以使用下列 [list-pipelines](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/list-pipelines.html) 命令，驗證管道是否顯示在管道清單中。

```
aws datapipeline list-pipelines
```