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

如何修改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或自定义插件中,确保配置加载顺序正确:

  1. 在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));
  1. 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凭证

验证连接

  1. 启动Docker容器后,查看WordPress日志,确认无数据库连接错误
  2. 进入容器执行wp db check命令,验证数据库连接正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:15:24