Skip to content

CORS(Cross-Origin Resource Sharing)のテスト環境をAWS SAMで展開する。

Notifications You must be signed in to change notification settings

heiwa4126/sam-cors1

Repository files navigation

sam-cors1

CORS(Cross-Origin Resource Sharing)のテスト環境をAWS SAMで展開します。

デプロイがめんどうな人は

だけでも参考になると思います。

目次

デプロイに必要なもの

デプロイ

まずSAMなので

sam build
sam deploy --guided  # 最初の1回。2回目以降は `sam deploy`

で、サンプルのlambdaとサンプルのWWWコンテンツを置くS3を展開します。

sam deploy --guidedでは以下の2つを除いてデフォルトでOK。

  • Parameter BucketName は S3のバケット名なので、独自の名前をつけてください。
  • HelloFunction may not have authorization defined, Is this okay? [y/N]:yで。

無事スタックがデプロイされたら、Outputの S3URLS3SecureURL の値をメモしてください (忘れてもポータルのCloudFormationの該当スタックの出力から見れます)。

次に、

./update_1js.sh

で、1.template.js から contents/js/1.js を作成 (lambdaのURLを埋め込んでいます)。

最後に

./sync_contents.sh

でcontents/ 以下をS3に転送します。

テスト

Outputの S3URLS3SecureURL のURLに ブラウザからアクセスしてみてください。

jQueryの$.ajaxを使って、かんたんなクロスドメインのテストが実行されます。

サンプルlambdaのメモ

lambda APIの戻り値は以下のようなものです。

{"message": "OK", "time": "2021-10-18 07:33:47.955417+00:00"}
  • message - OKで固定
  • time - 現在時刻をUTCで

js/1.jsではこのうちtimeを表示します。

削除

実験が終わったら

./delete_stack.sh

で、S3の中身とスタックを削除してください。

CROSメモ

SAM(CFn)ではOPTIONSを作ってくれますが、 個々のlambdaでも Access-Control-Allow-* 3つ を返す必要があります。

いまのCFnテンプレートの設定だと 全部のAPIに同じ設定のCORSのOPTIONSがついてしまう。 AWS::Serverless::FunctionのPropertiesにはCorsがないので 個別で指定することはできないみたい。

Access-Control-Allow-Originは

  • null
  • *
  • オリジン1つ

の、いずれかが指定できます。 「スペースで区切ってオリジンを複数指定」 は出来ません。

OPTIONSの返すAccess-Control-Allow-* と GET,PUTの返すそれは同じである必要はありません (Preflightの場合AND条件になるみたい)。 CFnだと、プリフライトのOPTIONSの返すAccess-Control-Allow-*はゆるめに、 個々のAPIではきつめにせざるおえないみたい。

オリジンはドメインとはちがいます。 オリジンはスキーマとドメイン、ポートはオプション。

正しいオリジン例:

正しくないオリジン例:

参考

About

CORS(Cross-Origin Resource Sharing)のテスト環境をAWS SAMで展開する。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages