🗺️

2024年、Snowflake Terraformがこう生まれ変わる!

2024/03/01に公開

github.com/Snowflake-Labs/terraform-provider-snowflake の2024年のロードマップが公開されました。
今後、どのように変更されそうか?またどのように付き合っていくべきかが見えるようになったので、私なりの見解をまとめてみようと思います。

ちなみに、元々はSnowflake Providerは公式が開発しているものではなく、ユーザーが作成したツールという体裁でスタートしていました。
現在では、contributorsにSnowflake社員が名を連ねていますが、過去を遡れば一般ユーザーが開発を担当していた背景があります。
そこから公式のツールとして開発体制が整備された結果、長期的にメンテナンスする上では避けては通れない破壊的変更を含む設計の見直しが進められるに至った、という経緯があります。

ロードマップの内容

原文: ROADMAP.md

Snowflake Terraformの2024年のロードマップは、主に以下の3つの目標を掲げています。

  • 機能の追加と更新。欠落している機能を追加し、既存の機能を更新します。
  • プロバイダの課題解決。現在発生しているプロバイダの問題を特定して解決します。
  • プロバイダの安定性向上。プロバイダをより信頼できるものにします。

現在は特にGRANTの再設計、SDKの書き換え、リポジトリのissue解決に注力しているとのことです。
次のステップとして、SnowflakeのすべてのGA機能をサポートすること、識別子に関する改善などを計画しているそうです。
また、プロバイダの設定の見直し、テストの安定化も行う予定で、これらはバージョン1への移行に向けた重要なステップであると位置づけられているようです。

ロードマップには、それぞれ細かいトピックについても軽くコメントがありますが、当記事では、その中で利用者が運用していく上で影響強いものに抜粋して解説します。

GRANTの再設計: Redesigning Grants

Grants proved to be one of the most common pain points for the provider’s users. We have been focusing on designing the proper resources for the past few weeks. The development is in progress, but more topics still need our attention (like granting ownership, and imported privileges, to name a few).

書かれている通り、GRANTは破壊的変更を含む大幅な改修が入っています。
利用者にとっては、現時点で必要な対応として、snowflake_grant_privileges_to_account_role を使ったGRANTへ移行することです。

移行対象となるリソースは以下のとおりです。

  • snowflake_stage_grant
  • snowflake_warehouse_grant
  • snowflake_database_grant
  • snowflake_schema_grant
  • snowflake_table_grant
  • snowflake_integration_grant
  • snowflake_view_grant
  • snowflake_tag_grant
  • snowflake_pipe_grant
  • snowflake_external_table_grant
  • snowflake_function_grant
  • snowflake_stream_grant
  • snowflake_procedure_grant
  • snowflake_file_format_grant
  • snowflake_sequence_grant

これらのリソースから、新しいリソースへのマイグレーションについては、リソースマイグレーションドキュメント でいくつかの方法が示されているので、自組織の状況に合わせて実施いただければと思います。

当社では、ほとんどのリソースがモジュールを使用して作成されているため、importとremoveブロックをある程度パターンで落とし込んで対応することができたので、大怪我せずに済みました。(チームメンバーのharukiがやってくれました。)

GRANTは具体的にどのように変わるのか

Snowflake Labs が公開した grants_redesign_design_decisions.md には、GRANTの抜本的な再設計の背景と概要が説明されています。ユーザーにとって特に重要な変更点は以下の通りです。

  • 新しいグラントリソースでは、デフォルトで enable_multiple_grants が暗黙的に有効になります。これにより、リソースで付与された権限のみが管理されるようになります。
  • on_allall_privileges による付与の場合、インフラ変更のたびに再付与が発生する問題に対処するため、always_apply パラメータが導入されました。ただし、これは Terraform の収束性の原則とは相反する動作です。
  • on_future オプションは「トリガー」として扱われるようになり、リソース削除時に付与済み権限はそのまま残るようになります。
  • 識別子関連の不具合が多かったため、スキーマレベルでのバリデーションが強化されました。特に、引用符の欠落や特殊文字を含む識別子などの問題が多発していましたが、一部のマルチパーパスなフィールドについてはバリデーションが困難です。それでも、エラーメッセージの改善により、グラントの定義が容易になりました。
  • snowflake_grant_privileges_to_role の後継リソースとして snowflake_grant_privileges_to_account_role が導入されました。これはコード改善を主目的とした変更です。
  • snowflake_grant_privileges_to_application リソースは実装されません。アプリケーションコンテキスト内でのみ実行可能であるためです。同様の理由から、grant_application_role リソースに application_role_name パラメータは追加されません。
  • instance_role に関しては、識別子の扱いが複雑なため、当面 snowflake_grants データソースへの追加は見送られます。

全GA機能のサポート: Supporting all Snowflake GA features

Eventually, we want to support all Snowflake features. We first want to support all the GA ones. It does not only mean that we will add the missing resources; we will also carefully inspect the existing ones to find missing parameters and flaws in their designs. We will start with the most critical resources like databases, schemas, tables, tasks, and warehouses.

