此文章參考了AWS中國(guó)區(qū)關(guān)于構(gòu)建自動(dòng)化EBS快照周期的官方文檔,參考鏈接“https://amazonaws-china.com/cn/blogs/china/construct-ebs-life-circle-management/” 本文與之不同的是,本文沒有使用dynamoDB服務(wù),僅通過lambda完成了EBS的快照備份。當(dāng)然,自動(dòng)快照一定要搭配自動(dòng)刪除功能使用,否則快照容量越來越大,無形中增加了企業(yè)的IT成本。
使用阿里云和騰訊云的平臺(tái)的時(shí)候,一直覺得自動(dòng)快照策略是云廠商最基本的功能,所以在接手aws云項(xiàng)目后還保持著這種思維定式。直到我負(fù)責(zé)的一個(gè)aws 云上項(xiàng)目遷移完畢后,真正開始做快照備份時(shí),才發(fā)現(xiàn)AWS 中國(guó)區(qū)平臺(tái)上并沒有創(chuàng)建快照策略的功能,而是要自己寫Lambda函數(shù),然后通過Cloudwatch event去觸發(fā)...此處省略1千字...
創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)青田,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
Key | Value | 說明 |
---|---|---|
Name | 用戶自定義 | 不能包含中文字符 |
Snapshot | Snapshot | 必須項(xiàng),且Key為Snapshot |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:CreateTags",
"ec2:ModifySnapshotAttribute",
"ec2:ResetSnapshotAttribute"
],
"Resource": [
"*"
]
}
]
}
點(diǎn)擊查看策略,可以看到該json文件是指定對(duì)EC2和Log服務(wù)的部分權(quán)限。輸入策略名稱lambda_ebs_snapshot和描述后點(diǎn)擊保存。
step2、創(chuàng)建角色
選擇受信任的實(shí)體為(lambda)--->設(shè)置策略為(lambda_ebs_snapshot)--->創(chuàng)建標(biāo)簽--->輸入角色名稱和描述后點(diǎn)擊保存。注意:此處的信任實(shí)體必須選擇lambda,否則后續(xù)使用該角色調(diào)用lambda函數(shù)時(shí)會(huì)發(fā)生權(quán)限未認(rèn)證的錯(cuò)誤。
- 3、創(chuàng)建函數(shù)
step1、進(jìn)入lambda控制臺(tái),點(diǎn)擊左側(cè)函數(shù),點(diǎn)擊右上角的新建函數(shù)。
進(jìn)入到創(chuàng)建函數(shù)頁面,輸入函數(shù)名稱為my_ebs_snapshots、和運(yùn)行平臺(tái)Python3.6、權(quán)限這里選擇現(xiàn)有角色、點(diǎn)擊現(xiàn)有角色,選擇剛才創(chuàng)建的角色lambda_ebs_snapshots,點(diǎn)擊創(chuàng)建。
step2、函數(shù)創(chuàng)建完成后,進(jìn)入到配置階段。
前面操作都無誤的情況下,此處可以看到我們的lambda函數(shù)對(duì)Log和EC2都有操作權(quán)限。
點(diǎn)擊下方在線編輯代碼,輸入自動(dòng)備份ebs快照的代碼。import boto3 import os,time from botocore.exceptions import ClientError from datetime import datetime, timedelta, timezone client = boto3.client('ec2') ec2 = boto3.resource('ec2') def lambda_handler(event, context): os.environ['TZ'] = 'Asia/Shanghai' time.tzset() i=time.strftime('%X %x %Z') # set volume id, get volume who has a tag-key is 'Snapshot' describe_volumes=client.describe_volumes( Filters=[ { 'Name': 'tag-key', 'Values': ['Snapshot', ] } ] ) volume_id_list = [] for vol in describe_volumes['Volumes']: volume_id_list.append(vol.get('VolumeId')) # set snapshot for volume_id in volume_id_list: volume = ec2.Volume(volume_id) for tags in volume.tags: if(tags.get('Key') == 'Name'): volume_name = tags.get('Value') description = volume_name + ' volume snapshot is created at ' + i try: response = client.create_snapshot( Description=description, VolumeId=volume_id) except: print('Create Snapshot occured error, Volume id is ' + volume_id) else: print('Snapshot is created succeed, Snapshot id is ' + response.get('SnapshotId'))
完成后,點(diǎn)擊添加。
step2、接下來開始配置CloudWatch log,點(diǎn)擊添加。
以上步驟均完成后,點(diǎn)擊右上角保存。
附:Lambda函數(shù)執(zhí)行日志
此處以保留6天快照數(shù)據(jù)為例,大家可以根據(jù)實(shí)際情況進(jìn)行測(cè)試和調(diào)整。my_ebs_snapshot_delete函數(shù)代碼如下:
import re
import boto3
import os,time
from botocore.exceptions import ClientError
from datetime import datetime, timedelta, timezone
client = boto3.client('ec2')
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
s=0
os.environ['TZ'] = 'Asia/Shanghai'
time.tzset()
# i=time.strftime('%X %x %Z')
i=time.strftime('%x %Z')
j=((datetime.now()-timedelta(days=7)).strftime('%x %Z'))
print (j)
# set volume id, get volume who has a tag-key is 'Snapshot'
describe_volumes=client.describe_volumes(
Filters=[
{
'Name': 'tag-key',
'Values': ['Snapshot',
]
}
]
)
volume_id_list = []
for vol in describe_volumes['Volumes']:
volume_id_list.append(vol.get('VolumeId'))
# set snapshot
for volume_id in volume_id_list:
volume = ec2.Volume(volume_id)
#print (volume_id)
for tags in volume.tags:
if(tags.get('Key') == 'Name'):
volume_name = tags.get('Value')
#description = volume_name + ' volume snapshot is created at ' + i
for snapshot in volume.snapshots.all():
match=re.findall(j,snapshot.description)
if match:
s=s+1
print(snapshot.description)
snapshot.delete()
print ('符合條件的快照個(gè)數(shù)為'+str(s))
為了便于測(cè)試函數(shù)執(zhí)行結(jié)果,建議大家在函數(shù)頁面內(nèi)配置測(cè)試事件,這樣就不需要頻繁修改觸發(fā)器來完成觸發(fā)了。
新聞標(biāo)題:利用lambda函數(shù)自動(dòng)創(chuàng)建EBS快照和刪除快照
URL網(wǎng)址:http://muchs.cn/article34/ghihse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、靜態(tài)網(wǎng)站、網(wǎng)站收錄、虛擬主機(jī)、網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)