我正在使用AWS SAM(无服务器应用程序模型)创建一个带有API端点的lambda。
在我的SAM模板中.yaml我有一个带有/ user端点的getUser lambda。
template.yaml
Resources:
GetUser:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: handler.getUser
Timeout: 300
Runtime: nodejs6.10
Events:
GetUser:
Type: Api
Properties:
Path: /user
Method: get
当我使用AWS CLI部署它时,它成功创建了lambda和端点,但API网关阶段混淆地命名为“Stage”。我想将舞台名称更改为其他内容,例如“Prod”。如何更改阶段名称?
这是在部署之后在cloudformation模板中定义阶段名称的位置。我想要“StageName”:“Stage”就像“StageName”:“Prod”。
"ServerlessRestApiDeployment": {
"Type": "AWS::ApiGateway::Deployment",
"Properties": {
"RestApiId": {
"Ref": "ServerlessRestApi"
},
"StageName": "Stage"
}
答案 0 :(得分:2)
我无法删除Stage
StageName,但是当我使用SAM进行部署时,我使用以下方法在GatewayAPI部署中设置了动态StageName:
Properties:
StageName: !Ref "STAGE_VARIABLE"
每个环境都有不同的堆栈,因此prod
API包含prod
阶段,dev
API包含dev
阶段。我发现这比同一个GatewayAPI的多阶段部署更容易
答案 1 :(得分:0)
要将另一个阶段添加到现有API,请使用原始CFT阶段资源。文件在这里:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html 使用SAM CLI时,转换会在部署之前将API修改为原始CFT,但它支持原始资源,您可以使用.Deployment后缀引用动态部署资源。您应该能够仅添加资源并通过ref内在函数引用API值。在此处查看详细信息:https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
# assuming there is a AWS::Serverless::Api resource named Api
ProdApiStage:
Type: AWS::ApiGateway::Stage
Properties:
StageName: prod
RestApiId: !Ref Api
DeploymentId: !Ref Api.Deployment
SAM CLI中存在一个错误,该错误会自动生成“阶段”阶段。要删除默认生成的“阶段”阶段,请将sam cli升级到最新版本,并添加一个设置openapi版本的globals部分:
Globals:
Api:
OpenApiVersion: 3.0.1
有关详细信息,请参见https://github.com/awslabs/serverless-application-model/issues/191。这样可以防止产生新的事件,但是如果已经部署了该阶段,则必须手动删除该阶段,因为SAM本质上是无状态的。