Amazon EC2 EBS自动备份单行程可手动工作,但不能从cron工作

dan*_*dan 9 backup cron amazon-ec2 amazon-web-services

我正在尝试在Amazon AWS上为我的EBS实施自动备份系统.

当我运行此命令时ec2-user:

/opt/aws/bin/ec2-create-snapshot --region us-east-1 -K /home/ec2-user/pk.pem -C /home/ec2-user/cert.pem -d "vol-******** snapshot" vol-********
Run Code Online (Sandbox Code Playgroud)

一切正常.

但是,如果我将此行添加到/etc/crontab并重新启动crond服务:

15 12 * * * ec2-user /opt/aws/bin/ec2-create-snapshot --region us-east-1 -K /home/ec2-user/pk.pem -C /home/ec2-user/cert.pem -d "vol-******** snapshot" vol-********
Run Code Online (Sandbox Code Playgroud)

这不起作用.

我检查了var/log/cron这一行,因此命令执行:

Dec 13 12:15:01 ip-10-204-111-94 CROND[4201]: (ec2-user) CMD (/opt/aws/bin/ec2-create-snapshot --region us-east-1 -K /home/ec2-user/pk.pem -C /home/ec2-user/cert.pem -d "vol-******** snapshot" vol-******** )
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下这个问题吗?

我想是一些环境问题 - 可能缺少一些变量.如果是这样的话,我不知道该怎么做.

谢谢.

jam*_*ieb 9

您应该考虑利用AWS的新IAM角色功能.基本上,您要做的是在IAM控制面板中创建一个新角色,然后为其分配创建快照的权限.您需要附加到角色的策略如下所示:

{
  "Statement": [
    {
      "Sid": "Stmt1355446824880",
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:DescribeSnapshots",
        "ec2:DescribeVolumes"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后,在创建实例时,在启动配置中定义IAM角色(它位于"高级设置"下).结果是您的实例现在自动拥有创建快照的权限,您不必担心在实例的任何位置存储访问密钥或其他凭据.它将通过cron无问题地工作.

  • 使用x509证书进行身份验证已弃用,可能会消失.您最好使用AWS_ACCESS_KEY和AWS_SECRET_KEY环境变量.但是你必须将密钥嵌入AMI,这是非常沮丧的.这就是使用AMI角色的最佳选择. (2认同)

tix*_*ix3 7

对于初学者来说,crontab没有$ PATH,你还必须导出EC2_HOME和JAVA_HOME.我建议您创建一个脚本,在顶部有两个导出,然后调用创建快照.这么简单

export EC2_HOME=your_ec2_home
export JAVA_HOME=your_java_home
/opt/aws/bin/ec2-create-snapshot --region us-east-1 -K /home/ec2-user/pk.pem -C /home/ec2-user/cert.pem -d "vol-******** snapshot" vol-********
Run Code Online (Sandbox Code Playgroud)

根据经验,将备份过程放在脚本中通常是一种很好的做法.您可以在以下链接中找到示例脚本:https: //forums.aws.amazon.com/message.jspa?messageID = 350163.有许多可用的脚本可自定义并且大多数ec2功能都是自动化的.