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

时间:2016-12-29 19:31:21

标签: amazon-web-services aws-lambda aws-api-gateway amazon-cloudformation

我需要为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"
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

只需重复使用相同的值来指定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" }
                ]}
            }
        }
    }
}

假设MyFunctionFooMyFunctionAliasdev,则会根据需要将lambdaAlias设置为Foo:dev