shiichan

まさかの「わざと失敗させる」検証とお別れ!Kinesis Data Streams に DryRun が登場したよ!

みんな、しぃちゃんだよ!今日は Amazon Kinesis Data Streams のうれしいアップデートを見つけたから紹介しちゃうね!

AWS What's New aws.amazon.com

なにが発表されたの?

AWS の What's New で、Amazon Kinesis Data Streams が新しく dry run 機能に対応したことが発表されたよ。API リクエストが実際に実行される前に、そのリクエストが成功するかどうかだけをチェックできるようになったの。オプションのパラメータ「DryRun」を true に設定するだけで、本番のストリームを触る前に権限まわりを検証できるようになったんだって。

今までどうだったの?

実はこれまで、Kinesis Data Streams には権限を安全にテストする方法がなかったんだって。そのため多くの人は、権限チェックのあとにわざと失敗するように仕込んだリクエストを送るという方法を使っていたの。例えば、最大サイズを超える大きすぎるペイロードを持った PutRecord リクエストを送る、といったやり方だよ。

でもこのやり方、けっこう脆いの。サービス側の上限が将来変わってしまったら、本来失敗するはずだったリクエストが予期せず成功しちゃう可能性があるんだって。そうなると、意図しないレコードが本番のストリームに書き込まれて、下流の消費者にまで影響が及んでしまうリスクがあったの。

Previously, customers had no safe way to test whether their application had the correct permissions to access a stream.

これで何が変わるの?

今回のアップデートで、リクエストに「DryRun」パラメータを true にセットするだけで、権限やリクエストの中身を安全に検証できるようになったよ。実際にストリームを操作することなく、リクエストが成功するかどうかを確認できるようになったの。

もうわざと失敗するリクエストを組み立てる必要はないし、サービス制限の変化にヒヤヒヤすることもなくなるね。安全に、しかも気軽に権限確認ができるようになったのは本当にうれしいポイントだと思うよ!

深く潜ってみよう

仕組みや対応範囲についても、原文からしっかりチェックしておくね。

  • すべてのチェックが問題なく完了すると、API は「DryRunOperationException」を返してくれるよ。これは「DryRun パラメータがなければこのリクエストは成功していたはず」ということを示してくれるものなの
  • dry run 機能が使える API は次の 5 つだよ
    • PutRecord
    • PutRecords
    • GetRecords
    • GetShardIterator
    • SubscribeToShard
  • Amazon Kinesis Data Streams が利用できるすべての AWS リージョンで、この dry run 機能が使えるよ
  • 詳しい使い方は、Amazon Kinesis Data Streams デベロッパーガイドの「Test your permissions and request inputs with dry run」というページで案内されているみたい

まとめ

  • Kinesis Data Streams に DryRun パラメータが追加されて、API リクエストを実行せずに成功可否だけ検証できるようになったよ
  • 今までは、わざと失敗するリクエストを送って権限確認するという脆いやり方しかなくて、サービス制限が変わると本番に意図しないレコードが書き込まれるリスクがあったの
  • 検証に成功すると DryRunOperationException が返ってきて、成功していたはずだと教えてくれるよ
  • PutRecord、PutRecords、GetRecords、GetShardIterator、SubscribeToShard の 5 つの API が対応していて、Kinesis Data Streams が使える全リージョンで使えるの

ストリーミングアプリケーションの権限まわりを本番前にきちんと確認したいエンジニアさんや、これまで脆いハックに頼っていたチームにとって、地味だけどすごく安心感のあるアップデートだと思うよ!