我有AWS CLI Command来创建数据库快照,我想用当前时间戳创建数据库快照 我无法使用cron选项卡运行该命令。
要创建Amazon RDS数据库实例,请使用以下命令
aws rds create-db-instance --db-instance-identifier testrds --allocated-storage 5 --db-instance-class db.m1.small --engine mysql --availability-zone us-east-1d --master-username rajuuser --master-user-password mrajuuser --port 7007 --no-multi-az --no-auto-minor-version-upgrade
要创建数据库快照,请使用以下命令
aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier testrds
shell脚本我正在关注的内容
#!/bin/sh
#echo "Hello world"
now=$(date +"%Y-%m-%d-%H-%M-%S")
cd /home/ubuntu
cmd="$(aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier testrds:"$(now)")"
echo $cmd
答案 0 :(得分:0)
我有一个类似的cron任务设置,用于备份EC2中的某些实例。以下是我如何设置它:
$ crontab -l
0 14 * * * /usr/bin/zsh /home/hjpotter92/snapshot.zsh
以及snapshot.zsh
的内容:
#!/usr/bin/zsh
HOME="/home/hjpotter92"
AWS_HOME="$HOME/.aws"
PATH="/usr/local/bin:/usr/bin:/bin:$PATH"
DATE=`date +%c`
aws ec2 create-snapshot --volume-id XXXXXXXX \
--description "${DATE}" \
--profile hjpotter92 \
--region "us-west-2" >> /home/hjpotter92/cron.out 2>&1
请注意,虽然我的上面的脚本是可执行的(x
权限位设置),但我仍然为它提供shell名称。
问题是,您对命令有字符串/变量插值问题。
此外,/bin/sh
没有很多其他shell提供的功能。更改脚本的head部分以使用bash(?)。
#!/bin/bash
now=$(date +"%Y-%m-%d-%H-%M-%S")
cd /home/ubuntu
aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier "testrds:${now}" >> some-log.txt
答案 1 :(得分:0)
我得到了同样的错误,我发现提供aws cli的完整路径解决了这个问题(因为我在hjpotter回答的路径不同)。
#!/bin/sh
HOME="/home/ubuntu"
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
d=$(date +"%Y-%m-%d-%H-%M")
/home/ubuntu/.local/bin/aws rds create-db-snapshot --db-instance-identifier myid --db-snapshot-identifier prod-scheduled-$d
由于AWS每天只创建一次RDS快照,我的要求是每天以固定的时间表创建几个快照,从cronjob发出(例如,早上6点,上午10点,下午2点,下午6点,晚上10点)。
所以,保持"合理"费用,我还添加了删除所有" cron"昨天拍摄的快照:
y=$(date -d "1 day ago" +"%Y-%m-%d-%H-%M")
aws rds delete-db-snapshot --db-snapshot-identifier prod-scheduled-$y
这样我可以每天保留一个快照用于历史目的,并且可以保留最近24小时的快照,以防我需要缩短间隙。
虽然这不是问题的一部分,但卢克·彼得森对此进行评论是成本过高的,也许其他人也有同样的要求(就像我一样)。
最后,使用Restore to a point in time功能可以实现类似的(和AFAIK清理器)解决方案,该功能使用每日快照和事务日志将db-instance恢复到自定义的特定日期和时间(在备份保留期限。)