Copiar dados CSV usando a linha de comando
Você pode criar e usar pipelines para copiar dados de um bucket do Amazon S3 para outro.
Pré-requisitos
Antes de começar, é necessário concluir as seguintes etapas:
-
Instale e configure a Interface da linha de comando (CLI). Para obter mais informações, consulte Como acessar o AWS Data Pipeline.
-
Certifique-se de que os perfis do IAM chamados DataPipelineDefaultRole e DataPipelineDefaultResourceRole existem. O console do AWS Data Pipeline cria essas funções para você automaticamente. Se você não usou o console do AWS Data Pipeline pelo menos uma vez, deverá criar essas funções manualmente. Para obter mais informações, consulte Funções do IAM para o AWS Data Pipeline.
Definir um pipeline no formato JSON
Este cenário de exemplo mostra como usar as definições do pipeline JSON e a CLI do AWS Data Pipeline para programar a cópia de dados entre dois buckets do Amazon S3 em um intervalo de tempo específico. Este é o arquivo JSON de definição de pipeline completo, seguido de uma explicação para cada uma das seções.
nota
Recomendamos que você use um editor de texto que possa ajudá-lo a verificar a sintaxe dos arquivos formatados com JSON e nomeie o arquivo usando a extensão de arquivo .json.
Para ficar mais claro, neste exemplo ignoraremos os campos opcionais e mostramos apenas os campos obrigatórios. O arquivo JSON de pipeline completo para este exemplo é:
{ "objects": [ { "id": "MySchedule", "type": "Schedule", "startDateTime": "2013-08-18T00:00:00", "endDateTime": "2013-08-19T00:00:00", "period": "1 day" }, { "id": "S3Input", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://
example-bucket/source/inputfile.csv
" }, { "id": "S3Output", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://example-bucket/destination/outputfile.csv
" }, { "id": "MyEC2Resource", "type": "Ec2Resource", "schedule": { "ref": "MySchedule" }, "instanceType": "m1.medium", "role": "DataPipelineDefaultRole
", "resourceRole": "DataPipelineDefaultResourceRole
" }, { "id": "MyCopyActivity", "type": "CopyActivity", "runsOn": { "ref": "MyEC2Resource" }, "input": { "ref": "S3Input" }, "output": { "ref": "S3Output" }, "schedule": { "ref": "MySchedule" } } ] }
Schedule
O pipeline define uma programação com uma data de início e fim, além de um período para determinar com que frequência a atividade neste pipeline é executada.
{ "id": "MySchedule", "type": "Schedule", "startDateTime": "2013-08-18T00:00:00", "endDateTime": "2013-08-19T00:00:00", "period": "1 day" },
Nós de dados do Amazon S3
Em seguida, o componente de pipeline S3DataNode de entrada definirá um local para os arquivos de entrada. Nesse caso, o local de um bucket do Amazon S3. O componente S3DataNode de entrada é definido pelos seguintes campos:
{ "id": "S3Input", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://
example-bucket/source/inputfile.csv
" },
- Id
-
O nome definido pelo usuário para o local de entrada (somente um rótulo para sua referência).
- Tipo
-
O tipo de componente do pipeline, que é “S3DataNode” para corresponder com o local em que os dados residem, em um bucket do Amazon S3.
- Schedule
-
Uma referência para o componente de programação que criamos nas linhas anteriores do arquivo JSON "MySchedule".
- Path
-
O caminho para os dados associados ao nó de dados. A sintaxe de um nó de dados é determinada pelo seu tipo. Por exemplo, a sintaxe para um caminho do Amazon S3 segue uma sintaxe diferente que é apropriada para uma tabela de banco de dados.
Em seguida, o componente S3DataNode de saída definirá o local de destino para saída dos dados. Ele segue o mesmo formato que o componente S3DataNode de entrada, exceto pelo nome do componente e um caminho diferente para indicar o arquivo de destino.
{ "id": "S3Output", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://
example-bucket/destination/outputfile.csv
" },
Recurso
Esta é uma definição do recurso computacional que executa a operação de cópia. Neste exemplo, o AWS Data Pipeline deve criar automaticamente uma instância do EC2 para executar a tarefa de cópia e encerrar o recurso após a conclusão da tarefa. Os campos definidos aqui controlam a criação e a função da instância do EC2 que faz o trabalho. O EC2Resource é definido pelos seguintes campos:
{ "id": "MyEC2Resource", "type": "Ec2Resource", "schedule": { "ref": "MySchedule" }, "instanceType": "m1.medium", "role": "
DataPipelineDefaultRole
", "resourceRole": "DataPipelineDefaultResourceRole
" },
- Id
O nome definido pelo usuário para a programação do pipeline, que é apenas um rótulo para sua referência.
- Tipo
O tipo de recurso computacional para executar o trabalho. Nesse caso, uma instância do EC2. Existem outros tipos de recursos disponíveis, por exemplo, o tipo EmrCluster.
- Schedule
A programação para criar este recurso computacional.
- instanceType
O tamanho da instância do EC2 a ser criada. Certifique-se de configurar o tamanho da instância do EC2 que melhor corresponda à carga de trabalho que você deseja executar com o AWS Data Pipeline. Nesse caso, configuramos uma instância do EC2 m1.medium. Para obter mais informações sobre os diferentes tipos de instância e quando usar cada uma delas, consulte o tópico Tipos de instância do Amazon EC2
no site http://aws.amazon.com/ec2/instance-types/. - Função
O perfil do IAM da conta que acessa os recursos, como acesso ao bucket do Amazon S3 para recuperação de dados.
- resourceRole
A função do IAM da conta que cria recursos, como criação e configuração de uma instância do EC2 em seu nome. Role e ResourceRole podem ser a mesma função, mas fornecem separadamente uma granularidade maior na sua configuração de segurança.
Atividade
A última seção no arquivo JSON é a definição da atividade que representa o trabalho a ser executado. Este exemplo usa CopyActivity
para copiar dados de um arquivo CSV em um bucket http://aws.amazon.com/ec2/instance-types/ para outro. O componente CopyActivity
é definido pelos seguintes campos:
{ "id": "MyCopyActivity", "type": "CopyActivity", "runsOn": { "ref": "MyEC2Resource" }, "input": { "ref": "S3Input" }, "output": { "ref": "S3Output" }, "schedule": { "ref": "MySchedule" } }
- Id
-
O nome definido pelo usuário para a atividade, que é apenas um rótulo para sua referência.
- Tipo
-
O tipo de atividade a ser realizada, como MyCopyActivity.
- runsOn
-
O recurso computacional que realiza o trabalho definido por essa atividade. Neste exemplo, fornecemos uma referência à instância do EC2 anteriormente definida. Usar o campo
runsOn
faz com que o AWS Data Pipeline crie a instância do EC2 para você. O camporunsOn
indica que o recurso existe na infraestrutura da AWS, enquanto o valorworkerGroup
indica que você deseja usar seus próprios recursos locais para executar o trabalho. - Entrada
-
O local dos dados a serem copiados.
- Resultado
-
Os dados do local de destino.
- Schedule
-
A programação na qual esta atividade será executada.
Fazer upload e ativar a definição do pipeline
Você deve fazer o upload da definição do pipeline e ativá-lo. Nos comandos de exemplo a seguir, substitua pipeline_name
por um rótulo para seu pipeline e pipeline_file
pelo caminho totalmente qualificado para o arquivo .json
de definição de pipeline.
AWS CLI
Para criar sua definição de pipeline e ativar seu pipeline, use o seguinte comando: create-pipeline. Observe a ID do seu pipeline, pois você usará esse valor com a maioria dos comandos da CLI.
aws datapipeline create-pipeline --name
{ "pipelineId": "df-00627471SOVYZEXAMPLE" }pipeline_name
--unique-idtoken
Atualize a definição do pipeline usando o seguinte comando: put-pipeline-definition.
aws datapipeline put-pipeline-definition --pipeline-id df-00627471SOVYZEXAMPLE --pipeline-definition file://MyEmrPipelineDefinition.json
Se o pipeline for validado com êxito, o campo validationErrors
estará vazio. Você deve revisar todos os avisos.
Para ativar o pipeline, use o seguinte comando: activate-pipeline.
aws datapipeline activate-pipeline --pipeline-id df-00627471SOVYZEXAMPLE
Você pode verificar se seu pipeline aparece na lista de pipeline usando o seguinte comando: list-pipelines.
aws datapipeline list-pipelines