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

AWS Copilot服务连接已有RDS MySQL的安全组自动化配置问题

解决AWS Copilot微服务连接现有RDS MySQL的自动化方案

一、自动化实现服务与RDS的访问权限打通(无需手动操作)

要实现流水线式的自动化部署,核心是通过Copilot的addons扩展功能,自动配置RDS安全组的入站规则,允许服务的安全组访问MySQL端口(3306)。具体步骤:

  1. 在你的Copilot服务目录下创建.copilot/addons文件夹(若不存在)
  2. 在该文件夹内新建CloudFormation模板文件,比如rds-access.yml,内容如下:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  RDSServiceIngressRule:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: "你的RDS安全组ID"  # 替换为实际的RDS安全组ID
      IpProtocol: tcp
      FromPort: 3306
      ToPort: 3306
      SourceSecurityGroupId: !ImportValue {{ .AppName }}-{{ .EnvName }}-{{ .Name }}-SecurityGroup

这里的!ImportValue会自动引用Copilot为服务生成的安全组(Copilot默认会导出该安全组ID,命名格式为应用名-环境名-服务名-SecurityGroup,通过内置变量{{ .AppName }}、{{ .EnvName }}、{{ .Name }}自动填充)。

  1. 执行copilot deploy,Copilot会自动创建这条入站规则,后续流水线部署时也会自动维护该配置。

二、关于修改manifest添加RDS安全组的疑问

修改服务的manifest.yml添加RDS安全组是可行的,但这不是实现RDS连接的正确方式:

  • 当你在manifest.yml的network字段下添加security_groups: ["RDS安全组ID"]时,作用是把RDS的安全组附加到ECS任务的网络接口上。这意味着任务会同时拥有Copilot自动生成的服务安全组和RDS安全组的权限,但这并不能让RDS允许服务的访问——因为RDS的安全组当前仅允许特定IP,你需要的是让RDS安全组允许服务安全组的流量,而非给任务附加RDS的安全组。
  • 这种操作不仅解决不了连接问题,还可能带来不必要的权限暴露风险,不推荐使用。

补充:配置数据库连接参数

最后,需要在服务的manifest.yml中添加数据库连接所需的环境变量和密钥:

variables:
  DB_HOST: "你的RDS端点地址"
  DB_USER: "你的数据库用户名"
secrets:
  DB_PASSWORD: "/copilot/{{ .AppName }}/{{ .EnvName }}/secrets/db-password"

然后用copilot secret init命令创建db-password密钥,存储你的RDS密码。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:45