Cloud Composerをアップグレードしたいときに知っておきたいこと
Cloud Composerのバージョン
データ基盤を作るということはつまり、ワークフローを管理するということでもあると思います。
それを手助けしてくれるのがAirflowです。
インフラをキッチリ管理できる組織体制が構築されている場合はAirflowを自前で管理したほうがコスト的にも柔軟性の面でも有利なところはあるのかなと思いますが、
我々のような限られたリソースで目的に集中する必要がある組織の場合はCloud Composerのようなマネージドサービスに助けてもらってナンボ、というところがあります。
一方で、マネージドサービスとはいえバージョンアップには適切に対応する必要があります。
本記事は実際にCloud Composerをバージョンアップしたときの注意点を記録したものです。
環境のアップグレード操作
Cloud Composerのアップデート機能はプレビュー版ながらすでにGUI上でも提供されています。
Cloud Composerの画面でいうと、アップデート対象のイメージがあるときに、「環境構成」の「イメージのバージョン」欄からアップグレードボタンが有効化されます。
そこからポチポチすればアップグレードが始まるのですが、その前にやはり公式ドキュメントの「環境をアップグレードする」には目を通しておきたいところです。
ここに記載されているアップグレード前の注意点からいくつか重要と思われる点を挙げてみます。
アップグレード中の動作
アップグレード オペレーション中は、実行中のすべてのタスクがすべて終了します。アップグレードの完了後に DAG の再試行の構成方法に応じて、これらのタスクの再試行がスケジュールされます。
リアルタイム性を求めるようなものはそこまで多く含まれていないとは思いますが、アップグレード作業とDAGの実行時間がなるべく被らないように作業を行うべきです。
アップグレードと互換性
互換性のない変更を行うと DAG が機能しなくなる可能性があります。
これが地味に大きくて、DAGを膨大に抱えている場合は機能しなくなったDAGを修正する時間が必要になる可能性もあります。
公式ドキュメントにはリリースノートを見てくれと書いてあるのですが、なかなかこれを全て把握するのは難しいというのも実情なのかな、と思います。
なので、新バージョンの環境を別途立てて、そちらでどの程度エラーが出るか探る、などが最適解となるのかなと思っています。
(メジャーバージョンアップでもなければ行き当たりばったり方式でもそこまでDAGが壊れることはない印象ではあります。)
バージョン指定
Cloud Composer の最新バージョン以外のバージョンにアップグレードするには、Google Cloud CLI、API、Terraform を使用します。Google Cloud コンソールでは、最新バージョンにのみアップグレードできます。
GUIからだと、最新のバージョンしかアップグレード先として指定できませんが、逆に言うとCLIやTerraformを使えばそれ以外のバージョンを指定できるということです。
ただし、
Cloud Composer や Airflow を以前のバージョンにダウングレードすることはできません。
ともありますのでこちらには注意が必要です。
それでも詰まったら…
上記のような注意事項に気を払っていても、うまくいかないときもあります。
長時間待たされた挙げ句、
Cannot update environment in state UPDATING. Environment must be in RUNNING state.
と表示されたときは泣きそうになります。
ただ、マネージドサービスの場合こういったときやれることは限られているので、私の場合は
PyPIパッケージを全削除 → アップデートという力業でどうにかしています。実際これでどうにかなっています。
ただ、そうするとこの間完全に稼働できなくなるので、メンテナンスタイムと割り切って全てのDAGをオフるとか、そういったことをしたほうがいいかと思います。
(そもそもそれなら別環境立ち上げて移行した方が早いのでは…という感じもしてきますが)
変に格闘してメンテナンスタイムが伸びるよりはマシか…と思うところがあります。識者の方がいらっしゃいましたら記事最下部の「フィードバック」から教えていただけると幸いです。
また、細かい話ですが、Sentryを導入している場合は、AIRFLOW構成のSentry関連の値を消してから作業しないとうまくいかないので注意して下さい(しかも無駄にタイムアウトまで結構な時間を潰される)
Cloud ComposerにSentry入れられるの?という疑問をお持ちの方は「Cloud ComposerにSentryを導入する方法」の記事をどうぞ!
新バージョンでのパッケージの確認
Cloud Composerのバージョンが上がると内包されている各種パッケージのバージョンも上がっているので、開発時にはそれに合わせた環境でコードを書いたほうがいいです。
新しい環境で各種パッケージについてどのバージョンが入っているかはCloud Composer version listのページのCloud Composer imagesのパートを参照すると良いです。
イメージのバージョンにあわせて、Packagesボタンを押すとパッケージごとのバージョンが分かる仕組みになっています。
apache-airflow-providers
系のパッケージも意外とバージョンアップが盛んなので、知らないうちにDeprecatedになっていたり、引数が足されていたりします。
ぜひここはCloud Composerのアップグレードにあわせてしっかり揃えておきたいところです。
まとめ
今回はCloud Composerのアップグレードに関する注意点についてまとめてみました。
が、こちらはまだ正式公開機能ではないことに注意が必要です。公式ドキュメントにも、こう記載してあります。
アップグレードはプレビュー版です。この機能は本番環境では慎重に使用してください。
状況に応じてアップグレード機能を使わずに新しい環境を立ててそちらに移管するとかそういったやり方も含めて検討されると良いかと思います。
パッケージも含めて機能追加が盛んに行われているので、アップグレード自体は行っておくべきだと思います。ただし、DAGが壊れないかには気を払いましょう。
あと、地味にAirflowはUIが頻繁に変わるので面白さもありつつ、一瞬戸惑いもありつつです。
スクショを使ってマニュアルとかを作っても書き換えが必要になるのが大変かもしれませんね…