AWS 通過成本分配標簽來查看賬單
阿新 • • 發佈:2019-02-08
write 好的 ber oca chm 關聯 oss obj mod 公司的AWS上運行了很多不同的服務,EC2,S3,VPC等等,他們屬於20多個不同的診所。之前的管理員並沒有進行很好的Tag,因此每個月底的賬單都只能看見一大堆總的開支,具體到每個服務,每個診所很難確定具體的開支,結果就是所有的開支都從IT部門的預算走的,而不是分攤到實際的各個診所上去。
為了解決這個問題,可以對每個服務都進行自定義的Tag標簽,然後在Cost Allocation Tag的控制臺裏激活自定義的標簽,一天之後,就可以在Billing賬單裏面根據自己定義的標簽來過濾查詢了。
比如說,為了區分診所,我定義了一個Tag,key是Clinic,value就是每個診所的名字了
因為我有上百個volume和上千個Snapshot,豆子寫了個簡單的PowerShell腳本來添加標簽。EC2實例上手動添加了對應的標簽,然後根據EC2關聯的volume添加Tag,再通過volume來關聯snapshot添加Tag
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 = "[email protected]" $password = "password" | ConvertTo-SecureString -asPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($username,$password) Send-MailMessage -From [email protected] -to [email protected] -SmtpServer smtp.office365.com -Port 587 -UseSsl -Subject "EC2 instance Tag" -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 "Done !" -ForegroundColor Yellow 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 =‘xxxxxxx‘ } $snapshots=Get-EC2Snapshot -Filter $filter $snapshots= $snapshots | ? {$_.Tag.key -notcontains "Clinic"} foreach($i in $snapshots){ $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 $snapid New-EC2Tag -Resource $snapid -Tag @{Key="Clinic";value=$value} New-EC2Tag -Resource $snapid -Tag @{Key="Name";value=$name} } } } write-host "Done !" -ForegroundColor Yellow
執行之後大概是這樣, 確認工作之後把他放到任務計劃裏面自動跑就行了
然後過了24小時,登錄billing的控制臺,根據Tag來分類,就可以看見每個診所的開支記錄了
AWS 通過成本分配標簽來查看賬單