お世話になっております。
しゃまとんです😊

約一年ぶりの投稿になりますが、今回はとある OSS に PR をしてみました。
aws-dax-go という OSS で aws が提供している DAX の Go 向けのライブラリです。

そもそも DAX とは、、、ですが
DynamoDB に特化したフルマネージドサービスなインメモリキャッシュのことです。 DAX は既存の DynamoDB API コールと互換性があり、アプリのロジックを変更する必要がないということで便利そうですよね。

シビアなレスポンスが要求される環境では役に立ちそうですね。 そんな DAX ですが Go 製のアプリケーションの場合は aws-dax-go が公式から提供されているためこちらを使って利用することができます。特に何か変更しなければいけないということはありません。

では、なぜ今回変更を試みたのか?ということですが
他の AWS のサービスを Go で利用する場合 aws-sdk-go-v2 というものがあります。aws-sdk-go もあるのですが、v2 で色々と改善されています。DynamoDB は API が提供されており DAX も同じように利用できるのでは?と思うのですがなぜか aws-dax-go に含まれるような API の提供はされてないため使えないんですね。

そして aws-dax-go は aws-sdk-go を使って機能を実装しているため、aws-sdk-go-v2 の dynamodb を開発で使い始めたのち DAX が必要になった場合に aws-sdk-go に強制的に移行させられてしまうのです…
これって辛くないですか?

実は aws-dax-go も v2 を support してくれーという issue が結構昔から立っていたのですが、一向に対応される気配がないっぽいんですよね。(もうすぐ5年経ちそう…)

言ってても仕方なさそうだよな〜、という感じと
置き換えていけば意外とできるのでは〜?みたいな勢いでやってみたらコード変更量がなかなかのボリュームになりました。 まぁ、動かないものを PR しても仕方ないですしね。 ということでこの PR を出してみました。

summary of changes にも記載していますが、概要は下記の通りです。

  • aws-sdk-goaws-sdk-go-v2 にすべて置き換え
  • V2 の DynamoDB API の interface に合わせる形で API を更新
  • 代替できない API は一旦廃止 (PutItemRequestaws/request とか使うやつ)
  • シリアライズ処理は基本的に変更しない
  • 既存のテストを pass させる

また実際に変更後のコードを使った動作確認もレポジトリを作って行いました。 検証コードでは期待通りの動作が確認できています。DynamoDB と DAX で同じ interface を扱うことができています。

動かすとこういう感じの結果が得られます。(ちょっと雑なんですが)
ということで DynamoDB と同じ interface なら普通にこれまで通りつかえるはず。

image

PR がどのようになるか行方を見守りたいと思います〜
以上です〜👋

@AWS に伝われ〜!!!