IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Shell Script自動建立AWS AMI Image備份

    阿維发表于 2014-07-28 15:32:14
    love 0
    [okbox]我已經將這個shell script放上github,方便維護與更新 https://github.com/henrychen95/AWS-AMI-Auto-Backup [/okbox] 使用AWS的時候,建立AMI Image算是一個不錯的備份方式,下面我分享使用AWS內建的指令來進行備份

    必備條件

    [ssbluelist]
    • 必須安裝AWS tools,可以使用 yum install aws* 來進行安裝所有需要的套件。
    • 請確認你的AWS tools路徑,預設會是在/opt/aws/bin,如果你的路徑不相同,請修改Shell Script的第二行。
    • 請確認你的EC2_HOME路徑,可以使用 env | grep EC2_HOME 來確認。
    • 請確認你的JAVA_HOME路徑,可以使用 env | grep JAVA_HOME 來確認。
    • 請建立適當權限的IAM Role,並且在啟動instance的時候加入IAM Role。如果你對於IAM Role不熟悉,可以建立admin IAM Role來快速使用。
    [/ssbluelist]

    這個Shell Script可以設定以下變數

    [ssbluelist]
    • region: 填入要備份的region
    • instanceID: 填入要備份的instance
    • amiNamePrefix: 填入你希望使用的AMI名稱
    • amiDescription: 填入你希望使用的AMI描述
    • routine: 如果設定為true,那麼會在amiNamePrefix後面加上Mon, Tue…這樣的文字來當作AMI名稱,並且會保留7天的備份
    [/ssbluelist] [ideabox]這個shell script會刪除舊的AMI和snapshot來節省空間[/ideabox]
    #!/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin
    
    # Please use env | grep EC2_HOME to find out your system's setting
    EC2_HOME=/opt/aws/apitools/ec2
    
    # Please use env | grep JAVA_HOME to find out your system's setting
    JAVA_HOME=/usr/lib/jvm/jre
    
    export EC2_HOME JAVA_HOME
    
    # Regions reference: http://docs.aws.amazon.com/general/latest/gr/rande.html
    region="ap-northeast-1"
    
    # You can find your instance ID at AWS Manage Console
    instanceID="YOUR-INSTANCE-ID"
    
    # Your prefer AMI Name prefix
    amiNamePrefix="AMI_"
    
    # Your prefer AMI Description
    amiDescription="Daily AMI backup"
    
    # If you want to keep 7 days AMI backups, please set routine true otherwise set it false
    routine=true
    
    # Variable for routine is true
    weekday=$(date +%a)
    
    if [ $routine = true ]; then
        # Setup AMI Name
        amiName=$amiNamePrefix$weekday
    
        # Get AMI ID
        amiIDs=$(ec2-describe-images --region $region | grep 'ami-[a-z0-9]' | grep "$amiName" |cut -f 2)
    
        # Get Snapshot ID
        if [[ ! -z $amiIDs ]]; then
            snapshotIDs=$(ec2-describe-snapshots --region $region | grep $amiIDs | cut -f 2)
        fi
    else
        # Setup AMI Name
        amiName=$amiNamePrefix
    
        # Get AMI ID
        amiIDs=$(ec2-describe-images --region $region | grep 'ami-[a-z0-9]' | cut -f 2)
    
        # Get Snapshot ID
        if [[ ! -z $amiIDs ]]; then
            snapshotIDs=$(ec2-describe-snapshots --region $region | cut -f 2)
        fi
    fi
    
    if [[ ! -z $amiIDs ]]; then
        # Deregister AMI
        for amiID in $amiIDs
        do
            ec2-deregister --region $region $amiID
        done
    
        # Delete snapshot
        for snapshotID in $snapshotIDs
        do
            ec2-delete-snapshot --region $region $snapshotID
        done
    fi
    
    # Create AMI
    ec2-create-image $instanceID --region $region --name "$amiName" -d "$amiDescription" --no-reboot
    
    [ssbluelist]
    • 我們可以把這個shell script存成/root/createAMI.sh
    • 然後執行 chmod 755 /root/createAMI.sh
    • 接著新增一筆排程,就可以自動進行AMI的備份
    [/ssbluelist]


沪ICP备19023445号-2号
友情链接