ヤマムギ

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

  関連記事

slackのbotに天気を教えてもらう(Python on AWS Lambda + API Gateway)

slackのbotにAPIの定番ともいえる天気情報を教えてもらいました。 環境は …

cfn-signalの認証とネットワーク

AWS CloudFormationヘルパースクリプトのcfn-signalがC …

EC2 Instance Connect向けのセキュリティグループのソースにプレフィックスリストを

EC2 Instance Connect、便利ですね。 キーペア不要で、EC2イ …

Amazon Elasticsearch ServiceにMySQLのデータを投入してkibanaで可視化してみる

MySQLのデータの可視化にAmazon Elasticsearch Servi …

AWS Trusted Advisorの2023/11/17発表のAPI

2023/11/17に発表されたAWS Trusted Advisor の新しい …

Rocket.ChatにAWS Lambda(Python)から投稿する

Rocket.ChatにAPIで投稿するテスト(Postman)をやってみて、使 …

RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもできるようになってました

RDSスナップショットをS3にエクスポートする新機能を試そうかと思ったのときは、 …

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

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

WordPressの年ごとのブログ投稿数を調べるSQL

毎年年末に使いそうなのでメモです。 [crayon-6a4f7e5d321848 …

EC2 Auto Recovery機能を設定しておいた

以前EC2インスタンスのリタイア対象になったこともあり、というより、やっておいて …