首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用CloudFormation成功地检索ALB ListenerArn以设置ListenerRules?

如何使用CloudFormation成功地检索ALB ListenerArn以设置ListenerRules?
EN

Stack Overflow用户
提问于 2022-02-10 14:13:03
回答 1查看 656关注 0票数 1

我开始认为验证/资源查找中存在一个与"Type": "AWS::ElasticLoadBalancingV2::ListenerRule",资源相关的根本缺陷。

具体来说,每次我尝试为已知的工作侦听器创建一个新的ListenerRule时,Cloudformation与

代码语言:javascript
运行
复制
Unable to retrieve ListenerArn attribute for AWS::ElasticLoadBalancingV2::Listener, with error message One or more listeners not found (Service: ElasticLoadBalancingV2, Status Code: 400, Request ID: c6914f71-074c-4367-983a-bcf1d8fd1350, Extended Request ID: null)

经过测试,我可以通过硬编码模板中的ListenArn属性来使其工作,但这不是一个解决方案,因为模板用于具有不同资源的多个堆栈。

以下是模板的相关部分:

代码语言:javascript
运行
复制
    "WLBListenerHttp": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [{
          "Type": "forward",
          "TargetGroupArn": { "Ref": "WLBTargetGroupHttp" }
        }],
        "LoadBalancerArn": { "Ref": "WebLoadBalancer" },
        "Port": 80,
        "Protocol": "HTTP"
      }
    },
    "ListenerRuleHttp": {
      "DependsOn": "WLBListenerHttp",
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
        "Actions": [{
          "Type": "fixed-response",
          "FixedResponseConfig": { "StatusCode": "200" }
        }],
        "Conditions": [{
          "Field": "host-header",
          "HostHeaderConfig": { "Values": ["domain*"] }
        }, {
          "Field": "path-pattern",
          "PathPatternConfig": { "Values": ["/path/to/respond/to"] }
        }],
        "ListenerArn": { "Fn::GetAtt": ["WLBListenerHttp", "ListenerArn"] },
        "Priority": 1
      }
    },

根据侦听器的文档,Fn::GetAtt或Ref都应该返回ListenerARN:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html

“当将此资源的逻辑ID传递给内部Ref函数时,Ref返回侦听器的(ARN)。

有关使用Ref函数的更多信息,请参见参考资料。

Fn::GetAtt Fn::GetAtt内在函数返回此类型的指定属性的值。以下是可用属性和示例返回值。

有关使用Fn::GetAtt内部函数的更多信息,请参见Fn::GetAtt。

ListenerArn侦听器的(ARN)。

我尝试过"ListenerArn": { "Fn::GetAtt": ["WLBListenerHttp", "ListenerArn"] },"ListenerArn": { "Ref": "WLBListenerHttp"},,但都没有成功,导致了注意到的错误。如果我用完整的Arn硬编码Arn "ListenerArn": "arn::",,它可以正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-21 10:46:23

事实证明,我的语法非常好。然而,我没有意识到的是,虽然存在WLBListenerHttp资源,但它实际上不是CloudFormation创建的ARN。显然,有人在没有告诉我们的情况下无意中删除了它,然后手工重新创建了它。这使得帐户处于中断状态,其中CloudFormation在创建侦听器时为侦听器记录了一个ARN,但是它确实不再有效,因为新资源有一个新的ARN。

解决方案是手动删除违规资源,然后在我们的CloudFormation模板中稍微更改它的名称,这样它就会创建一个新的资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71066657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档