如何从云形成中获取弹性容器存储库URI?

obl*_*lio 9 amazon-s3 amazon-web-services amazon-ecs aws-cloudformation docker

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

但是,我不希望ECS存储库具有丑陋的自动生成的URI:

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

但相反,我希望它有一个漂亮和有光泽

docker-repo.company.com

存储库本身不允许设置URI 甚至是CNAME.所以我试图设置一个S3存储桶重定向到repo.但是,除非我遗漏了某些东西,否则Cloud Formation不支持这个,因为使用!Ref或!GetAtt我无法在AWS :: ECR :: Repository对象中查询,它将为我提供存储库URI.

我错过了什么吗?谢谢!

obl*_*lio 21

这有点愚蠢,但最终似乎你不能引用ECR的URI,因为Cloud Formation不支持它.

对URI没有属性,即使有趣的是他们的Ruby SDK不支持它,甚至是第三方,跨云Terraform支持它.

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

HostName: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${dockerrepocompanycom}"
Run Code Online (Sandbox Code Playgroud)

或者对于不那么酷的老派版本:

HostName: !Join [ ".", [ !Ref "AWS::AccountId", "dkr.ecr", !Ref "AWS::Region", !Join [ "/", [ "amazonaws.com", !Ref "dockerrepocompanycom" ] ] ] ]
Run Code Online (Sandbox Code Playgroud)

用于创建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}"
Run Code Online (Sandbox Code Playgroud)

  • 伙计,这是一个令人失望的答案. (4认同)