18
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LamdbaからS3内のファイルを操作したい

Last updated at Posted at 2020-03-06

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
18
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?