ここでは、Node.js 用の AWS SDK を使って Amazon S3 を操作する方法を説明します。
TypeScript の基本的な環境構築 は終わっているものとします。
S3 用の Node.js SDK をインストールする
AWS SDK version 3 の S3 用パッケージをインストールするには次のようにします。
これで、TypeScript コードから次のようにパッケージ内のクラスをインポートできるようになります。
S3Client インスタンスの生成
AWS SDK で S3 の操作を行うには、S3Client オブジェクトを使って各種コマンドを送ります。
S3Client
コンストラクタには S3ClientConfig オブジェクトを渡すようになっており、接続情報などを指定できます。
空オブジェクト ({}
) を渡すと、現在の環境の default プロファイルの設定が使用されます(~/.aws/config
と ~/.aws/credentials
に設定されたもの)。
一時的にプロファイルを切り替えて実行したいときは、環境変数 AWS_PROFILE
でプロファイル名を指定します。
設定情報を確認する
次のようにすれば、S3Client
のコンフィギュレーション情報として、どのような設定が使用されるかを確認できます。
S3 バケットを作成する (CreateBucketCommand)
新しい S3 バケットを作成するには、S3Client#send()
メソッドで CreateBucketCommand コマンドを送ります。
S3 バケットを削除する (DeleteBucketCommand)
S3 バケットを削除するには、S3Client#send()
メソッドで DeleteBucketCommand コマンドを送ります。
バケットを削除するには、先にバケット内のオブジェクトをすべて削除しておく必要があります。
S3 バケットにオブジェクトを追加する (PutObjectCommand)
SDK V3 の場合
既存の S3 バケットにオブジェクトを追加するには、S3Client#send()
メソッドで PutObjectCommand コマンドを送ります。
SDK V2 の場合
S3 バケット内のオブジェクトの一覧を取得する (ListObjectV2Command)
S3 バケット内のオブジェクトのリスト(最大1000件)を取得するには、S3Client#send()
メソッドで ListObjectsV2Command コマンドを送ります。
オブジェクトの内容を取得する (GetObjectCommand)
SDK V3 の場合
特定のオブジェクトの内容を取得するには、S3Client#send()
メソッドで GetObjectCommand コマンドを送ります。
戻り値の GetObjectCommandOutput
の Body
プロパティを参照すると、バケットオブジェクトの内容を取得できるのですが、これはオブジェクトの内容そのものではなく、ReadableStream オブジェクト になっているため、次のような感じで少しずつデータを取り出して結合する必要があります。
ここでは、オブジェクトの内容は UTF-8 形式のテキストであると想定しています。
S3 のドキュメントでは別の方法として、SDK が提供する [getSignedUrl 関数を使って署名付き URL を作成] (https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/s3-example-creating-buckets.html#s3-create-presigendurl) し、そのアドレスに対して fetch
することでオブジェクトの内容を取得するサンプルが示されています。
確かにこれを使うとコードがめっちゃシンプルです。
署名付き URL ってこういった用途に使ってよいの?という疑問はありますが、下記のように有効期限を 60 秒くらいに設定しておけばおそらく問題ないかと思います。
SDK V2 の場合
関連記事