如何从CloudFormation AWS::Lambda::Alias获取函数名称和别名?



我需要为 API 网关阶段设置一个阶段变量。这个阶段变量必须只是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"
}
}
}
}

只需重用用于指定AWS::Lambda::Alias资源中的FunctionNameName属性的相同值。例如,假设您的资源在模板中按如下所示指定:

"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" }
]}
}
}
}
}

假设MyFunctionFoo的,MyFunctionAliasdev的,这将lambdaAlias设置为根据需要Foo:dev

最新更新