如何使用crontab每分钟运行AWS CLI命令

时间:2017-08-17 11:21:56

标签: shell amazon-web-services cron amazon-rds

我有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

2 个答案:

答案 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恢复到自定义的特定日期和时间(在备份保留期限。)

相关问题