今後長く使っていく上で、Snowflakeの全てのリソースがサポートされることは非常に重要であり、そのサポートが明言されていることは嬉しいことです。
ただし、すべてがいきなり完璧にサポートされるわけではなく、優先的に取り込まれるリソースがある点に注意が必要です。

それが、データベース、スキーマ、テーブル、タスク、ウェアハウスです。

これら以外は基本的に優先度が低いと考えた方が良さそうです。実際アラートのような優先度の低い状態のリソースは、今後対応する趣旨の回答がされています。

参考: Alert resource remains after execution failure

既存の課題解決: Resolving existing issues

Having the ~470 open issues in the repository is not fun. We want to reduce that number drastically. We have recently taken multiple different steps to achieve it:

1年程前はissueが散乱しており大変な状況だったと思いますが、現在はissueを出せばある程度拾われ、優先度に応じて対応される体制が整ったと感じます。

バグらしき挙動を発見した場合は、積極的にissueを立てていくことをおすすめします。開発チームとしても早期の課題解決に取り組む姿勢が示されていると考えられるので、フィードバックを活発化する意味でも重要だと考えます。

透明性向上とコミュニティの巻き込み: Increasing transparency and involving the community in discussions

We are actively being asked about the state of the development, plans for introducing new resources, and design decisions. This roadmap is one of the many steps we are willing to take to be more transparent to our users.

GitHubのDiscussionsで開発状況や新機能の導入計画、設計方針について積極的に議論が行われているので、今後の動向が気になる方はウォッチしていくことをおすすめします。

苦痛と期待

ロードマップを読んだ感想と最近の破壊的変更の頻度を踏まえると、「これは追従するのが大変だな😅」という印象を受けました。

一方で、現在のSnowflake Providerには多数のバグがあり、挙動の安定性に欠けているという課題があるだけに、オフィシャルなサポートが入ることへの期待値は高いです。

実際に新しいGRANTへの移行という、作業量的に大変な変更がありましたが、以前のインタフェースと比較すると扱いやすく改善されていると感じています。(以前のGRANTは1権限に対して複数ロールを設定する形で、非常に扱いづらかったです。)

そのほか、Provider周りの挙動改善など、筋の通った改修が多数行われていることが大きなメリットだと考えています。例えば環境変数の設定が優先される問題など、ある種の「罠」が解消されたり、地味に助かる改善もちゃんと入っています。

しかし、これは今年1年くらい色々ありそうだぞ?って感じなので、どう向き合うか、私の現時点の戦略について少しシェアします。

Snowflake Providerとの向き合い方

積極的にモジュール化し、インタフェースを隠蔽する

適切な戦略はデータ基盤の体制にもよりますが、弊社の場合は様々なエンジニアが様々なリソースを作成する可能性が高い体制なので、リソース作成の自由度を保ちつつ、運用面での変更容易性も担保するため、積極的なモジュール化が有効だと考えています。

これまでもモジュール化は推し進めていたと思いますが、ここまでの破壊的変更があることを踏まえると、より一層それを推進する必要があるでしょう。

モジュールを利用せずにリソースをそのまま様々な場所で生のリソースを使用すると、長期的に見て一貫性が失われやすくなります。そうなると、破壊的変更が入った際の移行作業が複雑化したり、そもそもベストプラクティスから外れたリソース設計につながったりするリスクが高まります。

アラートのissueでも議論されているように、今後も見直しが必要なリソースはまだまだ多いと考えられます。プロパティの削除や追加、さらにはリソースそのものの入れ替えなど、様々な変更が予想されます。

例えば、snowflake_alertが基盤の至る所で100箇所以上定義している状況に対して、破壊的変更時の移行作業は非常に複雑なものになるでしょう。あのチームはこうやって定義してて、このチームはこうやって定義してるを色々見ていくだけで一苦労です。

こうしたリソースをモジュールでラップすることで、生のインタフェースへの依存を減らし、作成パターンをある程度定型化できます。そうすることで、破壊的変更発生時の影響範囲を限定しつつ、比較的柔軟に対応できる体制を構築できるのではないかと考えます。

アップデートは慎重に実行する

snowflake_grant_privileges_to_role の名前変更などを見ていると、一度確定した方針が再度変更されるケースがあると考えられます。 頑張って追従しても、苦労が水の泡になってはモチベーションが下がります。

そのため、便利なアップデートや開発上必要なアップデートが入ったタイミングで上げていくつもりです。

どういう時はアップデートするの?の具体例を挙げると、例えば、v0.86.0 ➞ v0.87.0 はアップデート対象だと考えます。このバージョンから、Provider設定が環境変数より優先されるようになり、SNOWFLAKE_ROLEが設定されていてもProviderのほうが優先されます。

これより前の振る舞いでは、SNOWFLAKE_ROLEで何か設定があるとそちらが優先される挙動だったので、扱いにくかったため、運用上大きな改善点だと考えています。

アップデート時の必要作業は、マイグレーションガイドを参照するとよいでしょう。

まとめ

Terraform Snowflakeは業務にとって、とても重要な役割を果たしています。それ故に大きな変更があることは大変ですが、間違いなく良い方向には進んでいるので、ユーザーとして支えていきたいですね。

さて、アップデートするぞ。

Snowflake Data Heroes

Discussion