今回は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 |
まずは一台目の情報を取得します。
GroupNames : {}
Groups : {}
Instances : {k-test02}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX44c
「-InstanceId」を指定しない場合、アカウント内のすべてのインスタンスの情報が取得されます。
GroupNames : {}
Groups : {}
Instances : {k-test02}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX44c
GroupNames : {}
Groups : {}
Instances : {n-test}
OwnerId : XXXXXXXXXXXX
RequesterId :
ReservationId : r-XXXXXXXXXXXX3b5
上記の「Instances」というのを指定するとさらに情報をえることができます。
横長になってしまい、情報がすべて表示されていないので縦長にしましょうか。
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の後ろに取得したい値を付けます。
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を使用することもできます。
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でフィルター
Key ResourceId ResourceType Value
— ———- ———— —–
Name XXXXXXXX350 instance k-test02
管理者 XXXXXXXX350 instance kouchi
PS> Get-EC2Tag -Filter @{Name=”resource-id”;Values=”XXXXXXXX350″},@{Name=”key”;Values=”管理者”}
Key ResourceId ResourceType Value
— ———- ———— —–
管理者 XXXXXXXX350 instance kouchi
↓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
・スクリプト
上記のスクリプトをタスクスケジューラで毎日ある時間になると実行されるようにセットします。 これで設定は完了です。
実行が成功し、インスタンスが停止されました。コンソールからも「停止済み」になっていました。
本記事は以上になります。 情報をGet-EC2Instanceは情報を確認するだけでなく、スクリプトに組み入れたりすることで便利に使えるのでぜひ試してみてください。
AWS Certified Data Analytics Specialty (DAS)に1か月で合格したので勉強内容を話します。