share facebook facebook twitter menu hatena pocket slack

2015.12.07 MON

Boto3(Python)で"Service Resource"を使ってみた(Lambda)

鈴木 宏康

WRITTEN BY 鈴木 宏康

こちらでPythonのLambdaファンクションとしてSQSにエンキューするコードを
“API Gateway → Lambda → SQS”でJSONデータをエンキューする
こちらでデキュー(Recieve & Delete)するコードを書きました。
SQSのメッセージをLambdaで5分おきに処理する(Scheduled Event)
その時は、下記のようにClientを使っていたのですが、

  client = boto3.client('sqs')

次のService Resourceというものを使う方法もあり

  sqs = boto3.resource('sqs')

こちらの方が筋が良さそうだったので、上述のLambdaファンクションを
Service Resourceを使った形に書き換えてみました。

SQSにエンキューするLambdaファンクション

import json
port boto3
iimport logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

queueName = 'test'

def lambda_handler(event, context):

    try:
        logger.info(event)
        response = boto3.resource('sqs').get_queue_by_name
            QueueName = queueName
        ).send_message(
            MessageBody = json.dumps(event)
        )
        logger.info(response)
        return response

    except Exception as e:
        logger.error(e)
        raise e

SQSにデキューするLambdaファンクション

import boto3
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

queueName = 'test'
maxNumberOfMessages = 10

def lambda_handler(event, context):

   try:
     logger.info(event)

     queue = boto3.resource('sqs').get_queue_by_name(
       QueueName = queueName
     )

     messages = queue.receive_messages(
        MaxNumberOfMessages = maxNumberOfMessages
     )

     entries = []
     for message in messages:
              entries.append({
                  "Id": message.message_id,
                  "ReceiptHandle": message.receipt_handle
              })

              response = {}
              if len(entries) != 0:
                   response = queue.delete_messages(
                       Entries = entries
              )

              logger.info(response)
              return response

  except Exception as e:
      logger.error(e)
      raise e

以前よりもスッキリしたんじゃないでしょうか?

元記事はこちら

Boto3(Python)で”Service Resource”を使ってみた(Lambda)

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。