(ナレッジ)ServerlessFramework
Serverless Applicationを構成管理&デプロイするためのツール。
Node.jsで作られたCLIツールの為、Node.jsをインストールする必要あり。(Node.jsのv4以上が必要)
インストールコマンド
npm install --save serverless
バージョン確認
serverless --version
モジュールを一緒にdeployするためのプラグインもインストール
npm install --save serverless-python-requirements
localでlambdaスクリプトを実行するためのライブラリをインストール
pip install python-lambda-local
プロバイダーアカウントのセットアップ
(どのクラウドサービスを使用してServerlessを動かすか)
Serverlessは「サービス」という単位で実行環境を作る
AWSをプロバイダーとしてpython3でサービスを開設する場合は以下の手順
serverless create --template aws-python3 --name requests-test --path ./requests-test
上記を実行すると「requests-test」のディレクトリが作成され、その配下に
以下のファイルが作成される。
.gitignore
serverless.yml
handler.py
handler.py内に、デプロイしたいLambdaのコードを書く
ローカルで試す
(まずは引数用の event.json を作成)
実際は使わないので、空のjson。中身は{}だけ。
(mainはメソッド名、.pyは実行ファイル名、event.jsonは実行時引数、--logオプションで実行時ログが確認できる)
必要なパッケージをrequirements.txtにかく
pip3 freeze | grep requests > ./requirements.txt
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
# dockerrizePip:true = Lambda関数の実行環境とほぼ同等のDockerイメージを利用する、という意味
AWS環境にデプロイ
(裏でCloudFormationが動く。ローカルのコードがS3経由でLambdaにdeploy。)
serverless deploy function -f <yourfunction> --verbose --aws-profile {プロファイル名}
(verboseを付けると途中経過がターミナル上で確認できる。-vでもOK)
(参考)
秘匿したい情報はssmパラメータを参照することで実現できる
${ssm(REGION):/path/to/service/id}
Githubに上がった既存のサービスをインポート
serverless install -u [GITHUB URL OF SERVICE]