環境変数

LAMBDA_TASK_ROOTlambda実行ディレクトリのパス。画像などもUPLOADできるので読み込みに利用できる
PYTHON_PATH実行時のライブラリ検索パス。いじった場合はlayerが読み込めなくなるので注意

デプロイ

Layer

制限

java

lib/*.jarとなるようにアーカイブする

~java/lib/hoge.jar
cd java
zip -r /var/tmp/java_layer.zip lib/*

本体

Pythonで作るはじめてのサーバレスアプリケーション

https://github.com/chaingng/serverless_python_tutorial

ほぼPythonだけでサーバーレスアプリをつくろう

後から入れるlibrary

request
pytz

起動イベント

CLIから起動

https://qiita.com/ekzemplaro/items/7dc187885dffe0be6341

aws lambda invoke --function-name simple_wget output.txt
aws lambda update-function-configuration --function-name simple_wget --environment "Variables={BUCKET=my-bucket,KEY=file.txt}"
aws lambda get-function-configuration --function-name simple_wget 

CloudWatch events

1. イベントを定義(aws_cloudwatch_event_rule) 2. イベントに対して実行する関数をターゲット指定(aws_cloudwatch_event_target)

S3

S3にPUTされたらLambdaをデプロイするLambda

https://qiita.com/bowz_standard/items/c1856821be19e660f06f

SQS

terraform deploy

https://dev.classmethod.jp/articles/terraform-lambda-deployment/

https://qiita.com/ktsujichan/items/c0804f155c2cf1962ed3

VPC Lambda

AWSLambdaVPCAccessExecutionRole
The provided execution role does not have permissions to call CreateNetworkInterface on EC2

かつてはENIをコールドスタートしたり、その分ENI&サブネットのIPを消費したりのデメリットがあったが、2019年に解消された。

ローカル開発環境

Dockerで実行

https://github.com/lambci/docker-lambda

# Test a `lambda_handler` function in `lambda_function.py` with an empty event on Python 3.8
docker run --rm -v "$PWD":/var/task:ro,delegated lambci/lambda:python3.8 lambda_function.lambda_handler

CentOS7のDockerだとdelegatedオプションがサポートされてないバージョンなので外すこと!

ローカルで実行

pip install python-lambda-local
echo '{"key1": "test"}' > event.json
python-lambda-local -f lambda_handler lambda_function.py event.json

Serverless

lambda以外にも対応している

http://momota.github.io/blog/2018/11/05/serverless-framework/

デプロイ

イベントトリガーの一例

S3へのput
SESへの着信
Amazon SNS からの通知の送信

IAMロールの作成

EC2のEBS Snapshotを作成削除などを許可するポリシー

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "logs:*"
           ],
           "Resource": "arn:aws:logs:*:*:*"
       },
       {
           "Effect": "Allow",
           "Action": "ec2:Describe*",
           "Resource": "*"
       },
       {
           "Effect": "Allow",
           "Action": [
               "ec2:CreateSnapshot",
               "ec2:DeleteSnapshot",
               "ec2:CreateTags",
               "ec2:ModifySnapshotAttribute",
               "ec2:ResetSnapshotAttribute"
           ],
           "Resource": [
               "*"
           ]
       }
   ]
}

CloudWatchからElasticSearchServiceへ投入を許可するポリシー

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Action": [
       "logs:CreateLogGroup",
       "logs:CreateLogStream",
       "logs:PutLogEvents"
     ],
     "Resource": [
       "arn:aws:logs:*:*:*"
     ]
   },
   {
     "Effect": "Allow",
     "Action": "es:ESHttpPost",
     "Resource": "arn:aws:es:*:*:*"
   }
 ]
}

言語

EBSのバックアップ

https://serverlesscode.com/post/lambda-schedule-ebs-snapshot-backups/ https://serverlesscode.com/post/lambda-schedule-ebs-snapshot-backups-2/

上記ページに従い実行した。backupというキーを設定したインスタンスのEBSのSnapshotを作成する。PartIIでは削除日を指定してSnapshotを作る機能が追加されている。

まずはlambdaに対しての信頼関係を定義して、lambaで実行すると ebs-backup-worker が付与されるようにする。 ebs-backup-workerには必要なポリシーを付与する。

ログ

Parameter Storeとの連携

https://qiita.com/hoto17296/items/5f17af9b5261b9f219ee

Counter: 3439, today: 1, yesterday: 2

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS