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