この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
S3上のオブジェクトのURL(例: s3://bucket/some_object.key
) からバケット名とキーを取り出したいことが稀によくあります。JavaであればAWS SDKにAmazonS3URI という便利クラスがあるのですが、Node SDKにはこれに相当するAPIは存在しないようです。Nodeでもどうにか簡単にできないかと試してみました。
標準ライブラリのurlを使う
出オチ感ありますが、以下のようにurl.URL
を使うことでパースできます。
host
をバケット名、pathname
から先頭のスラッシュを削除したものをキーと読み替えればひとまず目的は達します。
const url = require('url')
new url.URL('s3://bucket/some_obj.key')
/*
URL {
href: 's3://bucket/some_obj.key',
origin: 'null',
protocol: 's3:',
username: '',
password: '',
host: 'bucket',
hostname: 'bucket',
port: '',
pathname: '/some_obj.key',
search: '',
searchParams: URLSearchParams {},
hash: ''
}
*/
HTTPSの場合
プロトコルがHTTPSのURL(https://<bucket-name>.amazonaws.com
)の場合は素直にparse-s3-urlを使うか、host
を解析するのがいいと思います。