1

我正在尝试使用 CloudFormation 在 AWS 上部署 ECS 集群,但我不知道如何为集群设置自定义名称。

集群已创建,但以某种方式生成的名称,格式如stackname-ECSCluster-randomstring.

有没有办法为集群设置自定义名称?

AWS::ECS::Cluster不接受任何参数或标签,也不接受AWS ::ECS:Service

这是一种装饰性的东西,但有一个有意义的名字会很好。

4

2 回答 2

3

CloudFormation 目前不允许您设置自定义名称。如果要使用特定名称,可以在 CloudFormation 外部创建集群,然后在模板中引用它。

于 2016-02-01T17:55:07.100 回答
1

直接从我的 CloudFormation 脚本中剪辑。如果要传入,可以作为参数传入。指定名称可能是在您撰写帖子后添加的内容。不管怎样,这对我有用。

Resources:
  MyCluster:
    Type: AWS::ECS::Cluster
    Properties:
      ClusterName: TheNameOfTheCluster

如果要修改集群的名称,可以使用Fn::Join连接两个(或更多)字符串。以下将产生一个名为“MyClusterNamePrefix-MyClusterNameSuffix”的集群

Resources:
  MyCluster:
    Type: AWS::ECS::Cluster
    Properties:
      ClusterName: !Join
        - "-"    # The delimiter String
        - - MyClusterNamePrefix
          - MyClusterNameSuffix

如果您需要恢复名称,您可以在其他地方引用,它们并不容易。我知道这并不完全是您所要求的,但您可能需要在其他地方引用该名称(例如UserData)。

Outputs:
  MyClusterName:
    Description: The Name of My Cluster
    Value:
      Fn::Select:
        - 1
        - Fn::Split:
          - "/"
          - Fn::GetAtt:
              - MyCluster

这是因为(在撰写本文时)Fn::GetAtt只能返回集群的 ARN(向下滚动到支持的属性表)。ECS 集群 ARN 规范如下:

arn:aws:ecs:region:account-id:cluster/cluster-name

所以,把它们放在一起:

  • Fn::Split在“/”上拆分,丢弃分隔符,并返回 ["arn:aws:ecs:region:account-id:cluster", "cluster-name"]
  • Fn::Select允许您从字符串列表中进行选择。所以传递“1”只返回“集群名称”。

根据需要移植到 JSON。这是一种丑陋的方法,但它有效。我会密切关注亚马逊是否/何时可以将其作为属性公开并更新您的代码。

于 2018-02-02T18:35:32.330 回答