ヤマムギ

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 , , ,

  関連記事

Transit GatewayポリシーテーブルでCloud WANのコアネットワークに接続しました

「ポリシーテーブルってなんですか?」のご質問をいただいたので設定してみました。 …

API Gatewayで顧客レベルの使用量プランを設定する

API GatewayのAPIキーを使って使用量プランでのスロットリングも設定し …

CloudWatchエージェントがEC2サービスエンドポイントのデュアルスタックに対応したのでIPv6だけでカスタムメトリクス送信できた!

CloudWatchエージェントがEC2サービスデュアルスタックエンドポイントに …

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

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

Amazon EC2のスクリーンショットとは

ドキュメント見てたらAmazon EC2でスクリーンショットって機能があったので …

re:Invent 徒歩記(シアトルも)

このブログは、AWS re:invent 2018 Advent Calenda …

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

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

ブログのアーキテクチャをコストベースで見直しました

当ブログはAWSで構築しています。 アーキテクチャをコストを最重視して見直しまし …

IAMユーザーのマネジメントコンソールログインパスワードを変更してDynamoDBに記録するLambda(Python)

やりたいこと IAMユーザーのマネジメントコンソールへのサインインパスワードを動 …

Lambdaでちょっとしたコードを試すときに便利なエディタのフルスクリーン機能

Lambda歴6年で、はじめて使いました。 この存在に気がついてなかったです。 …