从名称获取TargetGroupArn?

时间:2018-07-08 01:57:12

标签: amazon-cloudformation amazon-ecs

您将CF模板中的TargetGroupArn用于ECS服务。我遇到的情况是已经创建了目标组,因此我想将其作为模板的参数

但是这些警告是可怕的:

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

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

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

这不起作用:

  • TargetGroupArn:!GetAtt mytarget.TargetGroupName

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

2 个答案:

答案 0 :(得分:1)

  1. 如果要使用可用的目标组,请将目标组名称作为默认参数传递给Service CF模板。
  2. 在内部将默认参数作为对LiestnerRule的“操作”部分中的TargetGroupArn的引用。它将获取目标组ARN。
  3. 检查此链接: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": {
  }
}

答案 1 :(得分:0)

很遗憾,对于目标组,由于末尾有多余的字符串,您将无法使用约定来确定其为ARN。

如果目标组是在Cloudformation中创建的,那么使用!Ref myTargetGroup就很容易获得ARN output

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

Type: "AWS::ECS::Service"
Properties: 
  ...
  LoadBalancers:
    - ContainerName: MyContainer
      ContainerPort: 1234
      TargetGroupArn: !ImportValue myExportedTargetGroupARN
  ...