ヤマムギ

growing hard days.

*

Cloud9でSAMローカルテスト

      2020/05/19


せっかくテストするので、Amazon CloudSearchからAmazon Elasticsearch Serviceへ変えましたで作った、トレーニングコースを全文検索するLambdaでテストしてみようと思います。

Cloud9

Cloud9はデフォルトのままでインスタンスタイプだけ、t3.nanoで作成しました。

samのバージョンを確認すると、0.38でした。

SAMアプリケーション作成

python3.6で、Hello World Exampleのテンプレートにしました。
3.6にしたのは、Cloud9のPythonのバージョンが3.6でしたのであわせました。

Swagger

API Gatewayの定義を記述しているSwaggerは、API Gateway 作成済REST APIの定義をSwaggerの形式でエクスポートでエクスポートしたSwaggerを基にしました。

変更したのは、x-amazon-apigateway-integration: のuri:です。

用意したSwaggerファイルを任意のS3バケットにアップロードしておきます。

修正

必要最低限の箇所だけ修正しています。

requirements.txt

2つのモジュールを含めるようにしました。

hello_world/app.py

以下に置き換えました。

template.yaml

環境変数を追加しました。
ElasticSearchのエンドポイントやリージョンを指定しました。

ResourcesにAPIの定義をSwaggerを参照するように追記しました。

LambdaFunctionのセクションをこちらに変更しました。
IAMロールとLayersはあらかじめ作成済のものを指定しました。

sam build

成功しました。

このとき、ローカルとランタイムのPythonのバージョンがあっていないと以下のエラーになりました。

sam local start-api

Cloud9ローカルでテストをします。

API Gatewyの設定は反映されないようで、lambdaに対してそのまま実行するAPIのようです。
ですので、responseにはステータスコードが必要でした。
また、統合リクエストのマッピングもしてないので、eventにqueryStringParametersが含まれるかどうかで判定しています。
もっといいやり方があるかもしれません。

別のターミナルを開いて、curlコマンドでGETしてみます。

成功しました。
以下のようなレスポンスが返ってきました。

sam deploy

デプロイしてみます。

デプロイ完了後、APIエンドポイントにcurlコマンドでgetリクエストしてみて、ローカルテストと同じ結果を確認できました。

削除はCloudFormationスタックの削除です。


最後までお読みいただきましてありがとうございました!

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

i

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

 - AWS , , ,

ad

ad

  関連記事

php-fpm で Out of memoryが発生した際にメール通知する(AWS CloudWatch , Amazon SNS)

AWS CloudWatch LogsエージェントでAmazon EC2上のNg …

DS18B20センサー+Raspberry Piで取得した温度をAmazon Kinesis FirehoseからS3へ格納してAthenaでクエリーしたのをQuickSightで可視化する

JAWS DAYS 2017でやりますハンズオンの「[IoTハンズオン] Ras …

Amzon Linux のApacheでRedmineとWordPressをバーチャルホストで共存する

EC2とRDSを節約しようと思いまして、Redmineを動かしてるとこに検証用W …

Rocket.ChatをAmazon EC2 Ubuntuサーバーで起動

こちらRocket.Chatを1行でAWS上に導入を参照させていただきました。 …

MySQL WorkbenchからRDSに接続する

MySQL WorkbenchからAWS RDSのMySQLに接続するために、「 …

AWSアカウント内のCloudWatchアラームを削除する

やりたいこと 特定アカウント特定リージョン内のCloudWatdchアラームを全 …

特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …

5分でAlexaスキルを作る

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …

boto3(Python SDK) s3 get_object でバイト範囲を指定する

S3のGetObjectアクションでバイト範囲を指定することができます。 それに …

Amazon Chimeのチャットを使ってみました

Amazon Chimeはビデオミーティングや配信したりというサービスですが、チ …