PowerShell 批量打開 EC2 Termination Protection

同事前兩天打算重啓一個EC2 實例,結果手滑點到了 Termination,而後EC2 就悲劇了。幸虧有Snapshot備份,服務器掛了15分鐘以後 成功的恢復了。服務器

能夠看見 reboot和terminate靠的十分近,因此爲了不悲劇再次發生,咱們須要打開 termination protection
PowerShell 批量打開 EC2 Termination Protectionide

若是隻有幾臺EC2,能夠手動點開,如圖所示code

PowerShell 批量打開 EC2 Termination Protection

可是若是不少的話,仍是寫腳本實現方便一些blog

下面是PowerShell實現的操做。ip

function Scan-EC2(){

    Write-Host "Checking EC2 instance Tags status" -ForegroundColor Yellow

    $all=Get-EC2Instance | select -expand instances

    # confirm EC2 instances were tagged

    $result=@()
    foreach($item in $all){

        $Name=$item.tag | Where-Object {$_.Key -eq 'Name'} | select -ExpandProperty value
        $clinic=$item.tag | Where-Object {$_.Key -eq 'clinic'} | select -ExpandProperty value
        $terminationprotection=Get-EC2InstanceAttribute -InstanceId $item.instanceid -Attribute disableApiTermination | select -ExpandProperty DisableApiTermination
        $sg=$item.securitygroups.groupname
        $item | add-member -NotePropertyName Description -NotePropertyValue $name
        $item | add-member -NotePropertyName Clinic -NotePropertyValue $clinic
        $item | add-member -NotePropertyName sg -NotePropertyValue $sg
        $item | add-member -NotePropertyName TerminationProtection -NotePropertyValue $terminationprotection
        $item = $item | select *
        $result+=$item

    }

    $result | select Description, InstanceId, InstanceType,privateIpaddress, Clinic,@{n='Status';e={$_.state.name}},sg, TerminationProtection 
}

$result=Scan-EC2

foreach($one in $result){
if($one.terminationprotection -eq $false){

    Edit-EC2InstanceAttribute -InstanceId $one.instanceid -DisableApiTermination $true

}

}

$result=Scan-EC2 | Out-GridView

輸出結果顯示都成功的變成True了
PowerShell 批量打開 EC2 Termination Protectionit

能夠經過計劃任務按期執行,這樣就不用擔憂無心中把重要的服務器給刪掉了。io

相關文章
相關標籤/搜索