行き先なし

AWS SDK for JavaScript v3 のメモ

AWS SDK for Javascript v3 の挙動

AWSTypeScriptJavascriptAWS-SDKS3

環境

deno 1.31.3 (release, x86_64-unknown-linux-gnu)
v8 11.0.226.19
typescript 4.9.4
"@aws-sdk/client-s3": "^3.294.0"
"@aws-sdk/lib-storage": "^3.294.0"

エラーハンドリング

公式ブログに instanceof で判別できると書いてあるが使えない。

https://aws.amazon.com/jp/blogs/news/service-error-handling-modular-aws-sdk-js/

try {
  await client.send(someCommand);
} catch (e) {
  if (e instanceof InvalidSignatureException) {
    // Handle InvalidSignatureException
  } else if (e instanceof ResourceNotFoundException) {
    // Handle ResourceNotFoundException
  } else if (e instanceof FooServiceException) {
    // Handle all other server-side exceptions from Foo service
  } else {
    // Other errors
  }

e.name での判別は動くのでそれを使いましょう。

存在しないオブジェクトデリート操作と応答

const client = new S3Client({設定});
awati client.send(new DeleteObjectCommand({
  Bucket: バケット名,
  Key: オブジェクトキー
}))

バケットが存在しない場合は NoSuchBucket エラーが返ってきます。

バケットが存在していて、オブジェクトキーが存在しないとき S3204 No Content を返し正常として扱います。S3 互換のMinIO, Wasabiも同様です。
しかし、Google Cloud Storage404 Not Found を返すため NoSuchKey のエラーが throw されます。
エラーを catch して e.name === 'NoSuchKey' をハンドリングすることが必要な場面もあるかもしれません。

Multipart Upload

@aws-sdk/lib-storageUploadクラスを使えば partSize(デフォルト 5MB) で PutObjectCommandUploadPartCommand を使い分けてくれます。

Google Cloud Storage でも 2021 年より対応 しているようですが手元で実行するとエラーになるので何か対処が必要なようです。(未調査)

  '$fault': 'client',
  '$metadata': {
    httpStatusCode: 400,
    requestId: undefined,
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Code: 'MalformedCompleteMultipartUploadRequest',
  Details: 'XML not conformant to the schema at line: 1 column: 113.  element "CompleteMultipartUpload" incomplete; missing required element "Part"'