LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

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

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

感想

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

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
What you can do with signing up
0