从名称中获取 TargetGroupArn?

Get TargetGroupArn from name?

您在 ECS 服务的 CF 模板中使用 TargetGroupArn。我有一种情况,目标组已经创建,我想将其作为模板的参数

但是那些 arn 很糟糕:

arn:aws:elasticloadbalancing:us-east-1:123456:targetgroup/mytarget/4ed48ba353064a79

末尾的唯一数字使这几乎不可能。我可以通过名称而不是模板中的完整 arn 来引用目标吗?

也许我可以在这里使用 Fn::GetAtt 但不确定它是什么样子

这行不通:

我收到错误:An error occurred (ValidationError) when calling the CreateChangeSet operation: Template error: instance of Fn::GetAtt references undefined resource mytarget

不幸的是,对于 Target Groups,您将无法使用约定来确定它的 ARN,因为末尾有额外的字符串。

如果目标组是在 Cloudformation 中创建的,使用 !Ref myTargetGroup.

很容易获得 ARN output

如果目标组是在另一个 CF 堆栈中创建的,请在创建 ECS 服务时尝试Exporting the Target Group ARN and use Fn::ImportValue输入目标组 ARN。

Type: "AWS::ECS::Service"
Properties: 
  ...
  LoadBalancers:
    - ContainerName: MyContainer
      ContainerPort: 1234
      TargetGroupArn: !ImportValue myExportedTargetGroupARN
  ...
  1. 如果您想使用可用的目标组,您可以将目标组名称作为默认参数传递给服务 CF 模板。
  2. 在 LiestnerRule 的 Action 部分将默认参数作为对 TargetGroupArn 的引用进行内部引用。它将获取目标组 ARN。
  3. 检查此 link:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html
{
  "Parameters": {
      "VPC": {
      ...
      "TargetGroup": {
          "Description": "TargetGroup name for ListenerRule",
          "Type": "String",
          "Default": "my-target"
      }
  },
  "Resources": {
      "Service": {
      "TaskDefinition": {
      ....
      "ListenerRule": {
                  ....
              "Actions": [
                  {
                      "TargetGroupArn": {
                          "Ref": "TargetGroup"
                      },
                      "Type": "forward"
                  }
              ]
          }
      },
      "ServiceRole": {
  }
}