為了定時起機器跑DB備份到S3就研究了一陣…
memo一下怕忘記XD
IAMRole設置
這邊使用IAMRole套用到需要執行bash的instance上
以及cronjob設定的instance上
寫在一起方便示範,需要更高安全性請再創建一個Role套用cronjob的EC2
因為指定Resource了,所以權限就全開,如果要設定更細也可以自行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:*", #權限 "ec2:*" #權限 ], "Resource": [ "arn:aws:s3:::bucketName", "arn:aws:s3:::bucketName/*", "arn:aws:ec2:ap-northeast-1:123456789:instance/i-098475ud29485f77" ] } ] }
|
UserData設定
可以參照官方文件
不過我第一次設的時候怎麼設定都失敗就google了一個很微妙的魔改範例
然後變成只有初次啟動才會執行的樣子orz
下面這個是直接請support幫我修正過的正常執行範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0
--// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config cloud_final_modules: - [scripts-user, always]
--// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash /home/ec2-user/sqlbackup/run.sh # 請把您要執行的命令都放在這裡 --//
|
EC2 Bash測試
這也是問support提供的測試範例XD
run看看如果這段正常執行就是ok了,記得要把sh檔改成755
(我是用777
…怕奇怪狀況發生XD)
1 2 3 4 5 6
| #!/bin/bash echo "====== API Call =====" >> /api_call.out date >> /api_call.out echo "====== API Call Start =====" >> /api_call.out aws ec2 stop-instances --instance-ids i-098475ud29485f77 --region ap-northeast-1 >> /api_call.out echo "====== API Call End =====" >> /api_call.out
|
Cronjob 設定
如果要用cronjob跑的話記得用完整路徑
直接使用aws cli xxxx 好像不會跑
1
| 0 4 * * 1-5 /usr/bin/aws ec2 start-instances --instance-ids i-098475ud29485f77 >/dev/null 2>&1
|
補充
cli中指定region的話可以無視config裡面的設定
例如剛起起來的新機器沒設config並套用role,就可以適用
如果需要多組credentials那就必須要在 .aws/credentials
下新增多組profile
參照官方文件
並在cli執行時指定profile
如果是套用role就可以建一個空的profile指定使用
Reference
How can I execute user data to automatically create a file with every restart of my Amazon EC2 instance?
命名配置文件
環境變數