この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
IAM編の次はEC2編です。IAM編についてはまだ制覇して無いですがその辺は緩やかに色々なサービスをつまみ食いしながらと言う事で。
- AWS Command Line Interface
- aws/aws-cli
- Amazon EC2 (仮想サーバー Amazon Elastic Compute Cloud) | アマゾン ウェブ サービス(AWS 日本語)
EC2(Elastic Compute Cloud)
awscliでec2のコマンドを見てみましょう。唯一、1サービスで『全部の候補を表示しますか?』と聞かれます。それもそのはず、利用可能な機能は何と149個!数の多さに思わず怯んでしまいますが(笑)、要素別に整理して少しずつ試してみようと思います。
$ aws ec2
Display all 149 possibilities? (y or n)
activate-license delete-network-acl-entry describe-volume-status
allocate-address delete-network-interface describe-volumes
assign-private-ip-addresses delete-placement-group describe-vpc-attribute
associate-address delete-route describe-vpcs
associate-dhcp-options delete-route-table describe-vpn-connections
associate-route-table delete-security-group describe-vpn-gateways
attach-internet-gateway delete-snapshot detach-internet-gateway
attach-network-interface delete-spot-datafeed-subscription detach-network-interface
attach-volume delete-subnet detach-volume
attach-vpn-gateway delete-tags detach-vpn-gateway
authorize-security-group-egress delete-volume disable-vgw-route-propagation
authorize-security-group-ingress delete-vpc disassociate-address
bundle-instance delete-vpn-connection disassociate-route-table
cancel-bundle-task delete-vpn-connection-route enable-vgw-route-propagation
cancel-conversion-task delete-vpn-gateway enable-volume-io
cancel-export-task deregister-image get-console-output
cancel-reserved-instances-listing describe-account-attributes get-password-data
cancel-spot-instance-requests describe-addresses import-instance
confirm-product-instance describe-availability-zones import-key-pair
copy-image describe-bundle-tasks import-volume
copy-snapshot describe-conversion-tasks modify-image-attribute
create-customer-gateway describe-customer-gateways modify-instance-attribute
create-dhcp-options describe-dhcp-options modify-network-interface-attribute
create-image describe-export-tasks modify-snapshot-attribute
create-instance-export-task describe-image-attribute modify-volume-attribute
create-internet-gateway describe-images modify-vpc-attribute
create-key-pair describe-instance-attribute monitor-instances
create-network-acl describe-instance-status purchase-reserved-instances-offering
create-network-acl-entry describe-instances reboot-instances
create-network-interface describe-internet-gateways register-image
create-placement-group describe-key-pairs release-address
create-reserved-instances-listing describe-licenses replace-network-acl-association
create-route describe-network-acls replace-network-acl-entry
create-route-table describe-network-interface-attribute replace-route
create-security-group describe-network-interfaces replace-route-table-association
create-snapshot describe-placement-groups report-instance-status
create-spot-datafeed-subscription describe-regions request-spot-instances
create-subnet describe-reserved-instances reset-image-attribute
create-tags describe-reserved-instances-listings reset-instance-attribute
create-volume describe-reserved-instances-offerings reset-network-interface-attribute
create-vpc describe-route-tables reset-snapshot-attribute
create-vpn-connection describe-security-groups revoke-security-group-egress
create-vpn-connection-route describe-snapshot-attribute revoke-security-group-ingress
create-vpn-gateway describe-snapshots run-instances
deactivate-license describe-spot-datafeed-subscription start-instances
delete-customer-gateway describe-spot-instance-requests stop-instances
delete-dhcp-options describe-spot-price-history terminate-instances
delete-internet-gateway describe-subnets unassign-private-ip-addresses
delete-key-pair describe-tags unmonitor-instances
delete-network-acl describe-volume-attribute
$
このエントリで試すのは、中心的サービスEC2の更に核となる要素、『インスタンス』に関するもの。インスタンスに関するものは以下の15個。
run-instances
describe-instances
start-instances
stop-instances
reboot-instances
terminate-instances
monitor-instances
unmonitor-instances
bundle-instance
import-instance
describe-instance-status
report-instance-status
describe-instance-attribute
modify-instance-attribute
reset-instance-attribute
EC2:インスタンス(instance)に関する操作
run-instances
EC2インスタンスを作成、起動します。作成及び起動の際には、イメージID(image-id)が必要です。でもその情報ってどこから?
EC2を使い始めの頃とか、ハンズオンとかでは割とClassic Wizardから選ぶ事が多いと思いますが、ここで選択した時点で所定のAMIであり、AMIに紐付くimage-idを指定している事になる訳ですね。
『Quick Launch Wizard』を使うと、もっと手軽に利用したい環境のAMIを調べる事が出来ます。『More Amazon Machine Images AMI』を選択し、次へ。
次の画面にて、種類やフリーワード等で使いたいAMIのimage-idを知る事が出来ます。ひとまずここでは、『Amazon Linux AMI 2013.03.1』のimage-idを使う事にしましょう。
コマンド実践例。image-idと作成・起動時の起動数の設定については必須となっているようです。
$ aws ec2 run-instances --image-id ami-39b23d38 --min-count 1 --max-count 1
{
"OwnerId": "XXXXXXXXXXXX",
"ReservationId": "r-f4fc3ff6",
"ResponseMetadata": {
"RequestId": "9a8782d8-7fe0-4891-b344-0cb1d8efb765"
},
"Groups": [
{
"GroupName": "default",
"GroupId": "sg-ad2556ac"
}
],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"KernelId": "aki-44992845",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2013-07-12T17:20:16.000Z",
"ProductCodes": [],
"StateTransitionReason": null,
"InstanceId": "i-8490db86",
"ImageId": "ami-39b23d38",
"PrivateDnsName": null,
"SecurityGroups": [
{
"GroupName": "default",
"GroupId": "sg-ad2556ac"
}
],
"ClientToken": null,
"InstanceType": "m1.small",
"NetworkInterfaces": [],
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1a"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "paravirtual",
"RootDeviceType": "ebs",
"AmiLaunchIndex": 0
}
]
}
上記では最低限の引数で作成・起動しましたが、ヘルプを見ると非常に細やかな設定での実行が可能となっています。
SYNOPSIS
aws ec2 run-instances
--image-id <value>
--min-count <value>
--max-count <value>
[--key-name <value>]
[--security-groups <value>]
[--security-group-ids <value>]
[--user-data <value>]
[--instance-type <value>]
[--placement <value>]
[--kernel-id <value>]
[--ramdisk-id <value>]
[--block-device-mappings <value>]
[--monitoring <value>]
[--subnet-id <value>]
[--disable-api-termination ]
[--instance-initiated-shutdown-behavior <value>]
[--license <value>]
[--private-ip-address <value>]
[--client-token <value>]
[--additional-info <value>]
[--network-interfaces <value>]
[--iam-instance-profile <value>]
[--ebs-optimized ]
作成・起動したEC2インスタンスの内容を見てみると、"Name"欄がEmptyの状態になっています。ここは分り易く何か設定したいですね。いずれ改めて後述しますが、『create-tags』コマンドでTag情報を追加する事が出来ます。
$ aws ec2 create-tags --resources i-8490db86 --tags '[{"key": "Name", "value": "EC2-AWSCLI-TEST"}]'
{
"return": "true",
"ResponseMetadata": {
"RequestId": "96392cd4-3179-4cb4-9c9a-9da930445a8b"
}
}
コマンド実行後再確認。ちゃんと変更されました。
describe-instances
アカウントに紐付くEC2インスタンスの一覧を取得します。またインスタンスIDを指定した場合、所定のインスタンス情報を取得します。
$ aws ec2 describe-instances | jq '.Reservations[].Instances[].Tags[].Value'
"AWS-Study-EC2"
"ec2-test"
"ec2-creation-test"
"EC2-AWSCLI-TEST"
$ aws ec2 describe-instances --instance-ids i-8490db86 | jq '.'
{
"ResponseMetadata": {
"RequestId": "6ddf59a4-9282-42e2-bda8-4009b8d9f87c"
},
"Reservations": [
{
"Instances": [
{
"AmiLaunchIndex": 0,
"Tags": [
{
"Key": "Name",
"Value": "EC2-AWSCLI-TEST"
}
],
"VirtualizationType": "paravirtual",
"RootDeviceName": "/dev/sda1",
"KernelId": "aki-44992845",
"Architecture": "x86_64",
"BlockDeviceMappings": [
{
"Ebs": {
"AttachTime": "2013-07-12T17:20:20.000Z",
"VolumeId": "vol-5e3feb7b",
"DeleteOnTermination": true,
"Status": "attached"
},
"DeviceName": "/dev/sda1"
}
],
"Hypervisor": "xen",
"Placement": {
"AvailabilityZone": "ap-northeast-1a",
"GroupName": null,
"Tenancy": "default"
},
"NetworkInterfaces": [],
"PrivateIpAddress": "10.152.134.243",
"PublicIpAddress": "54.250.99.46",
"LaunchTime": "2013-07-12T17:20:16.000Z",
"EbsOptimized": false,
"State": {
"Name": "running",
"Code": 16
},
"RootDeviceType": "ebs",
"PublicDnsName": "ec2-54-250-99-46.ap-northeast-1.compute.amazonaws.com",
"Monitoring": {
"State": "disabled"
},
"ProductCodes": [],
"StateTransitionReason": null,
"InstanceId": "i-8490db86",
"ImageId": "ami-39b23d38",
"PrivateDnsName": "ip-10-152-134-243.ap-northeast-1.compute.internal",
"SecurityGroups": [
{
"GroupId": "sg-ad2556ac",
"GroupName": "default"
}
],
"ClientToken": null,
"InstanceType": "m1.small"
}
],
"Groups": [
{
"GroupId": "sg-ad2556ac",
"GroupName": "default"
}
],
"ReservationId": "r-f4fc3ff6",
"OwnerId": "317282958305"
}
]
}
start-instances
EC2インスタンスを開始します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 start-instances --instance-ids i-8490db86
stop-instances
EC2インスタンスを停止します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 stop-instances --instance-ids i-8490db86
reboot-instances
EC2インスタンスを再起動します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 reboot-instances --instance-ids i-8490db86
terminate-instances
EC2インスタンスを終了/消去させます。
$ aws ec2 terminate-instances --instance-ids i-8490db86
bundle-instance
(ネタ的に長くなりそうなのでこのコマンドは別エントリにて後日対応したいと思います。)
import-instance
(ネタ的に長くなりそうなのでこのコマンドは別エントリにて後日対応したいと思います。)
EC2:モニター(monitor)に関する操作
monitor-instances
実行中のインスタンスのモニタリング機能を有効にします。
$ aws ec2 monitor-instances --instance-ids i-6a8ec568
{
"InstanceMonitorings": [
{
"InstanceId": "i-6a8ec568",
"Monitoring": {
"State": "pending"
}
}
],
"ResponseMetadata": {
"RequestId": "e35d2504-f223-4853-9750-05cd1333867a"
}
}
モニタリングに関しては以下の情報を参照。以下『Enabled Detailed Monitoring』ボタンを押下したのと同じアクションを実施する事になります。ちなみにこちらの詳細モニタリング、別途料金が発生致しますのでご注意。
Amazon CloudWatch (リソースとアプリケーションのモニタリング) | アマゾン ウェブ サービス(AWS 日本語)
unmonitor-instances
実行中のインスタンスのモニタリング機能を無効にします。上記操作を戻す形ですね。
$ aws ec2 unmonitor-instances --instance-ids i-6a8ec568
{
"InstanceMonitorings": [
{
"InstanceId": "i-6a8ec568",
"Monitoring": {
"State": "disabling"
}
}
],
"ResponseMetadata": {
"RequestId": "8875048b-c394-4fcd-931b-396e27781d0f"
}
}
EC2:インスタンスステータス(instance-status)に関する操作
describe-instance-status
EC2インスタンス情報のステータスを表示します。スケジュールされた2つの情報について知る事が出来ます。
- Rebootのスケジュール(system-reboot or instance-reboot)
- インスタンスのシャットダウン(instance-retirement)
$ aws ec2 describe-instance-status --instance-ids i-6a8ec568
[
{
"InstanceId": "i-6a8ec568",
"InstanceState": {
"Code": 16,
"Name": "running"
},
"AvailabilityZone": "ap-northeast-1a",
"SystemStatus": {
"Status": "ok",
"Details": [
{
"Status": "passed",
"Name": "reachability"
}
]
},
"InstanceStatus": {
"Status": "ok",
"Details": [
{
"Status": "passed",
"Name": "reachability"
}
]
}
}
]
report-instance-status
インスタンスのレポートを出力するコマンド?ヘルプ見る限りだと特に説明記述は無い模様。
ヘルプを見つつ実行してみます。ステータスを指定するところで実行は出来ました(true)が、特に結果は帰って来ていないみたい。どういう使い方するのかしら?これはひとまず保留としたいと思います。
ec2-report-instance-status - Amazon Elastic Compute Cloud
EC2:インスタンス属性情報(instance-attribute)に関する操作
describe-instance-attribute
インスタンスの属性値(attribute)に関する情報を取得。1回での呼び出しでインスタンスIDと属性1つを指定する必要があります。指定出来るのは以下。
- instanceType
- kernel
- ramdisk
- userData
- disableApiTermination
- instanceInitiatedShutdownBehavior
- rootDeviceName
- blockDeviceMapping
実行してみましたが、今イチ結果がおかしい?instanceTypeだけが得られると思っていたら、ひと通り結果が返って来て居たり(結果内容は微妙い)。
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute instanceType{
"UserData": {
"Value": "t1.micro"
},
"ResponseMetadata": {
"RequestId": "38704544-3dd8-4486-828c-0d17e18222bc"
},
"ProductCodes": [],
"InstanceId": "i-6a8ec568",
"InstanceInitiatedShutdownBehavior": {
"Value": "t1.micro"
},
"RootDeviceName": {
"Value": "t1.micro"
},
"EbsOptimized": {
"Value": false
},
"BlockDeviceMappings": [],
"KernelId": {
"Value": "t1.micro"
},
"RamdiskId": {
"Value": "t1.micro"
},
"DisableApiTermination": {
"Value": false
},
"InstanceType": {
"Value": "t1.micro"
}
}
ひと通り返ってくる結果の中から所定の内容のみ抽出して使ってください、という事であれば、データとしては抽出出来てそうです。
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'instanceType' | jq '.InstanceType'
{
"Value": "t1.micro"
}
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'disableApiTermination' | jq '.DisableApiTermination'
{
"Value": false
}
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'instanceInitiatedShutdownBehavior' | jq '.InstanceInitiatedShutdownBehavior'
{
"Value": "terminate"
}
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'rootDeviceName' | jq '.RootDeviceName'
{
"Value": "/dev/sda1"
}
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'userData' | jq '.UserData'
{
"Value": "IyEvYmluL2Jhc2ggLWV4CmVjaG8gJ2hlbGxvLCBlYzItd29ybGQhJw=="
}
modify-instance-attribute
インスタンスの属性値を変更します。instance-idと共に以下の属性キー、値を指定して変更する模様。
aws ec2 modify-instance-attribute
--instance-id <value>
[--attribute <value>]
[--value <value>]
[--block-device-mappings <value>]
[--source-dest-check <value>]
[--disable-api-termination <value>]
[--instance-type <value>]
[--kernel <value>]
[--ramdisk <value>]
[--user-data <value>]
[--instance-initiated-shutdown-behavior <value>]
[--groups <value>]
[--ebs-optimized <value>]
インスタンスタイプを変更してみます。元々t1.microでしたが...
コマンド実行で、
$ aws ec2 modify-instance-attribute --instance-id i-6a8ec568 --attribute instanceType --value m1.small
{
"return": "true",
"ResponseMetadata": {
"RequestId": "d554d17b-b84c-41fc-86a1-7ed1b905263a"
}
}
変更されました!
reset-instance-attribute
属性値情報のリセットを行います。しかしこのコマンド、現状ではkernel , ramdiskの2つしか対応していない模様です。
$ aws ec2 reset-instance-attribute --instance-id i-6a8ec568 --attribute kernel
{
"return": "true",
"ResponseMetadata": {
"RequestId": "fdfbe429-1a73-4712-a7a8-157fed59a5a6"
}
}