我有一个AWS SAM模板,它创建了一个连接到Step Function的API网关。
这一切都很好,但我需要添加一个Integration Response Mapping Template
到从步骤函数返回的响应。
我看不出这是可能的SAM模板?
我找到了相关的云形成模板:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration-integrationresponse.html
但是看起来我必须创建整个AWS::ApiGateway::Method
/Integration
/IntegrationResponses
链-然后我不确定您如何从SAM模板的其他部分引用它。
我读到它可以用openAPI/Swagger定义完成-这是唯一的方法吗?或者是否有一种更简洁的方法来简单地添加这个模板?
这是我刚才要演示的内容的简化版本…
Transform: AWS::Serverless-2016-10-31
Description: My SAM Template
Resources:
MyAPIGateway:
Type: AWS::Serverless::Api
Properties:
Name: my-api
StageName: beta
Auth:
ApiKeyRequired: true
UsagePlan:
CreateUsagePlan: PER_API
UsagePlanName: my-usage-plan
Quota:
Limit: 1000
Period: DAY
Throttle:
BurstLimit: 1000
RateLimit: 1000
MyStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
Name: my-state-machine
DefinitionUri: statemachines/my-state-machine.asl.json
Events:
MyEvent:
Type: Api
Properties:
Path: /myApiMethod
Method: post
RestApiId: !Ref MyAPIGateway
# TODO: how to we define this Integration Response Template ?
# IntegrationResponse:
# Template:
# application/json: |
# ## parse arn:aws:states:REGION:ACCOUNT:execution:STATE_MACHINE:EXECUTION_NAME
# ## to get just the name at the end
# #set($executionArn = $input.json('$.executionArn'))
# #set($arnTokens = $executionArn.split(':'))
# #set($lastIndex = $arnTokens.size() - 1)
# #set($executionId = $arnTokens[$lastIndex].replace('"',''))
# {
# "execution_id" : "$executionId",
# "request_id" : "$context.requestId",
# "request_start_time" : "$context.requestTimeEpoch"
# }
现在您正在使用状态机中的AWS SAM事件来为您构造API,这是一种非常容易构造API的方法。但是,API的某些方面不能这样构造。
当您使用AWS::Serverless::Api
的DefinitionBody属性(或DefinitionUri)时,您仍然可以使用AWS SAM来构建具有所有高级功能的API。这允许你使用OpenAPI规范和OpenAPI扩展来指定API。
您仍然需要在StateMachine中定义事件,因为这也将确保为API调用其他服务配置正确的权限。如果你没有指定事件,你必须自己修复权限。