はじめに
AWS SDK V2 で動作していたコードを、ガイドに従って V3 に置き換えても、putRecord(Firehoseへのデータ登録)ができず、エラーで終了してしまう。
結論
インターフェースが変わってる(不便になってる!?)
こんな代表的なレベルのメソッドを互換取らずに置き換えるなんて、なんて罠。。。
- API インターフェース(V3) V3のドキュメント見にくい。。。(個人的感想)
Uint8Arrayで渡せという事らしい。。。
- API 仕様(V2)
V2の頃は、「'STRING_VALUE' /* Strings will be Base-64 encoded」という事で、文字列でメソッドを実行することが可能でした。( or なので、Buffer.from('...')のインターフェースも存在していた。)
V3では、「Buffer.from('...')」を利用することで、JSON形式のデータが送ることができました。
(String型渡しは廃止して、必ず配列で渡せということらしいですね。)
エラーの内容
同じようなエラーでハマる人の為に文字列で記載。
インターフェースの型を変えたなら、もうちょっと分かりやすいエラーメッセージにしといてくれても、、、と思わざるを得ない。
(byteLengthのプロパティが見つからない。と言われても、、、、パッと、「型が変わったかも?」という所まで思考できなかった)
TypeError: Cannot read properties of undefined (reading 'byteLength')
at fromArrayBuffer (/var/runtime/node_modules/@aws-sdk/util-buffer-from/dist-cjs/index.js:6:60)
at Object.toBase64 [as base64Encoder] (/var/runtime/node_modules/@aws-sdk/util-base64-node/dist-cjs/index.js:18:51)
at serializeAws_json1_1_Record (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:1238:51)
at serializeAws_json1_1PutRecordInput (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:1233:47)
at serializeAws_json1_1PutRecordCommand (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/protocols/Aws_json1_1.js:64:27)
at serialize (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/commands/PutRecordCommand.js:30:71)
at /var/runtime/node_modules/@aws-sdk/middleware-serde/dist-cjs/serializerMiddleware.js:12:27
at /var/runtime/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:6:28
at Firehose.send (/var/runtime/node_modules/@aws-sdk/smithy-client/dist-cjs/client.js:15:13)
at Firehose.putRecord (/var/runtime/node_modules/@aws-sdk/client-firehose/dist-cjs/Firehose.js:91:18)
どうやって気付いた?
- 海外コミュニティサイト
流れてしまうかもしれないのでスクショ
2021/02の投稿という事は1年以上前から、型を変えず、このままという事ですね。
var sendData = "Test Data 01 \n";
var params = {
"DeliveryStreamName": *Firehoseストリーム名*,
"Record": {"Data": Buffer.from(sendData)}
};
もうちょっと情報流れてても良さそうな物ですが、日本国内のSDK V3 対応状況は、どんなもんなんでしょうね。(^^A
まとめ
「AWS SDK V2 → V3 移行」は、主要なメソッドレベルでもインターフェースの型変更の可能性が在り得る。
現行システムが、「AWS SDK V2」で開発されていて、「AWS SDK V3」へ移行する場合は、基本的に書き直し&全試験やり直しに匹敵する試験が必要である。
(このレベルで互換せずに型変更されてしまうという事実がある時点で。。。)
Lambdaシステム開発、AWS SDK(Node) V3移行のご相談があれば弊社までお問い合わせください。
AWSの相談・お困りごとありましたら、、、
AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。