亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用lambda函數自動創建EBS快照和刪除快照

發布時間:2020-08-01 11:51:49 來源:網絡 閱讀:454 作者:baby麥子 欄目:云計算

利用lambda函數自動創建EBS快照和刪除快照

此文章參考了AWS中國區關于構建自動化EBS快照周期的官方文檔,參考鏈接“https://amazonaws-china.com/cn/blogs/china/construct-ebs-life-circle-management/” 本文與之不同的是,本文沒有使用dynamoDB服務,僅通過lambda完成了EBS的快照備份。當然,自動快照一定要搭配自動刪除功能使用,否則快照容量越來越大,無形中增加了企業的IT成本。

使用阿里云和騰訊云的平臺的時候,一直覺得自動快照策略是云廠商最基本的功能,所以在接手aws云項目后還保持著這種思維定式。直到我負責的一個aws 云上項目遷移完畢后,真正開始做快照備份時,才發現AWS 中國區平臺上并沒有創建快照策略的功能,而是要自己寫Lambda函數,然后通過Cloudwatch event去觸發...此處省略1千字...

  • 創建/刪除快照的步驟:為需要打快照的EBS磁盤打上tag---->創建策略和運行lamda函數的角色---->創建函數---->添加觸發器和日志

快照創建自動化


  • 1、對需要做快照的 EBS 卷打上標簽,標簽至少要有兩組;
Key Value 說明
Name 用戶自定義 不能包含中文字符
Snapshot Snapshot 必須項,且Key為Snapshot
  • 2、創建策略和角色
    step1:進入IAM控制臺,創建策略,選擇json格式并輸入如下字符串(代表該賬號對EC2有查看信息和操作快照的功能)
    利用lambda函數自動創建EBS快照和刪除快照
    {
    "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": [
                "*"
            ]
        }
    ]
    }

點擊查看策略,可以看到該json文件是指定對EC2和Log服務的部分權限。輸入策略名稱lambda_ebs_snapshot和描述后點擊保存。
利用lambda函數自動創建EBS快照和刪除快照
step2、創建角色
選擇受信任的實體為(lambda)--->設置策略為(lambda_ebs_snapshot)--->創建標簽--->輸入角色名稱和描述后點擊保存。

注意:此處的信任實體必須選擇lambda,否則后續使用該角色調用lambda函數時會發生權限未認證的錯誤。
  • 3、創建函數
    step1、進入lambda控制臺,點擊左側函數,點擊右上角的新建函數。
    利用lambda函數自動創建EBS快照和刪除快照進入到創建函數頁面,輸入函數名稱為my_ebs_snapshots、和運行平臺Python3.6、權限這里選擇現有角色、點擊現有角色,選擇剛才創建的角色lambda_ebs_snapshots,點擊創建。
    利用lambda函數自動創建EBS快照和刪除快照
    step2、函數創建完成后,進入到配置階段。
    前面操作都無誤的情況下,此處可以看到我們的lambda函數對Log和EC2都有操作權限。
    利用lambda函數自動創建EBS快照和刪除快照
    點擊下方在線編輯代碼,輸入自動備份ebs快照的代碼。
    利用lambda函數自動創建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'))
  • 4、創建觸發器
    step1、點擊左側CloudWatch Event,開始配置。如下表示每天晚上23:00開始觸發執行函數。
    利用lambda函數自動創建EBS快照和刪除快照

完成后,點擊添加。
step2、接下來開始配置CloudWatch log,點擊添加。
利用lambda函數自動創建EBS快照和刪除快照

以上步驟均完成后,點擊右上角保存。

附:Lambda函數執行日志
利用lambda函數自動創建EBS快照和刪除快照

快照刪除自動化


此處以保留6天快照數據為例,大家可以根據實際情況進行測試和調整。my_ebs_snapshot_delete函數代碼如下:

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 ('符合條件的快照個數為'+str(s))

為了便于測試函數執行結果,建議大家在函數頁面內配置測試事件,這樣就不需要頻繁修改觸發器來完成觸發了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临泉县| 霍林郭勒市| 新绛县| 呼和浩特市| 德惠市| 高碑店市| 昌江| 宣汉县| 夏邑县| 黄骅市| 无棣县| 时尚| 合肥市| 红河县| 吐鲁番市| 泗洪县| 即墨市| 田东县| 沅陵县| 乐山市| 江门市| 长沙市| 双桥区| 浠水县| 社旗县| 石城县| 濮阳县| 扎赉特旗| 海原县| 玉门市| 宣恩县| 嘉定区| 基隆市| 新密市| 伊宁市| 神农架林区| 乐清市| 玉树县| 临城县| 秭归县| 镇原县|