如何在我的模板中为 API 事件做“/”?
How do I do "/" for an API event in my template?
这是我的 lambda 资源:
Resources:
myFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
Description: Enter description of what this specific Lambda does
CodeUri: hello_world/build/
Handler: app.lambda_handler
Runtime: python2.7
Events:
testMethod:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: testMethod/
Method: POST
/:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: /
Method: ANY
testMethod和“/”对应swagger文档中的路径。但似乎 cloudformation 不会让我使用“/”作为 api 事件:
Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [myFunction/] is invalid. Logical ids must be alphanumeric.
这是我的 API 网关资源:
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
DefinitionBody:
swagger: "2.0"
info:
version: "2018-09-12T06:21:35Z"
title: 'sdfsdfsd'
schemes:
- "https"
paths:
/:
x-amazon-apigateway-any-method:
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
security:
- sigv4: []
x-amazon-apigateway-integration:
type: "aws_proxy"
httpMethod: "POST"
passthroughBehavior: "when_no_match"
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
responses:
default:
statusCode: "200"
contentHandling: "CONVERT_TO_TEXT"
/testMethod:
post:
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
security:
- sigv4: []
x-amazon-apigateway-integration:
type: "aws_proxy"
httpMethod: "POST"
passthroughBehavior: "when_no_match"
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
responses:
default:
statusCode: "200"
contentHandling: "CONVERT_TO_TEXT"
securityDefinitions:
sigv4:
type: "apiKey"
name: "Authorization"
in: "header"
x-amazon-apigateway-authtype: "awsSigv4"
definitions:
Empty:
type: "object"
title: "Empty Schema"
你是对的:你不能将事件命名为“/”,但你仍然可以将其作为你的路径。
尝试将您的“/”事件重命名为仅使用字母数字字符的其他名称。这不会改变事件的行为并将满足 CloudFormation 的约束。示例:
Events:
apiEvent:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: /
Method: ANY
这是我的 lambda 资源:
Resources:
myFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
Description: Enter description of what this specific Lambda does
CodeUri: hello_world/build/
Handler: app.lambda_handler
Runtime: python2.7
Events:
testMethod:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: testMethod/
Method: POST
/:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: /
Method: ANY
testMethod和“/”对应swagger文档中的路径。但似乎 cloudformation 不会让我使用“/”作为 api 事件:
Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [myFunction/] is invalid. Logical ids must be alphanumeric.
这是我的 API 网关资源:
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
DefinitionBody:
swagger: "2.0"
info:
version: "2018-09-12T06:21:35Z"
title: 'sdfsdfsd'
schemes:
- "https"
paths:
/:
x-amazon-apigateway-any-method:
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
security:
- sigv4: []
x-amazon-apigateway-integration:
type: "aws_proxy"
httpMethod: "POST"
passthroughBehavior: "when_no_match"
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
responses:
default:
statusCode: "200"
contentHandling: "CONVERT_TO_TEXT"
/testMethod:
post:
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
security:
- sigv4: []
x-amazon-apigateway-integration:
type: "aws_proxy"
httpMethod: "POST"
passthroughBehavior: "when_no_match"
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${myFunction}/invocations
responses:
default:
statusCode: "200"
contentHandling: "CONVERT_TO_TEXT"
securityDefinitions:
sigv4:
type: "apiKey"
name: "Authorization"
in: "header"
x-amazon-apigateway-authtype: "awsSigv4"
definitions:
Empty:
type: "object"
title: "Empty Schema"
你是对的:你不能将事件命名为“/”,但你仍然可以将其作为你的路径。
尝试将您的“/”事件重命名为仅使用字母数字字符的其他名称。这不会改变事件的行为并将满足 CloudFormation 的约束。示例:
Events:
apiEvent:
Type: Api
Properties:
RestApiId: !Ref ApiGatewayApi
Path: /
Method: ANY