【AWS】Python Lambdaのdeploy - Chalice
【AWS】Python Lambdaのdeploy - Chalice:
【AWS】Python Lambdaのdeploy - CloudFormation - Qiita
【AWS】Python Lambdaのdeploy - Chalice - Qiita
**Chaliceは、LambdaとAPI GatewayをdeployするためのPythonライブラリです。deployという意味ではCloudFormationと被りますが、コンセプトは違っていて、以下のような機能を提供してくれます。つまりLambdaとAPI Gatewayを利用したアプリ作成が簡単に行えるためのものです。
以下、PythonのLambda関数をChaliceを使ってdeployすことを目標とします。CloudFormationとの大きな違いは面倒なSAMファイル(yaml)を描く必要がないことです。
以下のコマンドで環境設定を行います。
Lambda関数は「AWS Chalice」 のサンプルを少し変更して使います。
さてそれでは動作を確認してみましょう。
以下のコマンドでS3にオブジェクト{"foo": "bar"}をputします。
次に以下のコマンドでS3からオブジェクトを取得します。
無事成功しました。
以下のコマンドで、deployしたリソースをすべて削除することができます。
Chaliceでは必要なPolicyが自動生成される点が特に素晴らしいと感じました。
今回は以上です。
【AWS】Python Lambdaのdeploy - CloudFormation - Qiita
【AWS】Python Lambdaのdeploy - Chalice - Qiita
**Chaliceは、LambdaとAPI GatewayをdeployするためのPythonライブラリです。deployという意味ではCloudFormationと被りますが、コンセプトは違っていて、以下のような機能を提供してくれます。つまりLambdaとAPI Gatewayを利用したアプリ作成が簡単に行えるためのものです。
- アプリの作成、デプロイ、管理するためのコマンドツール
- Pythonプログラマに馴染みのあるmicroframework
- 自動的にIAM policyを生成
以下、PythonのLambda関数をChaliceを使ってdeployすことを目標とします。CloudFormationとの大きな違いは面倒なSAMファイル(yaml)を描く必要がないことです。
1.環境設定
以下のコマンドで環境設定を行います。$ python -m venv chalice-workspace # venvを設定 $ source ./chalice-workspace/bin/activate # venvをアクティベイト $ pip freeze # まだ何もインストるされていないことを確認 $ pip install httpie # curlの代わりにhttpを使う $ pip install boto3 # AWS SDK の Boto3をインストール $ pip install chalice # chaliceをインストール $ chalice --version # chaliceのバージョンを確認 $ cd chalice-workspace $ chalice new-project helloworld # アプリのプロジェクトを作成 $ cd helloworld
2.Lambda関数
Lambda関数は「AWS Chalice」 のサンプルを少し変更して使います。helloworld/app.js
import json import boto3 from botocore.exceptions import ClientError from chalice import Chalice from chalice import NotFoundError app = Chalice(app_name='Policy Generation') S3 = boto3.client('s3', region_name='ap-northeast-1') BUCKET = 'chalice-s3-test' @app.route('/objects/{key}', methods=['GET', 'PUT']) def s3objects(key): request = app.current_request if request.method == 'PUT': S3.put_object(Bucket=BUCKET, Key=key, Body=json.dumps(request.json_body)) elif request.method == 'GET': try: response = S3.get_object(Bucket=BUCKET, Key=key) return json.loads(response['Body'].read()) except ClientError as e: raise NotFoundError(key)
3.deployと実行
$ chalice deploy Creating deployment package. Updating policy for IAM role: helloworld-dev # Policyが自動生成される Updating lambda function: helloworld-dev Updating rest API Resources deployed: - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxx:function:helloworld-env-dev - Rest API URL: https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/
以下のコマンドでS3にオブジェクト{"foo": "bar"}をputします。
echo '{"foo": "bar"}' | http PUT https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/objects/mykey
$ http GET https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/objects/mykey HTTP/1.1 200 OK Connection: keep-alive Content-Length: 14 Content-Type: application/json Date: Sat, 22 Dec 2018 04:37:15 GMT Via: 1.1 a4668e9d7fa998f233f6d639127ba57c.cloudfront.net (CloudFront) X-Amz-Cf-Id: KzwcGWt-sxbwPXWJWkXJvFbNT8apB0h6DzfLcUVn1nrAsd3Ob9Zrog== X-Amzn-Trace-Id: Root=1-5c1dbf7b-de6ad5d054bf787402bdabd0;Sampled=0 X-Cache: Miss from cloudfront x-amz-apigw-id: SSrbPH_aNjMFZYg= x-amzn-RequestId: 41af5b77-05a3-11e9-9ec8-1f0e977b0961 { "foo": "bar" }
以下のコマンドで、deployしたリソースをすべて削除することができます。
$ chalice delete
今回は以上です。
コメント
コメントを投稿