私はしばらく CORS と戦ってきましたが、アイデアが尽きてしまいました。私はAWS::Serverless::HttpApi
SAMを介して展開しています。この API には現時点でエンドポイントが 1 つしかなく、 への POST リクエストを受け取ります/auctions
。PostMan でテストすると動作しますが、もちろん他の場所でテストすると恐ろしいpreflight failed
エラーがスローされます。過去数日間、私はさまざまなことを試してきましたが、何もうまくいきませんでした. これが私の現在の状態ですtemplate.yaml
:
Resources:
AdminApi:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration:
AllowMethods:
- GET
- POST
- OPTIONS
AllowOrigins:
- "*"
AllowHeaders:
- "*"
OptionsFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: handlers/options.lambda_handler
Runtime: python3.9
Events:
ApiPost:
Type: HttpApi
Properties:
ApiId: !Ref AdminApi
Path: /auctions
Method: options
CreateAuctionFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: handlers/create_auction.lambda_handler
Runtime: python3.9
Events:
ApiPost:
Type: HttpApi
Properties:
ApiId: !Ref AdminApi
Path: /auctions
Method: post
Environment:
Variables:
AUCTION_TABLE: !Sub "{{resolve:ssm:/applications/tikes/${Stage}/ddb/Auctions/TableName}}"
Policies:
- SSMParameterReadPolicy:
ParameterName: !Sub "applications/tikes/${Stage}/*"
- DynamoDBCrudPolicy:
TableName: !Sub "{{resolve:ssm:/applications/tikes/${Stage}/ddb/Auctions/TableName}}"
このテンプレートには DynamoDb テーブルを作成する兄弟テンプレートがありますが、その部分は正常に機能しているため省略します。オプションラムダハンドラーは次のとおりです(ボディを追加してもヘッダーには影響しませんでした):
def lambda_handler(event, context):
return {
'statusCode': 200,
}
そして、POST ハンドラーから送信する成功応答:
def success_body(auction_id):
return {
'statusCode': 200,
'body': json.dumps({
'auction_id': auction_id
}),
}
オプション ラムダ ハンドラーを追加する前は204
、allow-origin ヘッダーなしで OPTIONS リクエストからの応答を受け取っていましたが、ハンドラーを追加したので、200
期待どおりに取得しましたが、ヘッダーはまだありません。この構成では、PostMan を介して同じヘッダーを持つ要求を送信すると、POST にヘッダーが含まれますが、OPTIONS 要求では欠落します。
私が試したこと:
CorsConfiguration: true
- オリジンのハードコーディング
私が読んだこと:
- AWS API ゲートウェイに存在しない CORS "Response to preflight..." ヘッダーを修正し、増幅する
- https://aws.amazon.com/premiumsupport/knowledge-center/no-access-control-allow-origin-error/
- https://www.serverless.com/blog/cors-api-gateway-survival-guide/
- https://aws.amazon.com/blogs/compute/configuring-cors-on-amazon-api-gateway-apis/
- https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cors-errors/
- https://github.com/aws/aws-sam-cli/issues/2637
- https://forums.aws.amazon.com/thread.jspa?threadID=252972
- AWS Lambda HTTP API ゲートウェイ統合で CORS が不可能
- 私が見つけることができる他の aws cors の質問。
POST リクエストにヘッダーが存在するという事実は、何かが機能していることを示しています。あるリクエストでは機能するのに、他のリクエストでは機能しない理由がわかりません。