這兩天我都在看如何使用Lambda和Python,但是平常更習(xí)慣使用PowerShell來管理各種系統(tǒng)。試試看如何在Lambda里面使用PowerShell吧。
專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)蓮湖免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
首先在本地計算機上需要安裝下面三個模塊。
安裝PowerShell Core
https://github.com/powershell/powershell
安裝 the .NET Core Software Development Kit (SDK)
https://www.microsoft.com/net/download
安裝 AWSLambdaPSCore module
Install-Module AWSLambdaPSCore -Scope CurrentUser
安裝好了,在Powershell6的控制臺 里面執(zhí)行
New-AWSPowerShellLambda -ScriptName awstag -Template basic
他會自動根據(jù)basic的模板創(chuàng)建一個目錄,里面用一個空白的ps文件,和一個readme文件。這個空白的ps文件自動加載了powershellcore的模塊,如果我們需要添加其他的模塊,需要在這里修改。下面是我的一個測試腳本。這個腳本主要的功能是檢查tag,確保EC2,Volume和Snapshot都有對應(yīng)的tag,因為每個月我需要通過tag來顯示不同診所的賬單。另外如果snapshot如果超過60天,順便也自動給我刪除了。
# PowerShell script file to be executed as a AWS Lambda function.
#
# When executing in Lambda the following variables will be predefined.
# $LambdaInput - A PSObject that contains the Lambda function input data.
# $LambdaContext - An Amazon.Lambda.Core.ILambdaContext object that contains information about the currently running Lambda environment.
#
# The last item in the PowerShell pipeline will be returned as the result of the Lambda function.
#
# To include PowerShell modules with your Lambda function, like the AWSPowerShell.NetCore module, add a "#Requires" statement
# indicating the module and version.
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.335.0'}
# Uncomment to send the input event to CloudWatch Logs
# Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
Write-Host "Checking EC2 instance Tags status" -ForegroundColor Yellow
$all=Get-EC2Instance | select -expand instances
$return=$all | Where-Object {$_.tag.key -notcontains "Clinic"}
if($return -ne $null){
$username = "test@abc.com"
$password = "Passwordtest" | ConvertTo-SecureString -asPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
$id=$return.InstanceId
Send-MailMessage -From test@abc.com -to test@abc.com -SmtpServer smtp.office365.com -Port 587 -UseSsl -Subject "EC2 instance Tag" -body "$id" -Credential $credential
exit
}
# 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
$item | add-member -NotePropertyName Description -NotePropertyValue $name
$item | add-member -NotePropertyName Clinic -NotePropertyValue $clinic
$item = $item | select *
$result+=$item
}
$result | select Description, InstanceId, privateIpaddress, Clinic | Group-Object Clinic
write-host "Updating Volume Tags Status ... " -ForegroundColor Yellow
#Tag all volumes based on their attached EC2 Clinic Tag
$allvol=Get-EC2Volume | Where-Object {$_.tag.key -notcontains "Clinic"}
foreach($item in $result){
foreach($item2 in $allvol){
if ($item2.attachments.instanceid -eq $item.InstanceId){
$value=$item.Clinic
New-EC2Tag -Resource $item2.VolumeId -Tag @{Key="Clinic";value=$value}
}
}
}
Write-Host "Updating Snapshot Tags Status..." -ForegroundColor Yellow
#Tag all snapshots based on the volume Tag
$allvol=Get-EC2Volume
$filter= New-Object Amazon.EC2.Model.Filter -Property @{Name = "owner-id"; Values ='386115804199' }
$snapshots=Get-EC2Snapshot -Filter $filter
$snapshots1= $snapshots | ? {$_.Tag.key -notcontains "Clinic"}
foreach($i in $snapshots1){
$volid=$i.VolumeId
foreach($j in $allvol){
if($volid -eq $j.Volumeid){
$value=$j.tag | Where-Object {$_.key -eq 'Clinic'} | select -ExpandProperty value
$name=$j.Tag | Where-Object {$_.key -eq "Name"} | select -ExpandProperty value
$snapid=$i.snapshotid
write-host "--$snapid--"
New-EC2Tag -Resource $snapid -Tag @{Key="Clinic";value=$value}
New-EC2Tag -Resource $snapid -Tag @{Key="Name";value=$name}
}
}
}
write-host "Deleting Snapshots older than over 60 days !" -ForegroundColor Yellow
$date=(get-date).AddDays(-40)
foreach($snapshot in $snapshots){
$id=$snapshot.snapshotid
if($snapshot.starttime -lt $date){
$snapshot
Remove-EC2Snapshot -SnapshotId $id -Confirm:$false
}
}
接下來在Powershell6 的控制臺執(zhí)行,他會自動綁定iam的role,壓縮相關(guān)的模塊和執(zhí)行腳本,然后上傳到Lambda的控制臺。這里的iam role我是隨便寫的,允許訪問ec2和 cloudwatch log。
Publish-AWSPowerShellLambda -ScriptPath .\awstag.ps1 -name awstag -iamrole 'ec2fullaccess' -Region ap-southeast-2
等個1分鐘,登錄aws 就可以看見上傳的函數(shù)了。
代碼這一塊不像Python能直接看見,直接告訴你太大 沒法顯示 但是我可以直接調(diào)用
測試一下試試,顯示成功
去對應(yīng)的cloudwatch 看看
Done!
網(wǎng)站標(biāo)題:AWSLambda自動化和PowerShell
瀏覽地址:http://www.rwnh.cn/article42/pcojhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、商城網(wǎng)站、域名注冊、網(wǎng)站導(dǎo)航、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)