tuscanicz/php-aws-snapshots

一个简单的库,用于从PHP管理AWS备份。

1.1.1 2016-08-04 14:49 UTC

This package is auto-updated.

Last update: 2024-08-27 07:38:32 UTC


README

创建自动AWS EC2快照,限制创建快照的总数和创建快照的间隔。

例如,您每天创建一个快照,并只保留过去7天的快照。或者,每周创建一个快照,并只保留最后的4个,这样您就会有一个持续一个月的快照。

需求

  • AWS CLI
  • AWS IAM快照权限(示例策略
  • PHP 5.5+
  • 访问crontab(或某些其他作业调度程序)

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或任何帮助都十分欢迎!