0
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 3 years have passed since last update.

Lambdaで取得した画像をKinesis及びLambda経由でS3にアップロードする

Posted at

Lambdaで取得した画像をKinesis及びFirehose経由でS3にアップロードするにて
流した画像がFirehoseを経由うすると複数の画像がまとめられて出力されたので
KinesisからLambda経由でS3にアップロードしたときの個人メモ

(参考)S3 — Boto3 Docs 1.18.57 documentation - Amazon AWS
(参考)Amazon Kinesis で AWS Lambda を使用する


Kinesis

Lambda

  • Python3.9にて作成

024.JPG

  • 自動生成されたロールを選択

003.JPG

  • ロールにアタッチされているポリシーを以下のように修正
    • S3へのPutObjectを付与
    • logsはデフォルトのまま
  • ロールに既存ポリシー「AWSLambdaKinesisExecutionRole」をアタッチ
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:(リージョン名):(AWSアカウント):*",
                "arn:aws:s3:::(バケット名)/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:(リージョン名):(AWSアカウント):log-group:/aws/lambda/uploadToS3FromKinesis:*"
        }
    ]
}

011.JPG

  • ソース修正
lambda_function.py
import os
import logging
import boto3
import base64

# ログ設定
logger = logging.getLogger(__name__)
logger.setLevel(os.environ['LOG_LEVEL'])

# 環境変数から取得
BACKET_NAME = os.environ['BACKET_NAME']
FILE_PATH = os.environ['FILE_PATH']


# 画像をS3にアップロードする
# img:画像のバイナリデータ
# return:プットした結果
def put_img_to_s3(img):
    logger.debug('start put_img_to_s3()')

    s3 = boto3.client('s3')
    response = s3.put_object(Bucket=BACKET_NAME, Key=FILE_PATH, Body=img)

    logger.debug('end put_img_to_s3()')

    return response


def lambda_handler(event, context):
    logger.debug('start lambda_handler()')

    logger.debug('event:' + str(event))
    img = base64.b64decode(event['Records'][0]['kinesis']['data'])

    result = put_img_to_s3(img)

    logger.debug('end lambda_handler()')

    return result
  • 環境変数設定

010.JPG

動作確認

012.JPG

感想

  • Firehose経由と異なり、連続で画像を流してもまとめてアップロードされなかった
  • アップロード時のファイル名は環境変数で指定した固定値なので
    動的に設定できるようにしたい
0
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
0
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?