如何修改Docker化WordPress的数据库连接以使用IAM Token访问RDS MySQL
实现Docker化WordPress通过IAM Token连接Amazon RDS MySQL
前置准备确认
确保以下条件已满足:
- Amazon RDS MySQL实例已启用IAM数据库认证
- 关联的IAM角色/用户拥有
rds-db:connect权限(资源需指定目标RDS实例ARN) - AWS SDK for PHP已安装在WordPress环境中(可通过Composer或插件形式部署)
- Docker容器能通过实例元数据(EC2/ECS)或环境变量获取AWS凭证
步骤1:调整配置文件结构
不要直接在secret.yaml中调用PHP函数(该文件应为纯配置定义),需将Token生成逻辑移至wp-config.php或自定义插件中,确保配置加载顺序正确:
- 在
wp-config.php开头添加Token生成函数及AWS SDK加载逻辑:
// 加载AWS SDK自动加载器(路径根据实际安装位置调整) require_once ABSPATH . 'wp-content/plugins/aws-sdk-php/aws-autoloader.php'; function createRdsAuthToken($endpoint, $region, $username) { $client = new Aws\Rds\RdsClient([ 'version' => 'latest', 'region' => $region, ]); return $client->generateDBAuthToken([ 'DBHostname' => $endpoint, 'Port' => 3306, 'DBUsername' => $username, ]); } // 引入secret.yaml中的基础配置 include '/path/to/secret.yaml'; // 生成临时Token并覆盖DB_PASSWORD define('DB_PASSWORD', createRdsAuthToken(DB_IAM_ENDPOINT, DB_IAM_REGION, DB_IAM_USERNAME));
secret.yaml仅保留静态配置项:
define('DB_IAM_ENDPOINT', 'your-rds-endpoint'); define('DB_IAM_REGION', 'your-aws-region'); define('DB_IAM_USERNAME', 'your-iam-username'); // 移除原静态DB_PASSWORD定义
步骤2:处理Token过期问题
IAM认证Token有效期为15分钟,需确保WordPress在Token过期后自动刷新并重建连接:
在自定义插件或主题functions.php中添加连接刷新逻辑:
// 初始化时检查连接有效性,失效则刷新Token add_action('init', function() { global $wpdb; try { // 执行简单查询验证连接 $wpdb->query('SELECT 1'); } catch (Exception $e) { // 连接失败,生成新Token并重连 $newToken = createRdsAuthToken(DB_IAM_ENDPOINT, DB_IAM_REGION, DB_IAM_USERNAME); $wpdb->set_password($newToken); $wpdb->db_connect(); } }); // 定期主动刷新Token(可选) add_action('wp_ajax_refresh_rds_token', 'refreshRdsToken'); add_action('wp_ajax_nopriv_refresh_rds_token', 'refreshRdsToken'); function refreshRdsToken() { global $wpdb; $newToken = createRdsAuthToken(DB_IAM_ENDPOINT, DB_IAM_REGION, DB_IAM_USERNAME); $wpdb->set_password($newToken); wp_send_json_success('Token refreshed successfully'); }
步骤3:Docker环境权限配置
- ECS部署:为ECS任务角色添加权限策略,允许
rds-db:connect操作,资源指定目标RDS实例的ARN - EC2上Docker:为EC2实例角色添加相同权限策略,容器通过实例元数据自动获取AWS凭证
验证连接
- 启动Docker容器后,查看WordPress日志,确认无数据库连接错误
- 进入容器执行
wp db check命令,验证数据库连接正常
内容的提问来源于stack exchange,提问作者utkuyceng
相关产品推荐
相关产品推荐

