🐕

A header you provided implies functionality that is not implemented

2023/01/15に公開

概要

  • AWS SDK for JavaScript v3 でS3 バケットにPutObject しようとしたら下記のエラーが発生
A header you provided implies functionality that is not implemented
  • 結論から言うとアップロードしようとしているデータが空だったのが原因
  • 中身のあるデータを添えたら成功した

コードとエラー内容

const body = fs.createReadStream(PATH)
await s3.send(
  new PutObjectCommand({
    Bucket: BUCKET,
    Key: KEY,
    Body: body,
  }),
)
{
    "errorType": "NotImplemented",
    "errorMessage": "A header you provided implies functionality that is not implemented",
    "name": "NotImplemented",
    ...
}

詳細

  • エラーの内容的には、SDK がS3 のREST エンドポイントにリクエストした際に、AWS が定義している必須のheader 情報が足りていないという物
  • PutObjectCommand で指定したBody の中身が空文字列だとSDKが Content-Length ヘッダをつけずにリクエスト送信してしまうのが原因な模様
  • 中身のあるデータを添えたら成功した

参考

Discussion