前提・実現したいこと
AWSにて、APIServerを構築しています。
Lambda関数リクエスト時には問題ないのですが、Lambda関数レスポンス時にCORSではじかれる状況です。
こちらを参考にCloudFormationで管理しようと思ったのですが、
・Lambda関数の紐づいたstack-nameで指定した名前のAPIGateWay(hogehogeapi)
・CloudFormationに記載されている空のAPIGateway(myRestApi)
二つが作成され、うまく紐づきません。
どのようにすれば、紐づけができるのでしょうか?
また、レスポンス時に下記記載するとできるかと思うのですが、すべてのLambda関数に記載するのであればできればCloudFormationに記載して管理したいと思っております。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html
'headers': { 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Allow-Origin': 'https://www.example.com', 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET' },
実行したコマンド
sam build -t backend/template.yaml sam deploy --template-file .aws-sam/build/template.yaml --stack-name hogehogeapi
該当のソースコード
yaml
1[template.yaml] 2AWSTemplateFormatVersion: "2010-09-09" 3Transform: AWS::Serverless-2016-10-31 4Description: > 5 test 6 7 Sample SAM Template for test 8 9# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst 10Globals: 11 Function: 12 Timeout: 3 13 Api: 14 Cors: 15 AllowMethods: "'GET,POST,OPTIONS,DELETE,PUT'" 16 AllowHeaders: "'content-type'" 17 AllowOrigin: "'*'" 18 AllowCredentials: "'*'" 19 20Resources: 21 MyBucket: 22 Type: AWS::S3::Bucket 23 BucketName: test-bucket 24 25 RestApi: 26 Type: AWS::ApiGateway::RestApi 27 Properties: 28 Name: myRestApi 29 30 GatewayResponse: 31 Type: AWS::ApiGateway::GatewayResponse 32 Properties: 33 ResponseParameters: 34 gatewayresponse.header.Access-Control-Allow-Origin: "'*'" 35 gatewayresponse.header.Access-Control-Allow-Headers: "'*'" 36 ResponseType: MISSING_AUTHENTICATION_TOKEN 37 RestApiId: !Ref RestApi 38 StatusCode: "404" 39 40 CreateProjectFunction: 41 Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction 42 Properties: 43 CodeUri: lambdas/create_project/ 44 Handler: app.lambda_handler 45 Layers: 46 - arn:aws:lambda:ap-northeast-1:898466741470:layer:psycopg2-py38:1 47 Runtime: python3.8 48 Events: 49 CreateProject: 50 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api 51 Properties: 52 Path: /create_project 53 Method: POST
捕捉
RestApiからAPIに変更し、Function>Events>Propertiesに RestApiId: !Ref ApiGatewayApi を追加すると紐づけ自体は行われているのですが、Corsの設定がうまくできていないようです。
参考
・RestAPI
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html
・Function>Events>Properties>Api
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-property-function-api.html
...省略 ApiGatewayApi: Type: AWS::Serverless::Api Properties: StageName: Prod Cors: "'*'" GetProjectFunction: Type: AWS::Serverless::Function Properties: CodeUri: lambdas/get_project/ Handler: app.lambda_handler Layers: - arn:aws:lambda:ap-northeast-1:898466741470:layer:psycopg2-py38:1 Runtime: python3.8 Events: GetProject: Type: Api Properties: Path: /get_project Method: get RestApiId: !Ref ApiGatewayApi ...省略
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。