ヤマムギ

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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

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

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

 - AWS , , ,

ad

ad

  関連記事

ALBにWAFを関連付けて特定のヘッダー以外はブロックする

おかげさまで、ブログのアクセスも増えてきて、t3.nano EC2インスタンス単 …

AWSアカウント内特定リージョン内のDynamoDBテーブルを全削除するLambda(Python)

やりたいこと タイトル通りですが、特定アカウントの特定リージョン内のDynamo …

EC2とRDSのMySQLを他のAWSアカウントへ移設する

他のAWSアカウントへシステムごと移設した場合の手順です。 構成はEC2とRDS …

VPC新コンソールの日本語UIでルートテーブル編集時のエラー(2021/6/10)が発生したのでフィードバックを送った

VPCの新コンソールがリリースされていたので使って作業してましたところ、こんなエ …

Lambda関数からAWS Systems Managerパラメータストアの値を取得して更新する

Lambda関数で自分自身の環境変数を更新する だと、Lambdaのエイリアスと …

Route53でドメインを新規取得してDNSレコードを設定する

Elastic IPをAWSで発行しているのですから、DNSの設定も同じようにマ …

AWS CDKでリージョンをまたいだクロススタックリファレンスはできなかった

例えばこんなコードが実行できるかというと、 [crayon-671dd92874 …

AWS VPC ネットワークACLでHTTP(80)のみ許可する

ユーザーガイドのカスタムネットワーク ACLのうち、HTTP(80)を許可する設 …

CloudTrailのログファイルの整合性検証をAWS CLIで実行しました

CloudTrailのログファイルの検証を「有効」にしました。 上記のようなCl …

AWS Organizationsで組織全体のAWS CloudTrailを有効にしました

Organizationsのサービスメニューから、CloudTrailを選択して …