LoginSignup
1
1

More than 1 year has passed since last update.

LambdaでS3にある画像をDropboxにアップロードする

Last updated at Posted at 2021-09-20

LambdaでS3にある画像をDropboxにアップロードしたときの個人メモ


構成図

000.png

前提

LambdaでDropbox APIを実行するができていること

実行準備

S3

  • Dropboxにアップロードするファイルを配置 004.JPG

Lambda

作成

  • Python3.9にて 000.JPG
  • コードは以下
lambda_function.py
import boto3
import base64
import requests
import json

ACCESS_TOKEN = '(取得したアクセストークン)'

#ルートフォルダ配下の配置場所
FOLDER_PATH = "/image/"
#ファイル名
FILE_NAME = 'escle.png'

ARG_TMP = '{"path": "' + FOLDER_PATH + FILE_NAME + '","mode": "add","autorename": true,"mute": false,"strict_conflict": false}'
ARG = ARG_TMP.encode("utf_8")

# S3から指定したバケット、フォルダ、ファイル名の画像を取得する
# 取得できる画像サイズはLambdaのメモリーに依存
# return:画像のバイナリデータ
def get_img_from_s3():
    s3 = boto3.client('s3')
    bucket_name = '(バケット名)'
    file_path = 'sample/' + FILE_NAME
    response = s3.get_object(Bucket=bucket_name, Key=file_path)
    body = response['Body'].read()
    return body

# 画像をDropboxにアップロードする
# img:画像のバイナリデータ
# return:アップロード結果
def upload_to_dropbox(img):
    headers = {
        'Authorization': 'Bearer ' + ACCESS_TOKEN,
        'Dropbox-API-Arg': ARG,
        'Content-Type': 'application/octet-stream',
    }

    response = requests.post('https://content.dropboxapi.com/2/files/upload', headers=headers, data=img)
    return json.dumps(response,default=str)


def lambda_handler(event, context):
    img = get_img_from_s3()
    result = upload_to_dropbox(img)

    return result

S3を読み込むための権限を付与

  • ロールを選択
    008.JPG

  • ポリシーを編集
    009.JPG

  • S3の「GetObject」を追加
    010.JPG

  • リソースは当該バケットに限定する
    012.JPG

※ARNはS3の画面から取得する
011.JPG

HTTPリクエストのためにレイヤーの追加

  • CloudShellにて以下を実行

【Lambda】import requests が使えるようにする【python】

  • レイヤーが追加されたことを確認 023.JPG

Dropbox

実行手順

  • Lambdaを実行
    024.JPG

  • Dropboxにアップロードされていることを確認
    025.JPG

感想

  • レイヤーの追加が面倒だったが、それ以外は簡単だった
  • 現状だとファイル名は固定なので動的設定できるようにしたい
1
1
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
1