概要
Serverless FrameworkをつかってLambda(Python)をAWS環境にデプロイしてみます。
手順
手順です。
1. テンプレートを作成する
今回デプロイするAWS Lambda用のServerless Frameworkのテンプレートを作成します。
serverless create --template aws-python3 --name requests-test --path ./requests-test
できました。
ls -l ./requests-test
total 8
-rw-r--r--. 1 vagrant vagrant 497 Feb 2 07:16 handler.py
-rw-r--r--. 1 vagrant vagrant 3201 Feb 2 07:16 serverless.yml
2. Lambda(Python)のコードをかく
デプロイしたいLambdaのコードをかきます。
今回はhandler.pyを以下のように上書きしてしまいます。
requestsをつかってcurlするだけのPythonです。
import requests
def main(event, context):
response = requests.get('https://www.kabegiwablog.com/')
print(response)
if __name__ == '__main__':
main('', '')
ローカルでちゃんと動作することがわかります。
python3 ./handler.py
<Response [200]>
3. 必要なパッケージをrequirements.txtにかく
このhandler.pyの実行に必要なパッケージをrequirements.txtに記載してあげます。
pip3 freeze | grep requests > ./requirements.txt
こんなかんじ。
$ cat requirements.txt
requests==2.22.0
4. serverless.ymlを編集してあげる
serverless.ymlを以下のように編集してあげます。
service: requests-test
provider:
name: aws
runtime: python3.7
region: ap-northeast-1
functions:
requests-test-lambda:
handler: handler.main
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
5. serverless-python-requirementsをインストールする
serverless-python-requirementsをインストールしてあげます。
これにより、requirements.txtで依存関係を自動的にバンドルしてくれます。
npm install --save serverless-python-requirements
6. AWS環境にデプロイする
いよいよデプロイです。
以下コマンドを実行してあげると、AWS環境にLambda関数がデプロイされます。
裏でCloudFormationがうごいています。
$ sls deploy
Serverless: Generated requirements from /home/vagrant/requests_test/requirements.txt in /home/vagrant/requests_test/.serverless/requirements.txt...
Serverless: Installing requirements from /home/vagrant/.cache/serverless-python-requirements/f866cf90d6349902a899d904a8c7724b092b63ed16fa2530c859ec177d70c68e_slspyc/requirements.txt ...
Serverless: Using download cache directory /home/vagrant/.cache/serverless-python-requirements/downloadCacheslspyc
Serverless: Running ...
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service requests-test.zip file to S3 (1.92 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.........
Serverless: Stack update finished...
Service Information
service: requests-test
stage: dev
region: ap-northeast-1
stack: requests-test-dev
resources: 6
api keys:
None
endpoints:
None
functions:
requests-test-lambda: requests-test-dev-requests-test-lambda
layers:
None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.
7. 確認
できました。
8. ゴミ掃除
removeで全削除できます。
sls remove
おわりに
べんりな世の中になりましたね。