You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除AWS CloudFormation中S3端点末尾的点?

问题

使用YAML编写Route53故障转移策略时,S3存储桶端点地址末尾带有点(例如:slh-route53-ml.s3-website-us-east-1.amazonaws.com.),导致域名路由失效。尝试用replace(".com.", ".com")方法未成功,求移除端点末尾点的方法。

以下是CloudFormation配置代码:

MyPrimaryRecord:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: 2222222222222222
      Name: deneme.slhttnunlu.net
      Type: A
      Failover: PRIMARY
      TTL: '60'
      ResourceRecords:
        - !GetAtt WebServer.PublicIp
      SetIdentifier: Primary
      HealthCheckId: !Ref myHealthCheck

  MySecondaryRecord:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: 2222222222222222
      Name: deneme.slhttnunlu.net
      Type: A
      Failover: SECONDARY
      AliasTarget:
        DNSName: !Select [2, !Split ["/", !GetAtt S3FailBucket.WebsiteURL]]
        EvaluateTargetHealth: false
        HostedZoneId: Z3AQBSTGFYJSTF
      SetIdentifier: Secondary
解决方案

针对S3端点末尾的点,可以用以下几种CloudFormation内置函数组合来移除:

方法1:用!Slice+!Split+!Join处理

利用!Split将端点按点拆分为数组,再用!Slice去掉最后一个空元素(因末尾点导致),最后拼接成无末尾点的地址:

DNSName: !Join [".", !Slice [ !Split [".", !Select [2, !Split ["/", !GetAtt S3FailBucket.WebsiteURL]]], 0, -1]]

方法2:用!Split限制拆分次数取前半部分

通过!Split的最大拆分次数参数,只拆分最后一个点,直接取前半段内容:

DNSName: !Select [0, !Split [".", !Select [2, !Split ["/", !GetAtt S3FailBucket.WebsiteURL]], 1]]

注:这里的1是最大拆分次数,会优先从右侧拆分一次。

方法3:直接构造S3区域域名(更可靠)

如果S3静态网站端点格式固定,也可以直接构造域名而非从WebsiteURL提取,从根源避免末尾点问题:

DNSName: !Sub "${S3FailBucket}.s3-website-us-east-1.amazonaws.com"

这种方式无需处理字符串,直接生成正确的端点地址,出错概率更低。


内容的提问来源于stack exchange,提问作者Selahattin Ünlü

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:04:56