【AWS】PowershellでGet-EC2Instanceコマンドで情報取得してみた

今回はPowershellでGet-EC2Instanceコマンドを使って EC2の情報を取得してみたいと思います。

「Get-EC2Instanceコマンドってどんな風に出力されるんだろう」と思っている方は ぜひ参考にしてください。

  • どんなことができるるようになるのか
  • Get-EC2Instanceコマンドの使い方
  • ある時間に起動していたらインスタンスを停止するよう設定してみた

どんなことができるるようになるのか

Get-EC2Instanceコマンドでは情報の取得を行うことができます。例えばEC2の起動状態やインスタンスタイプ、プラットフォーム、アタッチされているキャパシティ予約など様々な情報を取得できます。 スクリプトに組み込むことで、取得した情報とif文を使用し、起動中なら インスタンスを停止、キャパシティ予約で起動していなかった場合は通知を行うなどの 処理ができるようになります。

Get-EC2Instanceコマンドの使い方

それではさっそくやっていきましょう。 今回用意したサーバは以下になります。

Name インスタンス ID アベイラビリティーゾーン セキュリティグループ名 タグ
k-test02 i-XXXXXXXX350 ap-northeast-1a launch-wizard-10 Name:k-test02,管理者:kouchi
n-test i-XXXXXXXX390 ap-northeast-1d launch-wizard-11 Name:n-test,管理者:nagano

まずは一台目の情報を取得します。

PS> Get-EC2Instance -InstanceId i-XXXXXXXX350
GroupNames : {}
Groups : {}
Instances : {k-test02}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX44c

「-InstanceId」を指定しない場合、アカウント内のすべてのインスタンスの情報が取得されます。

PS> Get-EC2Instance
GroupNames : {}
Groups : {}
Instances : {k-test02}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX44c
GroupNames : {}
Groups : {}
Instances : {n-test}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX3b5

上記の「Instances」というのを指定するとさらに情報をえることができます。

