ヤマムギ

growing hard days.

*

Cloud9でSAMローカルテスト

      2022/02/10

せっかくテストするので、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スタックの削除です。


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

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

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

 - AWS , , ,

  関連記事

ALBの重み付けルーティングでカナリアリリースをしてみました

当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …

AWS Summit Tokyo 2017 聴講したセッションのメモ

2017年6月に参加しましたAWS Summitで聴講したセッションのメモを記し …

Amazon LinuxのNginx+RDS MySQLにレンタルWebサーバーからWordPressを移設する(失敗、手戻りそのまま記載版)

勉強のためブログサイトを長らくお世話になったロリポップさんから、AWSに移設する …

Amazon SNSサブスクリプションフィルターで優先度別のSQSキューにサブスクライブする

EC2のコンシューマーアプリケーションは優先度の高いキューのメッセージを先に処理 …

GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする

「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …

「Label Training Data for Machine Learning」チュートリアルの記録

Label Training Data for Machine Learning …

Extend Switch Roles(Chromeのアドオン)で6つ以上のスイッチロール履歴

最近アカウントIDを忘れたりすることも多くなったので、切り替えに手間取ることがあ …

RDS for MySQL のインスタンスタイプ変更

当ブログのデータベースは、RDS for MySQLです。 個人利用ですし、障害 …

静的と動的って何ですか?と営業さんに聞かれたので端的に説明してみました

AWS認定クラウドプラクティショナーの勉強をしている営業さんに、「S3で静的オブ …

AWS ControlTowerで既存アカウントをまとめて追加

AWS Organizationsに新たに招待したアカウントをAWS Contr …