如何从 Cloud Formation 获取 Elastic Container Repository URI?

How to get Elastic Container Repository URI from Cloud Formation?

我正在尝试从 Cloud Formation 创建弹性容器服务 (ECS) 设置。

但是我不希望 ECS 存储库具有难看的自动生成的 URI:

111111111.dkr.ecr.us-东-1.amazonaws.com/docker-repo.company.com

但我希望它有一个漂亮而闪亮的

docker-repo.company.com

存储库本身不允许设置 URI 或 even a CNAME。所以我正在尝试设置一个 S3 存储桶以重定向到回购协议。但是,除非我遗漏了什么,否则 Cloud Formation 不支持此功能,因为使用 !Ref 或 !GetAtt 我无法在 AWS::ECR::Repository 对象中查询任何内容,这将给我存储库 URI。

我错过了什么吗?谢谢!

这有点傻,但最后您似乎无法引用 ECR 的 URI,因为 Cloud Formation 不支持它。

no attribute for the URI, even though funnily enough their Ruby SDK does support it and even the third-party, cross-cloud Terraform supports it.

但是,您可以解决这个问题,因为存储库 URI 是稳定的,它不包含任何随机部分,因此您可以从已有的内容中组合 URI:

HostName: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${dockerrepocompanycom}"

或者不太酷的老派版本:

HostName: !Join [ ".", [ !Ref "AWS::AccountId", "dkr.ecr", !Ref "AWS::Region", !Join [ "/", [ "amazonaws.com", !Ref "dockerrepocompanycom" ] ] ] ]

用于创建 S3 存储桶的完整工作配置:

   s3dockerrepo1redirect:
    Type: AWS::S3::Bucket
    Properties:
        BucketName: "docker-repo.company.com"
        WebsiteConfiguration:
            RedirectAllRequestsTo:
               HostName: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${dockerrepocompanycom}"
HostName: !Join [ ".", [ !Ref "AWS::AccountId", "dkr.ecr", !Ref "AWS::Region", !Join [ "/", [ "amazonaws.com", !Ref "dockerrepocompanycom" ] ] ] ]

更简洁的方式如下:

HostName: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${dockerrepocompanycom}"

(添加为单独的答案,因为我缺少信誉点来评论以前的答案)