LoginSignup
8
6

More than 5 years have passed since last update.

Apexとpython-lambda-localではじめるAWS Lambda開発

Posted at

概要

  1. python-lambda-localでローカル開発
  2. Apexでデプロイする

組み合わせた環境を説明します


事前準備

必要なライブラリをインストール

pip install python-lambda-local
pip install boto3

Apexをインストール

curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sudo sh

※ AWS config/credentialsを事前に設定
※ IAMユーザにiam:CreateRoleを割り当てる必要あり


Apexプロジェクトを作成

scaffoldを作成

mkdir hello-project
cd hello-project
apex init

... 対話モードで入力 ...

設定ファイルを変更

project.json
{
  ...
  "runtime": "python",
    "environment": {} //共通の環境変数
  ...
}
.apexignore
event.json
requirements.txt
*.pyc

Lambdaを作成

Functionを作成

functions/hello/_apex_main.py
def handle(event, context):
  print 'Hello Lamba'
  return 'success'

設定ファイルを作成

ここでも環境変数を設定できる

functions/hello/event.json
{
  "description": "about this function"
}

Lambdaに渡すデータを作成

動作確認に必要

functions/hello/event.json
{
  "key": "value"
}

依存ライブラリをインストール

functions/hello
pip install $ライブラリ名 -t .
pip freeze > requirements.txt

AWSで実行

デプロイ

apex deploy

実行

apex invoke < event.json

Localで動作確認

python-lambda-localを実行

毎回AWSにデプロイするのは手間

functions/hello
python-lambda-local -l . -f handle -t 5 _apex_main.py event.json

課題

環境変数

AWS LambdaのPythonランタイムは環境変数を使えない

  • Apexがアップロードするzipファイルには、環境変数を定義する.env.jsonが含まれている
  • 実行時に.env.jsonの内容を環境変数に設定してあげる
_apex_main.py
import json
with open('.env.json') as f:
    os.environ.update(json.load(f, encoding='utf-8'))

def handle(event, context):
8
6
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
8
6