虎塚(144)8383件のシェア(ちょっぴり話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、虎塚です。Pipeline」を聴講したので、レポートします。ジャパンの今井さんでした。Pipelineは、ジョブの定期実行のために利用できるAWSのサービスです。Webinarからアップデートされていましたので、ふたたびレポートします。Pipelineとはなにか一言でいうと、サービス間のデータ統合・処理をスケジュールベースで自動化するサービス。Pipelineでは、データの分析、集計、レポート作成などに必要な次のような処理を実行できる。サーバやDBからデータを回収ETL(前処理)RedshiftへのデータロードAWSのビッグデータプラットフォームAWSのビッグデータ関連サービスには、次のようなものがある。Pipelineである。Learningデータの前処理は面倒くさいたとえば、データを集めてDBにロードするバッチ処理を記述すると、データ回収や集計などのロジックだけでなく、スケジュール管理や失敗時のリトライのための状態管理などの例外処理も必要になるため、コードが長大になりがちだ。データの前処理では、次のような部分が面倒くさい。異常処理としてのリトライ、タイムアウト、イベント通知ユースケース例ここで、「定期的に起動中のEC2リストを取得して、S3に保存する」処理をスクリプトで実行する場合を考えてみる。通常は次のようにおこなうが、いくつかの課題がある。Pipelineでは対応できる。Pipelineでおこなう設定(処理の定義)の流れを見てみる。Role)ブラウザに表示されるキャンバス(Architect画面)の中で設定をおこなう歯車アイコンはアクティビティ。どんな処理を、どんなインターバルで、どのリソース上で動かすか定義する茶筒(笑)アイコンはデータノード。RDSを表わすリソースは、実際に処理を実行するEC2やEMR定義の集合。アクティビティにattachするスケジュールは、処理のインターバル定義の集合。アクティビティにattachするアクションは、タスク成功/失敗時の通知などの定義の集合。アクティビティにattachする上記で、アクティビティ、データノード、リソース、スケジュール、アクションという言葉が出てきた。Pipeline処理は、これらを使って定義する。それぞれの言葉が指す概念は、あとで詳しく解説することにして、まずは具体的な設定内容を紹介する。PathS3バケットのパスを指定アクティビティアクティビティとして、次の内容を定義する。TypeShellCommandActivity(指定したシェルスクリプトを実行)を選択する選択可能な他のアクティビティは後述Schedule処理インターバルを指定する。SqlActivityがある。スケジュールスケジュールは、処理を実行するタイミングのこと。TypeScheduleを指定するPeriodインターバル(処理の実行間隔)を15分〜3年の間で設定する。Type起動するリソースのAMIやインスタンスタイプリソース側にもスケジュールの設定があることに注意。Afterを15分に設定すると、指定したリソースが1時間ごとに起動して、その都度15分たつと削除される。ARNここまでのまとめ以上を設定してActivateすると、定義にしたがってジョブが実行される。変数${OUTPUT1_STAGING_DIR}を定義しておくと、そこに配置されたファイルがS3へアップロードされる。Details画面で、リソースの起動ログやジョブの実行ログを確認できる。Pipeline(AWSサービス側)のものが使われる。Pipelineのテンプレートには、たとえば次のようなものがある。Pipelineの仕組みを体系的に見てみる。Pipelineでは、次の要素を組み合わせてワークフローを定義する。イベントの通知先を定義オンプレミス環境と連携することもできる。実際にワークフロー定義を記述する言葉で、上記の要素を言い換えると、次のようになる。以降で、それぞれの登場人物の詳細を改めて確認する。(Activities)アクティビティは、データ移動や処理の全体を管理する。入出力、スケジュール、処理内容、リソース、通知アクションを定義できる。定義した処理は、AWSとオンプレミスのどちらでも実行できる。サポートされるアクティビティ一覧は、次のページを参照。CopyActivityや、後で例を示すShellCommandActivityなどがある。Nodes)Input/Outputデータの場所やタイプを定義する。S3バケットのバスDynamoDBRedshiftその他、AWSサービスに限らず、SQLを解釈可能な各種データベースフォーマットは、CSVをはじめカスタマイズした形式が自由に利用できる。(Schedule)処理を実行するタイミングを定義する。短いインターバルは15分で、それより短くすることはできない。(Resource)タスクを実行するリソースを定義する。これが、DataPipelineのコントロールブレーンとやりとりする。Pipelineが起動するリソースではないEC2)やオンプレミスのサーバでも動かすことができる。--logUri=s3://mybucket/foldernameリソースは、スケジュール定義にしたがって起動し、終了する。スケジュールのカスケードは自動的に行われるが、アクティビティとリソースのスケジュールを別々に指定することもできる。20分に1度EC2を起動すると、その都度1時間分の利用費がかかってしまう。そこで、リソースのスケジュールは1時間に1回、アクティビティのスケジュールを20分と定義することで、コストを節約してタスクを実行できる。(Preconditions)条件が成立した場合のみ後続タスクを実行するように定義できる。次のような定義ができる。DynamoDBのテーブルが存在するとき/データがあるときS3キーが存在するときS3プリフィックスが存在するとき独自のシェルこアンド実行が成功したとき依存するPipelineタスクが成功したときその他のtipsデータとテーブルのステージングタスク実行時にデータへアクセスしやすくするための仕組みとして、ステージングと呼ばれる機能がある。処理を実行するEC2やEMRの中に入力と出力のディレクトリを定義して、そこからデータを自動的にリソースへコピーしたり、テーブルを自動的に生成したりできる。これによって、処理対象のデータをリソースローカルに置くことができる。ShellCommandActivityでは、ステージングの設定値をtrueにすることで、変数${INPUTx_STAGING_DIR}と${OUTPUTx_STAGING_DIR}を使えるようになる。発生したとき設定可能なアクションは、SNS通知とリソース削除の2種類。失敗時の自動リトライは、デフォルト3回で、初期実行を含め1〜6回の実行回数を設定できる。ConsoleのGUIを操作して定義したワークフローの要素を、JSONに出力できる。Pipelineのバージョン管理に便利。出力したファイルは、もちろんインポートして使うことができる。料金アクティビティ、または依存関係の従量課金(アクティビティ/依存関係の月額単価)になる。AWS上の場合、1日に1回以上起動されるアクティビティについては$1.00、それより少なければ$0.60。オンプレで動かす場合の料金や、実行しないPipelineの料金も定められている。Pipelineを使うと便利になる。Lambdaを使うことが望ましい。Lambdaを起動する。Lambdaの事例として、Expediaがある。LambdaがEMRを起動してデータを処理した後、S3にデータを格納する。一連のログはDynamoDBに格納する。Lambdaでの処理の待ち合わせ処理の待ち合わせには、DynamoDBを使用する。ファイルのカタログにDynamoDBを使用し、LambdaがDynamoDBを参照して処理に必要なファイルが揃っているかをチェックする。揃っていたら後続の処理を実行する。Pipelineには、1日に1回、週に1回、月に1回などの頻度で定期的におこなわれる処理がフィットする。データのインポート、クロール、アップロード、バックアップと呼ばれる処理など。Pipelineを適用すると、AWS的にコスト効率が高くなる。実行環境を定期的に手動で起動する必要がなくなる。Pipelineを使うと自動化できる。Pipelineにあらかじめ用意されたアクティビティを元に、どのようなユースケースがフィットするかを考えてみる。定期的にローデータテーブルを集計して、結果をサマリテーブルに入れるEMRActivityEMRでJARを指定して処理を実行する。指定するJAR次第でなんでもできる。ShellCommandActivity並みに自由度が高い。Pipelineの多様な使い道が紹介された。Pipelineを使うことで、バッチ処理を管理しやすくする。バッチ処理のスクリプトは、モノリシックな秘伝のタレになりがちだが、適切に分割してそれぞれ管理できるようになる。Pipelineが用意する様々なプリセットのアクティビティを使えるので、スクリプトを書く手間が省ける。Pipeineに丸ごとまかせることができる。Lambdaを使いたいです。機能要望として承ります。EC2もEMRも時間単位の課金なので、100msec単位で課金できるといいですよね。純粋に時間ベースで動くので、利用者側で余裕をみて安全率を設定してください。Afterを指定するのがおすすめです。「15分に1回」と指定したリソースとアクティビティがある場合は、先にリソースが起動されます。Pipelineはリソースを探しにいきます。オンプレ-AWSの間の接続方法とルーティングの設定に依存します。インターネットでしか繋がっていなければ、インターネット経由になります。Connect経由になります。cloud-initが入っているサーバであれば利用できます。Clientからコマンド発行するのは、リソース上になるので、実行するリソースが所属しているセキュリティグループやサブネットで設定をしてください。AWS内であれば、制御可能です。オンプレでどうなるかは確認して回答します。Pipelineの定義に必要な概念がよく理解できるウェビナーでした。Lambdaが使えるようになると、さらにコストメリットが期待できそうなので、楽しみにしています!それでは、また。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。