tuscanicz / php-aws-snapshots
一个简单的库,用于从PHP管理AWS备份。
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-08-27 07:38:32 UTC
README
创建自动AWS EC2快照,限制创建快照的总数和创建快照的间隔。
例如,您每天创建一个快照,并只保留过去7天的快照。或者,每周创建一个快照,并只保留最后的4个,这样您就会有一个持续一个月的快照。
需求
AWS CLI安装
sudo apt-get install python-pip php5-cli
sudo pip install awscli
// set credentials (Access Key ID, Secret Access Key) and region - ie: us-east-1, us-west-1
aws configure
设置
这假设您已经安装并配置了AWS CLI并在AWS控制台中添加了正确的IAM权限。
1. 创建一个PHP脚本来使用库
使用composer来自动加载所有必要的类。
设置AWS CLI安装目录(使用which aws
的值)并配置您的卷。
最后,连接服务并测试运行您的CLI任务。您还可以更改此库使用的描述前缀,以从服务器选择快照。这是通过Snapshots::run()
的第二个参数完成的
<?php $awsCliPath = '/usr/local/bin/aws'; $date = date('Y-m-d'); $volumes = [ new \AwsSnapshots\Options\VolumeIntervalBackupOptions('vol-123af85a', 7, '1 day', 'dev-server-backup'), new \AwsSnapshots\Options\VolumeIntervalBackupOptions('vol-321bg96c', 4, '1 week', 'image-server-' . $date), new \AwsSnapshots\Options\VolumeBackupOptions('vol-987ab12a', 10, 'cache-backup-backup'), ]; $awsCliHandler = new \AwsSnapshots\Cli\AwsCliHandler($awsCliPath); $snapshots = new \AwsSnapshots\Snapshots($awsCliHandler); $snapshots->run($volumes);
示例Symfony services.yml中的连接
aws_snapshots.cli.aws_cli_handler: class: AwsSnapshots\Cli\AwsCliHandler arguments: - '%aws.cli_tool.path%' aws_snapshots.snapshots: class: AwsSnapshots\Snapshots arguments: - '@aws_snapshots.cli.aws_cli_handler'
卷配置
卷配置有两种类型。
它们都维护一个指定描述的卷的特定数量的快照(快照数量限制)。描述用于此库来选择快照。当您创建同一卷的手动快照时,它将被忽略。
间隔备份
您可以使用以下方法在指定间隔内安排仅一个备份
new VolumeIntervalBackupOptions(volumeId, snapshotCountLimit, interval, description)
其中参数为
常规备份
您也可以使用以下方法在每次运行PHP任务时备份卷
new VolumeBackupOptions(volumeId, snapshotCountLimit, description)
其中参数为
间隔值
间隔格式为number type
(例如,30 minute
)
- 一个数字是整数
- 类型是以下单位之一
- 小时
- 天
- 周
- 月
- 年
2. 添加cron作业
cron作业的安排将取决于您的配置。您应该在尽可能长的时间内运行cron命令,即您的卷备份的最小间隔。
在示例中,您必须每天至少运行一次CRON任务。它将在每天凌晨3点创建dev-server-backup
的快照,在第一次启动时在每周的指定天凌晨3点创建image-server-${date}
的快照,每次运行任务时创建cache-server
的快照(如果您每天运行3次,它将创建3个快照)。
dev-server-backup
每天在凌晨3点创建快照image-server-${date}
每周在第一次启动的那天在凌晨3点创建快照cache-server
每次运行任务时创建快照(如果您每天运行3次,它将创建3个快照)
# run the cron job every night at 3:00 am 00 03 * * * /usr/bin/php /root/scripts/run-snapshots.php
示例IAM策略
这是一个最小的策略,仅包括工作所需的权限。您还可以将“资源”选项限制得更严格。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DescribeSnapshots"
],
"Resource": [
"*"
]
}
]
}
问题、问题或建议
请使用问题部分来提问或报告问题。此外,建议、pull request或任何帮助都十分欢迎!