かべぎわブログ

ブログです

Serverless FrameworkでLambda(Python)をデプロイする

概要

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. 確認

できました。
f:id:kabegiwakun:20200202171836p:plain

8. ゴミ掃除

removeで全削除できます。

sls remove

おわりに

べんりな世の中になりましたね。

AWSによるサーバーレスアーキテクチャ

AWSによるサーバーレスアーキテクチャ

  • 作者:Peter Sbarski
  • 出版社/メーカー: 翔泳社
  • 発売日: 2018/03/14
  • メディア: 単行本(ソフトカバー)