Help us understand the problem. What is going on with this article?

PythonでAWS Lambdaの関数を作成する手順(現在時刻を取得してSQSキューを投げる編)

More than 1 year has passed since last update.

AWS Lambdaの関数コードを書く機会があったので、鉄板のPythonを使ってみようと思う。
せっかくだからAWSのサービスと連携させたいので、シンプルにSQSキューを投げてみよう。

1.SQSで新しいキューを作成する。

マネジメントコンソールで必須事項を入力するだけでよい。
作成ができたら、コンソール画面でURLのみメモしておく。

https://sqs.ap-northeast-1.amazonaws.com/アカウント/Lambda-Test

2.Pythonで関数コードを作成する。

Pythonの勉強も兼ねて、手順を書いていく。
環境は以下。
- python 3.7.0 (miniconda)
- MacOSX High Sierra
- Pycharm 2018.2.3

2-1. プロジェクトと仮想環境を構築する。

Pycharmで新しいプロジェクトを作成する。
1. Create New Project
2. Locationは適当に
3. Project Interpreterでは、New environment usingを選択し、condaを使うことにする。
4. 上記の流れでcreateを行うと、新規プロジェクトが作成される。
5. Projectを右クリックして、Open in Terminal
6. 以下のように表示されていればよい。

(Lambda-SQS-test) $ 

2-2. 関数を作成する。

さて、ここからは実際に以下のようなコードを新規で作成する。

enqueue.py
import logging
from datetime import datetime
import pytz
import boto3
import json

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

#SQSキューのURLをセット
url = "https://sqs.ap-northeast-1.amazonaws.com/アカウント/Lambda-Test"

#関数コードを実行するハンドラ
def handler(event,context):
    try:
        logger.info(event)
        logger.info(context)

        #UTCで現在時刻を取得して、JSTに変換
        utc_now = datetime.now(pytz.timezone("UTC"))
        jst_now = utc_now.astimezone(pytz.timezone("Asia/Tokyo"))

        #秒以下を切り捨てる
        replace_now = jst_now.replace(second=0, microsecond=0)

        #ISOフォーマットに変換する
        now = replace_now.isoformat()

        #キューに送信するJSONのセット
        message = {}
        message["dateTime"] = now

        #キューを投げる
        response = boto3.client("sqs").send_message(
            QueueUrl = url,
            MessageBody = json.dumps(message)
        )

        logger.info(response)
        return response
    except Exception as e:
        logger.error(e)
        raise e

2-3. 外部モジュールのインストール

現時点ではpytzとboto3のモジュールが存在しないので、Terminalより以下コマンドでインストールする。

$ conda update conda
$ conda info -e
$ source activate Lambda-SQS-test
(Lambda-SQS-test)$ pip install --upgrade pip
(Lambda-SQS-test)$ pip install pytz -t .
(Lambda-SQS-test)$ pip install boto3 -t .

3. 関数コードをデプロイする。

プロジェクトのディレクトリをzipで固める

(Lambda-SQS-test)$ zip -r upload.zip *

4. AWS側で関数を作成する。

マネジメントコンソールの作業に戻る。

4-1. IAMロールの作成

今回はテストなので、とりあえずSQSのフル権限を持ったロールを1つ作成する。

4-2. 関数を作成し、zipをアップロードして実行

  • ロールは先程作ったものを割り当てる。
  • ハンドラには(ファイル名).(ハンドラ名) -- 今回の場合は enqueue.handler

できた!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away