1
0

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 1 year has passed since last update.

LambdaでS3の最終更新日時を取得する(Python)

Last updated at Posted at 2022-12-16

概要

S3の最終更新日時を取得するLambdaをPythonで書いてみた記事です。

前提条件

  • S3が用意されていること
  • Lambdaに必要なIAM権限が付与されていること

環境

  • ランタイム:Python3.9
  • リージョン:ap-northeast-1

コード

  import boto3
  from datetime import datetime, timedelta, timezone

  s3 = boto3.resource('s3')
  s3_bucket = <S3バケット名>
  bucket = s3.Bucket(s3_bucket)

  def lambda_handler(event, context):
      # 指定のフォルダ配下で調べたい場合はprefixを設定
      prefix = '<Prefix>/'

      # オブジェクトの取得
      objs = bucket.meta.client.list_objects_v2(
          Bucket=bucket.name,
          Prefix=prefix
      )

      first = True
      # 取得したオブジェクトを1件ずつまわす
      for obj in objs['Contents']:
          # 初回はdtに代入
          if first:
              dt = obj['LastModified']
              first = False
          # 2回目以降はdtより日時が遅ければ代入
          else:
              if dt <= obj['LastModified']:
                  dt = obj['LastModified']
    
      # 日本時間に直す
      jst = timezone(timedelta(hours=9), 'JST')
      last_modified_time = dt.astimezone(jst)
      last_modified = last_modified_time.strftime('%Y/%m/%d %H:%M:%S')

      responce = {"last_modified_time": last_modified}
      return responce

説明

オブジェクトを取得した時点で一番最後に入っているものが最新と思われますが、
実際、取得したオブジェクトはランダムに入っています。

そのため、for文をまわして最新日時を探す必要があります。

また、ファイルの更新に限らず、フォルダの作成など、フォルダの日時も取得します。

フォルダやファイルが多いと、それだけfor文をまわす回数が増えるので、
PrefixやSuffixで検索対象を絞ることをおすすめします。

実行結果

  • 正しく値が取れていることが分かります。
    result
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?