3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Digdag公式ドキュメントからDigdagを学ぶ-アーキテクチャ

Last updated at Posted at 2020-07-09

目標

Digdagの公式サイトのドキュメントのアーキテクチャを翻訳+α
DigdagのRubyを使ってRailsにバッチを作るまでが最後の目標
http://docs.digdag.io/architecture.html

##目次
Getting started
Architecture
Concepts
Workflow definition
Scheduling workflow
Operators
Command reference
Language API -Ruby
Digdagで環境毎に設定値を変える(RubyOnRails)
Digdagを用いてRubyOnRails環境でバッチ実装v

Digdag Architecture

Automating workflow with Digdag

ワークフローは手動の動作を自動化します。
一連のタスクをワークフローとして定義します。
Digdagは実行し続けます。タスクはオペレータープラグインを使用して定義されるため、中央のワークフローエンジンから多数の種類のシステムをコントロールできます。

プラグインのランタイムフレームワークとして、Digdagはワークロードの自動化に関する残りの問題を処理し、自動化に集中できるようにします。
タスクが失敗した場合、Digdagはアラートを送信します。ワークフローが想定時間内に完了しない場合、Digdagは通知を送信します。
タスクは、ローカルマシン、分散サーバー、またはDockerコンテナーで実行できます。

グループによるタスクの組織化

複雑なワークフローを自動化すると定義はすぐに複雑になります。 Digdagを使用するとタスクをグループに整理できます。
定義を確認する時に概要から見て詳細に移ると思います。
図の上の部分が概要部分でやろうとするのがデータ準備・分析・評価の流れだとすぐわかります。その後各グループの詳細を見ることで開発中デバッグとレビューが簡単になります。管理者は本番環境で何が起こっているのか問題を修正する方法は何かすぐわかります。

データ準備グループ、分析グループ、評価クループ
Untitled Diagram.png

依存する兄弟タスクがない場合、またはすべての兄弟タスクが正常に完了した場合にタスクが開始されます。
グループの親タスクが実行されるとその子タスクが実行されます。それらのすべてが正常に完了すると親タスクも正常に完了します。子タスクが失敗すると失敗した子タスクとその親タスクも失敗します。
ルートタスクが完了するかもしくは失敗すると実行全体が終了します。

Parameters

タスクのグループ化はタスク間でパラメーターを渡すためにも使用されます。
親タスクは子タスクのため変数をエクスポートできます。(例:UNIXシェルのエクスポートコマンドが環境変数を設定するように)。親タスクは実行時に子タスクを生成できるため前のタスクの結果に応じてさまざまなタスクを実行できます。

Workflow as code

Digdagワークフローはコードで定義されます。これによりソフトウェア開発のベストプラクティス(バージョン管理、コードレビュー、テスト、プルリクエストを使用したコラボレーション)がもたらされます。ワークフローをgitリポジトリにプッシュすると誰でもそれをプルして同じ結果を再現できます。

Running with local mode

Digdagは、単一ファイルの実行可能コマンドです。
新しいワークフローの作成と実行はMakefileと同じくらい簡単です。

*.dig 拡張子ファイルはワークフロー定義に使用されます。
digdag run my_workflow.digコマンドはワークフローを実行します。

ローカルマシンでワークフローを開発してテストが終わったらワークフローを定期的に実行するためにサーバーにプッシュする必要があります。

Running on a server

同じディレクトリに存在する* .digファイルとその他のファイルはプロジェクトと呼ばれます。
全てのプロジェクトをDigdagサーバーにプッシュしてその結果サーバー上でワークフローを実行できるようになります。
少し早いですが、前回作ったWorkflowをサーバーにPushしたら以下のようになります。

Digdagサーバー起動
$ digdag init mydag
$ cd mydag
$ digdag run mydag.dig
$ digdag server --memory
WorflowにProject追加
$digdag push mydag

2020-07-09 20:39:20 +0900: Digdag v0.9.41
Creating .digdag/tmp/archive-3560803829245476890.tar.gz...
  Archiving mydag.dig
Workflows:
  mydag.dig
Uploaded:
  id: 1
  name: mydag
  revision: b8b9abb8-b156-4089-a009-a01aa0337d9f
  archive type: db
  project created at: 2020-07-09T11:39:21Z
  revision updated at: 2020-07-09T11:39:21Z

Use `digdag workflows` to show all workflows.

スクリーンショット 2020-07-09 20.39.46.png

Running tasks on Docker

Dockerを利用してコンテイナー中のタスクを実行できます。
dockerオプションが設定されていたらタスクはDockerコンテイナーで実行されます。

まだ詳細タスクについて学んでないので以下のコードの説明はWorkflow definition部分で説明する予定

_export:
  docker:
    image: ubuntu:14.04

+step1:
  py>: tasks.MyWorkflow.step1

Digdagは、プルされたイメージをキャッシュして再利用します。デフォルトでDigdagは更新があった場合でもキャッシュされたイメージを一貫して使用します。 pull_always:trueオプションを設定してDigdagが更新をチェックしタスクが開始されるたびにタグの最新のイメージをプルすることができます。

_export:
  docker:
    image: ubuntu:latest
    pull_always: true

+step1:
  py>: tasks.MyWorkflow.step1
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?