PS>(Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances InstanceId InstanceType Platform PrivateIpAddress PublicIpAddress SecurityGroups SubnetId VpcId ———- ———— ——– —————- ————— ————– ——– —– i-XXXXXXXX350 t2.micro 172.31.35.27 {launch-wizard-10} subnet-4306ac0b vpc-c5d830a3

横長になってしまい、情報がすべて表示されていないので縦長にしましょうか。

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances | Format-List
AmiLaunchIndex : 0
Architecture : x86_64
BlockDeviceMappings : {/dev/xvda}
BootMode : uefi-preferred
CapacityReservationId :
CapacityReservationSpecification :
Amazon.EC2.Model.CapacityReservationSpecificationResponse
ClientToken : XXXXXXXX
CpuOptions :
Amazon.EC2.Model.CpuOptions CurrentInstanceBootMode : legacy-bios
EbsOptimized : False
ElasticGpuAssociations : {}
ElasticInferenceAcceleratorAssociations : {}
EnaSupport : True
EnclaveOptions :
Amazon.EC2.Model.EnclaveOptions HibernationOptions :
Amazon.EC2.Model.HibernationOptions Hypervisor : xen
IamInstanceProfile :
ImageId : ami-XXXXXXXX334
InstanceId : i-XXXXXXXX350
InstanceLifecycle :
InstanceType : t2.micro
Ipv6Address :
KernelId :
KeyName : k-test02
LaunchTime : 2023/09/08 0:00:42
Licenses : {}
MaintenanceOptions :
Amazon.EC2.Model.InstanceMaintenanceOptions MetadataOptions :
Amazon.EC2.Model.InstanceMetadataOptionsResponse Monitoring :
Amazon.EC2.Model.Monitoring NetworkInterfaces : {ip-XXXXXXXX.ap-northeast-1.compute.internal}
OutpostArn :
Placement :
Amazon.EC2.Model.Placement Platform :
PlatformDetails : Linux/UNIX
PrivateDnsName : ip-XXXXXXXX.ap-northeast-1.compute.internal
PrivateDnsNameOptions :
Amazon.EC2.Model.PrivateDnsNameOptionsResponse
PrivateIpAddress : XXXXXXXX
ProductCodes : {}
PublicDnsName :
PublicIpAddress :
RamdiskId :
RootDeviceName : /dev/xvda
RootDeviceType : ebs
SecurityGroups : {launch-wizard-10}
SourceDestCheck : True
SpotInstanceRequestId :
SriovNetSupport :
State :
Amazon.EC2.Model.InstanceState StateReason :
Amazon.EC2.Model.StateReason StateTransitionReason : User initiated (2023-09-07 15:08:20 GMT)
SubnetId : subnet-XXXXXXXX
Tags : {Name, 管理者}
TpmSupport :
UsageOperation :
RunInstances UsageOperationUpdateTime : 2023/09/08 0:00:42
VirtualizationType : hvm
VpcId : vpcXXXXXXXX Tag : {Name, 管理者}

特定の値を取得したい場合は、(Get-EC2Instance -InstanceId i-XXXXXXXX350).Instancesの後ろに取得したい値を付けます。

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.UsageOperation
RunInstances

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.SecurityGroups
GroupId GroupName
——- ———
sg-XXXXXXXX7c1 launch-wizard-10

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.SecurityGroups.GroupId
sg-XXXXXXXX7c1

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.Tag
Key Value
— —–
Name k-test02
管理者 kouchi

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.Tag.KeyName
管理者

Keyから値を取得したい場合はGet-EC2Tagを使用することもできます。

PS> Get-EC2Tag
Key ResourceId ResourceType Value
— ———- ———— —–
Name i-XXXXXXXXc350 instance k-test02
管理者 i-XXXXXXXXc350 instance kouchi
Name i-XXXXXXXX390 instance n-test
管理者 i-XXXXXXXX390 instance nagano

↓ResourceIdでフィルター

PS> Get-EC2Tag -Filter @{Name=”resource-id”;Values=”XXXXXXXX350″}
Key ResourceId ResourceType Value
— ———- ———— —–
Name XXXXXXXX350 instance k-test02
管理者 XXXXXXXX350 instance kouchi
↓さらにKeyを指定
PS> Get-EC2Tag -Filter @{Name=”resource-id”;Values=”XXXXXXXX350″},@{Name=”key”;Values=”管理者”}
Key ResourceId ResourceType Value
— ———- ———— —–
管理者 XXXXXXXX350 instance kouchi

↓Valueを取得

PS> (Get-EC2Tag -Filter @{Name=”resource-id”;Values=”XXXXXXXX350″},@{Name=”key”;Values=”管理者”}).Value

kouchi

Get-EC2Instanceの出力で「Amazon.EC2.Model」と書かれているものはさらにプロパティを指定できるようです。
PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.CapacityReservationSpecification
CapacityReservationPreference CapacityReservationTarget
—————————– ————————-
open

使い方のAWS公式ページは下記になります。 より詳細が知りたい方はぜひご覧ください。

・Get-EC2Instance Cmdlet https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html

・Get-EC2Tag Cmdlet https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Tag.html

ある時間に起動していたらインスタンスを停止するよう設定してみた

Get-EC2InstanceコマンドのInstances.State.Name.Valueプロパティからインスタンスの起動状態を確認できます。

参照:https://itpfdoc.hitachi.co.jp/manuals/3021/30213D0740/AOSR0482.HTM

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.State.Name.Value running

・スクリプト

$InstanceId = “i-XXXXXXXX350” $condition = (Get-EC2Instance -InstanceId $InstanceId).Instances.State.Name.Value # runningならインスタンスを停止するコマンド if ($condition = “running”){ Stop-EC2Instance -InstanceId $InstanceId }

上記のスクリプトをタスクスケジューラで毎日ある時間になると実行されるようにセットします。 これで設定は完了です。

実行が成功し、インスタンスが停止されました。コンソールからも「停止済み」になっていました。

PS> (Get-EC2Instance -InstanceId i-XXXXXXXX350).Instances.State.Name.Value stopped

本記事は以上になります。 情報をGet-EC2Instanceは情報を確認するだけでなく、スクリプトに組み入れたりすることで便利に使えるのでぜひ試してみてください。

AWS Certified Data Analytics Specialty (DAS)に1か月で合格したので勉強内容を話します。