はじめに
こんにちは、技術3課の紅林です。前回はCloud AutomatorでSlackの全チャンネルの1日分メッセージの取得を自動化する試みをご紹介しました。今回は、AWS Data Pipelineを使って、同様のことをしてみたいと思います。
AWS Data Pipelineについて
AWS Data Pipeline(以下、Data Pipeline)についての説明は公式サイトの以下の説明がわかりやすいので引用します。
AWS Data Pipeline は、指定された間隔で、信頼性のあるデータ処理やデータ移動(AWS のコンピューティングサービスやストレージサービス、ならびにオンプレミスのデータソース間)を行うことができるウェブサービスです。AWS Data Pipeline を使用すると、保存場所にあるお客様のデータに定期的にアクセスし、必要なスケールのリソースで変換と処理を行い、その結果を Amazon S3、Amazon RDS、Amazon DynamoDB、Amazon EMR のような AWS サービスに効率的に転送できます。
AWS Data Pipeline により、耐障害性があり、繰り返し可能で、高可用性を備えた、複雑なデータ処理ワークロードを簡単に作成できます。リソースの可用性の保証、タスク間の依存関係の管理、タスクごとの一時的な失敗による再試行やタイムアウト、失敗通知システムの作成などについて心配する必要はありません。
Amazon Data Pipeline (データワークフローオーケストレーションサービス) | AWS https://aws.amazon.com/jp/datapipeline/
より詳細な説明は以下のドキュメント等を参照頂けたらと思います。
AWS Data Pipeline とは - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
定義済みのアクティビティを使えば、RDSやRedshiftにデータを挿入したりといった処理をData Pipelineが実行してくれます。以下のブログでは、RDSにデータをロードする取り組みを紹介しておりますので、適宜ご参照ください。
AWS Data PipelineでS3からRDSにデータをロードしてみた – サーバーワークスエンジニアブログ
今回は、前回の記事で作成したSlackデータを取得するスクリプトを実行するため、ShellCommandActivityを使います。
構成/処理の流れ
構成および処理の流れは以下の通りになります。
①Data PipelineがAMIからEC2インスタンスを作成します
②作成したEC2上にあるスクリプトをData Pipelineが実行し、データを取得します
③スクリプトが取得したデータをS3に保存します
④Data PipelineがEC2インスタンスを削除します
手順概要
AMI作成
Data Pipelineはスクリプト実行時に、スクリプトを配置済みのAMIからEC2インスタンスを作成し、スクリプトを実行します。
したがって、まずは、前回の記事で作成したスクリプトを配置したインスタンスからAMIを作成しておきます。
Pipeline作成
次にPipelineを作成します。AWSマネジメントコンソールにログインし、「Data Pipeline」を選択し、「Create new pipeline」を選択します。
以下の画面が表示されるため、Nameに適当な名前を入力し、「Source」に「Build using Architect」を選択し、下部の「Edit in Architect」を選択します。
アクティビティ等を編集する画面になりますので、まずは「Schedule」を選択します。
今回の例では、1日ごとの実行を想定するため、「Period」の「Day(s)」を選択し、「1」を入力します。
「Start Date Time(UTC)」に最初の実行する時間を入力します。
次に実際にスクリプトを実行するアクティビティ等を作成します。
画面中の「Add」を選択し、「ShellCommandActivity」を選択します。
次に、「Activity」を選択します。
- 「Schedule」に先程作成したScheduleを選択します。
- 「Add an optional field...」から、「Runs on」を選択します。
- 「Runs on」から「Create new: Resource」を選択します.
- 「Add an optional field...」から、「Command」を選択します。
- 「Command」のパラメータにスクリプトを実行するコマンドを入力します。
次に、リソースを設定します。
「Resources」を選択し、以下入力します。
- 「Schedule」に先程作成したScheduleを選択します。
- 「Image Id」に作成したAMIのIDを入力します。
- 「Instance Type」に実行環境のインスタンスのタイプを入力します。
- 「Terminate After」にどのくらいの時間が経ったらインスタンスをターミネートするかを入力します。
以上で、準備が整いました。
「Save」を選択し、次に出て来る画面で「Activate」を選択します。
間違いなく、設定されていれば、指定された時刻にインスタンスが作成され、スクリプトが実行されます。
おわりに
今回はData Piplineを使って、Slackの全チャンネルの1日分メッセージの取得を自動化する試みを紹介しました。次回はAWS Lambdaを使って、同様のことをやってみたいと思います。