Dataflowのデプロイシェル

はじめに

これは備忘録です。

とりあえずのデプロイシェルを書いたので載せておきます。
今後CIとかも設定していくので、後々載せていきます。

kotlinもjavaもgradleもshell scriptも詳しくはないのでもっときれいに書けるとかあれば教えていただきたいです。

想定読者

  • Dataflow使うためにJavaとかKotlinをいじることになった人
  • gradleでどうやってDataflowをデプロイするかわからない人
  • metadataデプロイされないんだが、どうするんだってなってる人

デプロイシェル

単一のテンプレート用のデプロイシェル

一つのテンプレートのみデプロイする用。
metadataのファイルは自動で上がらないようなのでgsutilでgcsにアップロードするような作りにしてあります。
調べても出なかったので、現状metadataだけ上げてくれない作りって認識。

1
2
3
4
5
6
7
8
cd `dirname $0`

cd ../

templateLocation="gs://projectName/template"

gradle -PmainClass="com.hiko1129.project.templates.$1" generate --args="--runner=DataflowRunner --stagingLocation=gs://projectName-template/staging/ --templateLocation=${templateLocation}/$1"
gsutil cp ./metadata/$1_metadata ${templateLocation}

* シェルスクリプトはプロジェクトルートのscript/に配置

com/hiko1129/project/templates/${template}っていうディレクトリ構成にして、下記のように叩いてデプロイできるようにしました。

1
$ ./script/deploy_template.sh PubSubMessageToAvro

一括デプロイ用のシェル(deploy_all_template.sh)

テンプレートを一括でデプロイする用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cd `dirname $0`

cd ../

filenames=`ls ./src/main/kotlin/com/hiko1129/project/templates/*.kt | xargs -I filename basename filename .kt`

for filename in $filenames
do
  ./script/deploy_template.sh $filename
done
1
$ ./script/deploy_all_template.sh

ビルドタスク

1
2
3
4
5
6
task("generate", JavaExec::class) {
    if (project.hasProperty("mainClass")) {
        main = project.properties["mainClass"] as String
        classpath = sourceSets["main"].runtimeClasspath
    }
}

終わりに

beam sdkと仲良くなれない。
Apache Beam SDK(Cloud Dataflow)についてのメモ

Built with Hugo
テーマ StackJimmy によって設計されています。