LamdbaからS3内を操作するメソッドで、よく使うものをメモ書き。
まずaws-sdkをrequireし、リージョンを指定します。
AWS SDKとは、AWSサービスをプログラムから操作できる開発キットです。
constAWS=require('aws-sdk');consts3=newAWS.S3({'region':'リージョン'});
ファイル作成・更新
ファイルを作成するには、putObjectメソッドを使用します。
S3に'test'というバケットがあり、その配下のsampleフォルダに'sample.json'というJSONファイルを作成します。
exports.handler=async(event)=>{constputData=awaits3.putObject({Bucket:'test',Key:'sample/sample1.json',Body:JSON.stringify({})}).promise()}
Bucket...バケット名
Kye...バッケト以下/ファイル名
Body...JSONファイル内に書きたい内容
実行すると、空のJSONファイルがS3に作成されます。
内容を記載したい場合はBodyのところに適当に入れます。
Body:JSON.stringify({name:'ai',age:20})
実行すると、sample.jsonの中に{"name":"ai","age":20}
が追加されているのが確認できます。
ファイル取得
S3のファイルを取得するには、getObjectメソッドを使います。
exports.handler=async(event)=>{constdata=awaits3.getObject({Bucket:'test',Key:'test/sample1.json'}).promise()constobj=JSON.parse(data.Body)console.log(obj.name,obj.age)//ai 20}
先ほどと同様に、取得したいファイルの情報をBucket,Keyに指定します。
JSONをparseしてオブジェクトに変換することで、中身にアクセスすることができます。
ファイル削除
exports.handler=async(event)=>{constdeletes=awaits3.getObject({Bucket:'test',Key:'test/sample1.json'}).promise()}
こちらも同様に削除したいファイルの情報をBucket、Keyに指定します。
実行すると、削除できたことが確認できます。
ちなみに、存在しないファイル名を指定した場合でもエラーにはなりません。
なのでtry~catchで囲み、エラーを出してくれるようにしてあげる必要があります。
exports.handler=async(event)=>{try{constdeletes=awaits3.getObject({Bucket:'test',Key:'sample/sample1XXX.json'}).promise().catch(err=>{thrownewError(err)})}catch(err){console.log(err)}}//実行結果 Error: NoSuchKey: The specified key does not exist.
存在しないファイル名を指定して実行すると、エラーになることが確認できました。
データの一覧を取得する
S3にどんなファイルがあるか分からない時、listObjectsV2メソッドで確認することがきます。
exports.handler=async(event)=>{constparams={'Bucket':'test','Prefix':'sample',}constlists=awaits3.listObjectsV2(params).promise()lists.Contents.forEach((a)=>console.log(a.Key))}
実行すると、sampleフォルダ配下に何があるか確認できました。
実行結果
sample/
sample/sample1.json
sample/sample2.json
sample/sample3.json