AWS Cloud9でLambdaを作成、API Gatawayにデプロイ

クラウド型統合開発環境Cloud9でLambdaを作ってAPI Gatewayにデプロイしてみます。

LambdaをCloud9ローカルで作成、実行

まずはLambdaから作ります。
開発対象のリージョンを設定しておきます。

Lambdaの作成

既に作成済みのものをインポートすることもできますが、イチから作ります。

右端のメニューからLambdaマークを押して作成します。

「Function Name」はLambdaの関数名、「Application name」はAPI GatewayのAPI名になります。

実行環境を選択します。
Pythonにしました。

Lambda関数トリガーを設定します。
API Gatewayを選択してリソースパスを設定します。

Lambdaに与えるメモリとロールを設定します。

これで関数がCloud9のローカルとリモートに作成されました。
API Gatewayも作成されています。

Lambdaの編集・ローカルデバッグ

Lambda関数をこんな感じで編集します。
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    
    logger.info(event)
    
    if 'body' in event:
        event = json.loads(event['body'])
        
    message = 'world'
    if 'message' in event:
        message = event['message']
        
    response_body = {
        'hello' : message,
    }
    
    return {
        'isBase64Encoded': False,
        'statusCode': 200,
        'headers': {},
        'body': json.dumps(response_body),
    }
編集したらまずは、Cloud9のローカルで実行してみます。

上部メニューの「Run」ボタンから実行ペインが開いて、イベントの設定実行ができます。
AWS上で実際にLambdaを呼んでるわけじゃないので、課金も気にせず気軽に実行できますね。


虫マークを押すとデバッグモードになり、ブレークポイントを置いて実行すると止まります。


仮想API Gatewayからの実行・デバッグもローカルで実行できます。

LambdaとAPI Gatewayのデプロイ

Lambdaのコードができたので、デプロイします。

その前に「template.yaml」を修正してAPIのメソッドをPOSTにします。


LambdaとAPI Gatewayをデプロイします

しばらくするとデプロイが完了します。
デプロイするとリモートでの実行も可能になります(デバッグはできないようです)。

デプロイされているのでAPIをCurlで実行してみます。
せっかくなのでCloud9のコンソールからやってみます。
ec2-user:~/environment $ curl -X POST -d '{"message":"API Gateway Remote"}'  https://XXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/Prod/hello
{"hello": "API Gateway Remote"}
できました!

使い方さえ慣れてしまえば、コンソールからポチポチやるより楽だし開発効率も上がりそうです。
何よりローカルに開発を作る手間が全くかからないのがよい。


余談ですがCloud9には「ハッピー」的な意味があるそうです。