Digdag pluginのローカルでの動作確認方法

digdag-slack pluginにPullRequestを送ったときに、ローカルで動作確認する方法が最初わからなかったのでメモしておきます。

1. ビルドする

$ ./gradlew publish

2. digファイルのプラグインの読み込み設定を書き換える

_export:
  plugin:
    repositories:
      - file://${repos}
    dependencies:
      - io.digdag.plugin:digdag-slack:0.1.4-SNAPSHOT

repositoriesにローカルのファイルパスを指定し、dependenciesにpackageのclass pathを指定します。 上記の設定だと、reposが変数になっているので -p repos=`pwd`/build/repo と指定することが可能です。

3. pluginのキャッシュファイルを削除する

$ rm -rf .digdag/plugins

Digdagは実行時にプラグインをローカルディレクトリにキャッシュしているようで、プラグインのバージョンアップを行わない限り、そちらのファイルが使われてしまいます。 通常時は問題ないですが、動作確認をするときは古いファイルのままになってしまうことがあるため、キャッシュファイルを削除します。

4. digdag runする

$ digdag run sample.dig -p repos=`pwd`/build/repo

上記のコマンドでワークフロー(sample.dig)を実行し、動作確認できます。

AWS Batchの使用感

AWS Batch を試しに使ってみた感想です。 少ないサンプルでの結果なので間違ってる部分はあるかもしれません。あらかじめご了承ください。

良いところ

管理しなければならない部分が減る

オートスケールやインスタンスサイズなどをAWS側でよしなに調整してくれる。

  • ジョブのコンテナ定義のvcpumemoryに合わせてAutoScalingGroupを作ってくれる。
  • インスタンスサイズは optimal が設定できる。 optimalではジョブの条件を満たすインスタンスを自動的に選んでくれる。

試してないがスポットインスタンスの入札も行ってくれるらしい。

使いにくいところ

ジョブをsubmitしてから実行されるまで数分以上待たされることがある

ComputeEnvironment上にインスタンスが起動していない状態だと、結構待たされる。

  • AutoScalingGroupの設定とインスタンス起動が行われるので、そこに時間がかかっていそう。

インスタンスタイプにoptimalを設定した場合の挙動

起動中のインスタンスタイプでは満たせないジョブをsubmitすると実行まで時間がかかる。

public subnetでしか起動しない

private subnetでNAT通るようにした状態でもいつまでもジョブが実行されず。

  • セキュリティグループは設定できるので実害はないかなとは思う。

インスタンスがTerminateされる時間がまちまち

ジョブがなくなってからインスタンスがTerminateされる時間はまちまち。 ジョブがなくなってから5分程度でTerminateされることもあれば1時間程度かかることもある。

ジョブ定義のパラメータはcommand内でしか使えない

ジョブ定義のパラメータcommand にしか使えない。environment にも使えるようになればさらに便利そう。

  • ジョブ定義のパラメータはジョブをsubmitした時点で置換されるので、JobDetailの中では置換された状態で表示される。
    • 確認しやすいが、秘匿情報を渡したい場合には使えない。

まとめ

  • インスタンスが起動した状態であればジョブキューは迅速に消化されるので最低1台は起動しておくのが良いかなと感じた。
  • インスタンスサイズが変わるときの挙動に不安を感じたので、インスタンスサイズは固定したほうが良さそう。
広告を非表示にする

fluent-plugin-pubsub-customの最近のアップデートについて話してきました

RCO社内LT会に誘われたので、fluent-plugin-pubsub-customの最近のアップデートについて話してきました。

大きな変更点としてはfluentd v0.14ネイティブ対応になったことです。 これでfluentd v0.14から使えるようになった機能に対応していけます。

今実装中なのは、Pub/Subの送信先topicの設定に ${tag} のようなプレースホルダーを使えるようにすることです。 fluentd v0.12ではforest pluginを使って同様のこと実現していました。v0.14からfluentd本体に同様の機能が取り込まれていて、それを有効にするためにプラグイン本体のコードを修正中です。

すでにPRは作成しているのでもうちょっと修正すればマージできるはずです。

github.com

ダウンロード数も非常に多くなってきたので、がんばっていきたい次第です。