我需要为API Gateway阶段设置阶段变量。这个阶段变量必须只是lambda函数和别名(Foo:dev)。它不能是完整的ARN。然后,该变量用于swagger,以将API网关与具有特定别名的lambda函数集成。
看起来我唯一可以使用AWS :: Lambda :: Alias资源的是ARN。我如何获得名称和别名?
这是舞台资源。 “lamdaAlias”被设置为别名的完整ARN。
"ApiGatewayStageDev": {
"Type": "AWS::ApiGateway::Stage",
"Properties": {
"StageName": "dev",
"Description": "Dev Stage",
"RestApiId": {
"Ref": "ApiGatewayApi"
},
"DeploymentId": {
"Ref": "ApiGatewayDeployment"
},
"Variables": {
"lambdaAlias": {
"Ref": "LambdaAliasDev"
}
}
}
}
答案 0 :(得分:2)
只需重复使用相同的值来指定AWS::Lambda::Alias
资源中的FunctionName
和Name
属性。例如,假设您的资源在模板中指定如下:
"LambdaAliasDev" : {
"Type" : "AWS::Lambda::Alias",
"Properties" : {
"FunctionName" : { "Ref" : "MyFunction" },
"FunctionVersion" : { "Fn::GetAtt" : [ "TestingNewFeature", "Version" ] },
"Name" : { "Ref" : "MyFunctionAlias" }
}
}
您可以使用Fn::Join
内在函数将函数和别名组合成单个字符串,如下所示:
"ApiGatewayStageDev": {
"Type": "AWS::ApiGateway::Stage",
"Properties": {
"StageName": "dev",
"Description": "Dev Stage",
"RestApiId": {
"Ref": "ApiGatewayApi"
},
"DeploymentId": {
"Ref": "ApiGatewayDeployment"
},
"Variables": {
"lambdaAlias": {
"Fn::Join": {[ ":", [
{ "Ref": "MyFunction" },
{ "Ref": "MyFunctionAlias" }
]}
}
}
}
}
假设MyFunction
为Foo
且MyFunctionAlias
为dev
,则会根据需要将lambdaAlias
设置为Foo:dev
。