ECS 集群名称与 cloudformation

sti*_*ibi 3 amazon-web-services amazon-ecs

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

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

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

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

这是一种装饰性的东西,但如果有一个有意义的名字那就太好了。

Pat*_*hig 6

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

Resources:
  MyCluster:
    Type: AWS::ECS::Cluster
    Properties:
      ClusterName: TheNameOfTheCluster
Run Code Online (Sandbox Code Playgroud)

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

Resources:
  MyCluster:
    Type: AWS::ECS::Cluster
    Properties:
      ClusterName: !Join
        - "-"    # The delimiter String
        - - MyClusterNamePrefix
          - MyClusterNameSuffix
Run Code Online (Sandbox Code Playgroud)

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

Outputs:
  MyClusterName:
    Description: The Name of My Cluster
    Value:
      Fn::Select:
        - 1
        - Fn::Split:
          - "/"
          - Fn::GetAtt:
              - MyCluster
Run Code Online (Sandbox Code Playgroud)

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

arn:aws:ecs:region:account-id:cluster/cluster-name
Run Code Online (Sandbox Code Playgroud)

所以,把它们放在一起:

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

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