AWS EC2 使用UserData每次重啟instance執行bash

為了定時起機器跑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?

命名配置文件

環境變數