我正在尝试在专用的 mysql 服务器上使用 Eric Hammond 的 ec2-consistent-snapshot 实用程序。
我已经创建了一个 IAM 用户并附加了一个高级用户权限策略(使用 AWS 控制台)。
在 32 位 Ubuntu 10.10 ec2 实例和 XFS 卷上,我按照以下说明安装了 ec2-consistent-snapshot:http://alestic.com/mt/mt-search.cgi?blog_id=1&tag=ec2-consistent-snapshot&limit=20。
我启动的命令如下:
ec2-consistent-snapshot \
--freeze-filesystem /data03 \
--description "Test description $(date +'%Y-%m-%d %H:%M:%S')" \
--mysql \
--mysql-user <my user> \
--mysql-host 127.0.0.1 \
--mysql-socket /var/run/mysqld/mysqld.sock \
--debug \
vol-11111111
调试输出是:
ec2-consistent-snapshot: Using AWS access key: AWSAccessKeyId=AKI[...]
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL connect as <my user>
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL flush
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL flush & lock
ec2-consistent-snapshot: master_log_file="mysql-bin.000726", master_log_pos=106
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: sync
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: xfs_freeze -f /data03
ec2-consistent-snapshot: Thu Mar 22 10:28:54 2012: create EC2 object
ec2-consistent-snapshot: Thu Mar 22 10:28:54 2012: ec2-create-snapshot vol-11111111
ec2-consistent-snapshot: ERROR: AWS was not able to validate the provided access credentials
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: xfs_freeze -u /data03
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: MySQL unlock
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: MySQL disconnect
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: done
(当然,volume id实际上并不是111111111)。
我尝试修改代码以确保它使用的是正确的密钥,结果证明是正确的。
我还有一个指向 /root/.awssecret 的环境变量
echo $AWS_CREDENTIAL_FILE
/root/.awssecret
我还尝试过其他方法,并产生了相同的结果: - 将凭证文件的路径作为参数传递。 - 生成新的凭证并使用这些凭证。 - 将区域指定为 us-east-1,而不是让其变为默认值。
我的凭证文件如下:
AWSAccessKeyId=AKI[...]
AWSSecretKey=DPh[..]
就是这样了,感谢您的帮助。
答案1
ec2-consistent-snapshot 的调试输出通常为:
'Using AWS access key: AKI[...]'
由于您看到的输出包括AWSAccessKeyId=
并且快速浏览了代码(第 470-471 行)后 - 它只是读取每一行,而无需进一步解析:
($aws_access_key_id, $aws_secret_access_key) =
File::Slurp::read_file($aws_credentials_file);
解决方案可能是省略凭证文件中的“AWSAccessKeyId=”和“AWSSecretKey=”前缀。因此,您的凭证文件应类似于:
AKI[...]
DPh[...]
根据脚本的文档,该文件应按顺序在单独的行上包含 Amazon AWS 访问密钥和秘密访问密钥。此外,该脚本还会读取 $AWS_CREDENTIALS 环境变量。
--aws-access-key-id
您还可以尝试使用和参数将身份验证参数直接传递给脚本--aws-secret-access-key
。