【问题标题】:How to get just the function name and alias from CloudFormation AWS::Lambda::Alias?如何从 CloudFormation AWS::Lambda::Alias 获取函数名称和别名?
【发布时间】:2017-05-14 03:43:05
【问题描述】:

我需要为 API Gateway 阶段设置阶段变量。这个阶段变量必须只是 lambda 函数和别名 (Foo:dev)。它不能是完整的 ARN。然后在 swagger 中使用该变量将 API Gateway 与具有特定别名的 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"
                }
            }
        }
    }

【问题讨论】:

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


    【解决方案1】:

    只需重用用于在 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

    【讨论】:

    • 谢谢!您能说明如何定义 MyFunctionAlias(假设它不是参数)吗?
    • @boris MyFunctionAlias 是此示例中的参数 - 请参阅 Parameters 文档了解如何在堆栈模板中定义参数。如果您想将该值指定为固定常量,请创建一个具有默认值的参数,或者在模板中的两个位置将 { "Ref": "MyFunctionAlias" } 替换为常量字符串(例如,"dev")。
    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2018-09-04
    • 2021-11-08
    • 1970-01-01
    • 2021-05-07
    • 2017-10-20
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多