如何从 Cloud Formation 获取 Elastic Container Repository URI?
Posted
技术标签:
【中文标题】如何从 Cloud Formation 获取 Elastic Container Repository URI?【英文标题】:How to get Elastic Container Repository URI from Cloud Formation? 【发布时间】:2018-02-02 02:59:26 【问题描述】:我正在尝试从 Cloud Formation 创建弹性容器服务 (ECS) 设置。
但是我不希望 ECS 存储库具有丑陋的自动生成 URI:
111111111.dkr.ecr.us-east-1.amazonaws.com/docker-repo.company.com
但我希望它有一个漂亮而闪亮的
docker-repo.company.com
存储库本身不允许设置 URI 或 even a CNAME。所以我正在尝试设置一个 S3 存储桶以重定向到存储库。但是,除非我遗漏了某些内容,否则 Cloud Formation 不支持这一点,因为使用 !Ref 或 !GetAtt 我无法在 AWS::ECR::Repository 对象中查询任何可以为我提供存储库 URI 的内容。
我错过了什么吗?谢谢!
【问题讨论】:
也许只运行registry?他们很漂亮simple to setup 是的,但是如果我们还是打算使用 ECS 又有什么意义呢?通过这种方式 AWS 为我们管理它,我们最大限度地减少了我们必须自己管理的服务数量。 是的,只有在 ECR 特定设置之外的要求对您来说是值得的。 【参考方案1】:这有点傻,但最终您似乎无法引用 ECR 的 URI,因为 Cloud Formation 不支持它。
有no attribute for the URI,尽管有趣的是他们的Ruby SDK does support it,甚至还有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"
【讨论】:
你知道更令人失望的是什么吗?必须在 AWS 上使用全球分布式基础设施 (Cloud Front) 进行任何涉及自定义域名和 HTTPS 的设置。除非我错过了什么 :( 我这样说是因为 S3 设置最终无法满足我们的要求,我不得不求助于 Cloud Front。【参考方案2】: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"
(添加为单独的答案,因为我缺乏声誉点来评论先前的答案)
【讨论】:
如果您同意,我将编辑我的答案以包含您的改进版本。 当然,没问题。谢谢! 谢谢你,@sgeb!以上是关于如何从 Cloud Formation 获取 Elastic Container Repository URI?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cloud Formation 模板自动扩展 DynamoDB?
如何在 AWS Cloud Formation 中实施嵌套堆栈?
如何在 Cloud Formation 模板中使列表项有条件?
如何在 Elastic Beanstalk Cloud Formation 脚本中强制 ELB 配置