Contenu connexe Similaire à serverless framework + AWS Lambda with Python (20) serverless framework + AWS Lambda with Python16. • 例: 障害検知 -> チャットへの投稿
• ! 3rd Partyライブラリ使いたくなってくる
• requests
• add requirements.txt
requests
• run
$ pip install -r requirements.txt -t vendor/
$ edit python-file
$ zip /path/to/service-dir
$ aws lambda ~~
19. • zipファイルでのデプロイが可能
$ aws lambda create-function
--function-name AccessMemCache
--region us-east-1
--zip-file fileb://path-to/app.zip
--role execution-role-arn
--handler app.handler
--runtime python3.6
--timeout 30
--vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=default-security-group-id
--memory-size 1024
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/vpc-ec-
upload-deployment-pkg.html
25. serverless frameworkでサービス作成
$ sls create -t aws-python3 -p py3-hello
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/masahito-nulab/src/jobs/typetalk-serverless-internal/py3-hello"
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| ___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.27.3
-------'
Serverless: Successfully generated boilerplate for template: "aws-python3"
$ tree py3-hello/
py3-hello/
├── handler.py
└── serverless.yml
26. • handler.py
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
• serverless.yml
service: py3-hello
provider:
name: aws
runtime: python3.6
functions:
hello:
handler: handler.hello
27. ローカルでのテスト実行
$ cd py3-hello
$ sls invoke local -f hello
{
"statusCode": 200,
"body": "{"message": "Go Serverless v1.0! Your function executed successfully!", "input": {}}"
}
31. プラグインの導入
$ sls plugin install -n serverless-python-requirements
service: py3-hello
provider:
name: aws
runtime: python3.6
cfLogs: true
plugins:
- serverless-python-requirements
functions:
hello:
handler: handler.hello
35. dockerize pip
docker環境でcross-compile可能
* 裏でdocker image lambci/docker-lambdaを使っている
service: py3-hello
provider:
name: aws
runtime: python3.6
cfLogs: true
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
functions:
hello:
handler: handler.hello
39. ロギング
まずはロギング
print と logging.* 関数はどちらも CloudWatch Logs にログ
を書き込み
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_logging_handler(event, context):
logger.info('got event{}'.format(event))
logger.error('something went wrong')
return 'Hello from Lambda!'
44. コメントを書こう
• 何を実装しようとしてたか忘れるよね
• Whyとかを書いとくと後々思い出しやすくなりますよね
def _service_json_to_dict(service_dict) -> Dict[TypetalkPlan, int]:
# service_json format is too strange, I'd like to change simple Dict
# e.g. [{"key": [“ham”], "value": 7}, {"key": [“spam”], "value": 1}]
result: Dict[TypetalkPlan, int] = dict()
for m in mixpanel_dict:
key = m['key'][0]
value = m['value']
result[key] = value
return result