

AWS Data Pipeline 는 더 이상 신규 고객이 사용할 수 없습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS Data Pipeline 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 명령줄을 사용하여 Amazon Redshift로 데이터 복사
<a name="dp-copydata-redshift-cli"></a>

이 자습서는 Amazon S3에서 Amazon Redshift로 데이터를 복사하는 방법을 설명합니다. Amazon Redshift에서 새 테이블을 생성한 다음 AWS Data Pipeline 를 사용하여 CSV 형식의 샘플 입력 데이터가 포함된 퍼블릭 Amazon S3 버킷에서이 테이블로 데이터를 전송합니다. 소유하고 있는 Amazon S3 버킷에 로그가 저장됩니다.

Amazon S3는 클라우드에 데이터를 저장하는 웹 서비스입니다. 자세한 내용은 [Amazon Simple Storage Service 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)를 참조하세요. Amazon Redshift는 클라우드의 데이터 웨어하우스 서비스입니다. 자세한 내용은 [Amazon Redshift 관리 가이드](https://docs.aws.amazon.com/redshift/latest/mgmt/)의 섹션을 참조하십시오.

**사전 조건**

시작하기 전에 다음 단계를 완료해야 합니다.

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 Redshift에서 `COPY`명령을 설정하며, 그 이유는 AWS Data Pipeline내에서 복사를 수행할 때 이와 동일한 옵션이 작동해야 하기 때문입니다. 자세한 내용은 [시작하기 전: COPY 옵션 구성 및 데이터 로드](dp-learn-copy-redshift.md) 단원을 참조하세요.

1. Amazon Redshift 데이터베이스를 설정하십시오. 자세한 내용은 [파이프라인 설정, 보안 그룹 생성, Amazon Redshift 클러스터 생성](dp-copydata-redshift-prereq.md) 단원을 참조하십시오.

**Topics**
+ [JSON 형식으로 파이프라인 정의](dp-copydata-redshift-define-pipeline-cli.md)
+ [파이프라인 정의 업로드 및 활성화](dp-copydata-redshift-upload-cli.md)

# JSON 형식으로 파이프라인 정의
<a name="dp-copydata-redshift-define-pipeline-cli"></a>

이 예제 시나리오는 Amazon S3 버킷에서 Amazon Redshift로 데이터를 복사하는 방법을 보여줍니다.

전체 파이프라인 정의 JSON 파일마다 각 부분의 설명이 뒤따릅니다. JSON 형식 파일의 구문을 확인하고 `.json` 파일 확장자로 파일 이름을 지정할 수 있는 텍스트 편집기를 사용할 것을 권장합니다.

```
{
  "objects": [
    {
      "id": "CSVId1",
      "name": "DefaultCSV1",
      "type": "CSV"
    },
    {
      "id": "RedshiftDatabaseId1",
      "databaseName": "dbname",
      "username": "user",
      "name": "DefaultRedshiftDatabase1",
      "*password": "password",
      "type": "RedshiftDatabase",
      "clusterId": "redshiftclusterId"
    },
    {
      "id": "Default",
      "scheduleType": "timeseries",
      "failureAndRerunMode": "CASCADE",
      "name": "Default",
      "role": "DataPipelineDefaultRole",
      "resourceRole": "DataPipelineDefaultResourceRole"
    },
    {
      "id": "RedshiftDataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "tableName": "orders",
      "name": "DefaultRedshiftDataNode1",
      "createTableSql": "create table StructuredLogs (requestBeginTime CHAR(30) PRIMARY KEY DISTKEY SORTKEY, requestEndTime CHAR(30), hostname CHAR(100), requestDate varchar(20));",
      "type": "RedshiftDataNode",
      "database": {
        "ref": "RedshiftDatabaseId1"
      }
    },
    {
      "id": "Ec2ResourceId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "securityGroups": "MySecurityGroup",
      "name": "DefaultEc2Resource1",
      "role": "DataPipelineDefaultRole",
      "logUri": "s3://myLogs",
      "resourceRole": "DataPipelineDefaultResourceRole",
      "type": "Ec2Resource"
    },
    {
      "id": "ScheduleId1",
      "startDateTime": "yyyy-mm-ddT00:00:00",
      "name": "DefaultSchedule1",
      "type": "Schedule",
      "period": "period",
      "endDateTime": "yyyy-mm-ddT00:00:00"
    },
    {
      "id": "S3DataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "filePath": "s3://datapipeline-us-east-1/samples/hive-ads-samples.csv",
      "name": "DefaultS3DataNode1",
      "dataFormat": {
        "ref": "CSVId1"
      },
      "type": "S3DataNode"
    },
    {
      "id": "RedshiftCopyActivityId1",
      "input": {
        "ref": "S3DataNodeId1"
      },
      "schedule": {
        "ref": "ScheduleId1"
      },
      "insertMode": "KEEP_EXISTING",
      "name": "DefaultRedshiftCopyActivity1",
      "runsOn": {
        "ref": "Ec2ResourceId1"
      },
      "type": "RedshiftCopyActivity",
      "output": {
        "ref": "RedshiftDataNodeId1"
      }
    }
  ]
}
```

이러한 객체에 대한 자세한 내용은 다음 설명서를 참조하십시오.

**Topics**
+ [데이터 노드](dp-copydata-redshift-node-cli.md)
+ [Resource](dp-copydata-redshift-resource-cli.md)
+ [활동](dp-copydata-redshift-activity-cli.md)

# 데이터 노드
<a name="dp-copydata-redshift-node-cli"></a>

이 예제에서는 입력 데이터 노드, 출력 데이터 노드 및 데이터베이스를 사용합니다.

**입력 데이터 노드**  
입력 `S3DataNode`파이프라인 구성요소는 Amazon S3의 입력 데이터 위치와 입력 데이터의 데이터 형식을 정의합니다. 자세한 내용은 [S3DataNode](dp-object-s3datanode.md) 단원을 참조하십시오.

이 입력 구성요소는 다음 필드로 정의됩니다.

```
{
  "id": "S3DataNodeId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "filePath": "s3://datapipeline-us-east-1/samples/hive-ads-samples.csv",
  "name": "DefaultS3DataNode1",
  "dataFormat": {
    "ref": "CSVId1"
  },
  "type": "S3DataNode"
},
```

`id`  
참조 전용 레이블인 사용자 정의 ID입니다.

`schedule`  
일정 구성요소 참조입니다.

`filePath`  
이 예제에서 CSV 입력 파일인 데이터 노드와 연결된 데이터로 가는 경로입니다.

`name`  
참조 전용 라벨인 사용자 정의 이름입니다.

`dataFormat`  
이 활동에서 처리할 데이터 형식의 참조입니다.

**출력 데이터 노드**  
출력 `RedshiftDataNode`파이프라인 구성요소는 출력 데이터의 위치를 정의합니다. 이 경우에는 Amazon Redshift 데이터베이스에 있는 테이블입니다. 자세한 내용은 [RedshiftDataNode](dp-object-redshiftdatanode.md) 단원을 참조하십시오. 이 출력 구성요소는 다음 필드로 정의됩니다.

```
{
  "id": "RedshiftDataNodeId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "tableName": "orders",
  "name": "DefaultRedshiftDataNode1",
  "createTableSql": "create table StructuredLogs (requestBeginTime CHAR(30) PRIMARY KEY DISTKEY SORTKEY, requestEndTime CHAR(30), hostname CHAR(100), requestDate varchar(20));",
  "type": "RedshiftDataNode",
  "database": {
    "ref": "RedshiftDatabaseId1"
  }
},
```

`id`  
참조 전용 레이블인 사용자 정의 ID입니다.

`schedule`  
일정 구성요소 참조입니다.

`tableName`  
Amazon Redshift 테이블의 이름입니다.

`name`  
참조 전용 라벨인 사용자 정의 이름입니다.

`createTableSql`  
데이터베이스에서 테이블을 생성하는 SQL 표현식입니다.

`database`  
Amazon Redshift 데이터베이스에 대한 참조입니다.

**Database**  
`RedshiftDatabase` 구성요소는 다음 필드로 정의됩니다. 자세한 내용은 [RedshiftDatabase](dp-object-redshiftdatabase.md) 단원을 참조하십시오.

```
{
  "id": "RedshiftDatabaseId1",
  "databaseName": "dbname",
  "username": "user",
  "name": "DefaultRedshiftDatabase1",
  "*password": "password",
  "type": "RedshiftDatabase",
  "clusterId": "redshiftclusterId"
},
```

`id`  
참조 전용 레이블인 사용자 정의 ID입니다.

`databaseName`  
논리 데이터베이스의 이름입니다.

`username`  
데이터베이스에 연결할 사용자 이름입니다.

`name`  
참조 전용 라벨인 사용자 정의 이름입니다.

`password`  
데이터베이스에 연결할 비밀번호입니다.

`clusterId`  
Redshift 클러스터의 ID입니다.

# Resource
<a name="dp-copydata-redshift-resource-cli"></a>

이것은 복사 작업을 수행할 전산 리소스의 정의입니다. 이 예제에서 AWS Data Pipeline 는 EC2 인스턴스를 자동으로 생성하여 복사 작업을 수행하고 작업이 완료된 후 인스턴스를 종료해야 합니다. 여기에 정의된 필드는 작업할 인스턴스의 생성과 기능을 제어합니다. 자세한 내용은 [Ec2Resource](dp-object-ec2resource.md) 단원을 참조하십시오.

`Ec2Resource`는 다음 필드로 정의됩니다.

```
{
  "id": "Ec2ResourceId1",
  "schedule": {
    "ref": "ScheduleId1"
  },
  "securityGroups": "MySecurityGroup",
  "name": "DefaultEc2Resource1",
  "role": "DataPipelineDefaultRole",
  "logUri": "s3://myLogs",
  "resourceRole": "DataPipelineDefaultResourceRole",
  "type": "Ec2Resource"
},
```

`id`  
참조 전용 레이블인 사용자 정의 ID입니다.

`schedule`  
이 전산 리소스를 생성할 일정입니다.

`securityGroups`  
리소스 풀에서 인스턴스에 사용할 보안 그룹입니다.

`name`  
참조 전용 라벨인 사용자 정의 이름입니다.

`role`  
리소스에 액세스할 계정의 IAM 역할입니다(예: Amazon S3 버킷에 액세스하여 데이터 검색).

`logUri`  
`Ec2Resource`에서 Task Runner 로그를 백업할 Amazon S3 대상 경로입니다.

`resourceRole`  
리소스를 생성할 계정의 IAM 역할입니다(예: 사용자 대신 EC2 인스턴스 생성 및 구성). Role과 ResourceRole은 동일한 역할일 수 있지만 보안 구성에서 각각 더 세분화됩니다.

# 활동
<a name="dp-copydata-redshift-activity-cli"></a>

수행할 작업을 나타내는 활동의 정의인 JSON 파일에 있는 마지막 선택입니다. 이 경우 `RedshiftCopyActivity`구성요소를 사용하여 Amazon S3에서 Amazon Redshift로 데이터를 복사합니다. 자세한 내용은 [RedshiftCopyActivity](dp-object-redshiftcopyactivity.md) 단원을 참조하십시오.

`RedshiftCopyActivity` 구성요소는 다음 필드로 정의됩니다.

```
{
  "id": "RedshiftCopyActivityId1",
  "input": {
    "ref": "S3DataNodeId1"
  },
  "schedule": {
    "ref": "ScheduleId1"
  },
  "insertMode": "KEEP_EXISTING",
  "name": "DefaultRedshiftCopyActivity1",
  "runsOn": {
    "ref": "Ec2ResourceId1"
  },
  "type": "RedshiftCopyActivity",
  "output": {
    "ref": "RedshiftDataNodeId1"
  }
},
```

`id`  
참조 전용 레이블인 사용자 정의 ID입니다.

`input`  
Amazon S3 소스 파일의 참조입니다.

`schedule`  
이 활동을 실행할 일정입니다.

`insertMode`  
인서트 유형(`KEEP_EXISTING`, `OVERWRITE_EXISTING` 또는 `TRUNCATE`)입니다.

`name`  
참조 전용 라벨인 사용자 정의 이름입니다.

`runsOn`  
이 활동이 정의하는 작업을 수행할 전산 리소스입니다.

`output`  
Amazon Redshift 대상 테이블의 참조입니다.

# 파이프라인 정의 업로드 및 활성화
<a name="dp-copydata-redshift-upload-cli"></a>

파이프라인 정의를 업로드하고 파이프라인을 활성화해야 합니다. 다음 예제 명령에서 *pipeline\$1name*을 파이프라인의 레이블로 대체하고, *pipeline\$1file*을 파이프라인 정의 `.json` 파일의 정규화된 경로로 대체하십시오.

**AWS CLI**

파이프라인 정의를 생성하고 파이프라인을 활성화하려면 다음 [create-pipeline](https://docs.aws.amazon.com/cli/latest/reference/datapipeline/create-pipeline.html) 명령을 사용하십시오. 대부분의 CLI 명령에서 이 값을 사용하므로 파이프라인 ID를 기록하십시오.

```
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
```