この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
EC2編第3弾は『イメージ』に関してです。ちょっと準備を必要としたのでその辺もまとめて。
実践用のEC2準備
今回エントリの実践用に、適当なEC2を準備する事にします。まずはキーペアの作成。
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ aws ec2 create-key-pair --key-name aws-study-key
{
"KeyPair": {
"KeyMaterial": "-----BEGIN RSA PRIVATE KEY-----\nMII(中略)zWw+w==\n-----END RSA PRIVATE KEY-----",
"KeyName": "aws-study-key",
"KeyFingerprint": "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
}
}
そしてAMIを作成するベースとなる適当なEC2も作成。この際利用したセキュリティグループは、手動作成/HTTP及びSSHのポートを許可したセキュリティグループ(の登場)を利用しています。
$ aws ec2 run-instances --image-id ami-39b23d38 --min-count 1 --max-count 1 --key-name aws-study-key --security-group-ids sg-089de309
{
"OwnerId": "317282958305",
"ReservationId": "r-c8b25fcc",
"Groups": [
{
"GroupName": "sg_sshandhttp",
"GroupId": "sg-089de309"
}
],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"KernelId": "aki-44992845",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2013-07-22T06:54:38.000Z",
"ProductCodes": [],
"StateTransitionReason": null,
"InstanceId": "i-c6907cc2",
"ImageId": "ami-39b23d38",
"PrivateDnsName": null,
"KeyName": "aws-study-key",
"SecurityGroups": [
{
"GroupName": "sg_sshandhttp",
"GroupId": "sg-089de309"
}
],
"ClientToken": null,
"InstanceType": "m1.small",
"NetworkInterfaces": [],
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1c"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "paravirtual",
"RootDeviceType": "ebs",
"AmiLaunchIndex": 0
}
]
}
コンソール上でも識別出来るようにタグ情報も不可しておきます。
$ aws ec2 create-tags --resources i-c6907cc2 --tags '[{"key": "Name", "value": "EC2-ImageTest"}]'
{
"return": "true"
}
EC2にログイン。適当に環境を導入しておきます。
$ ssh -i aws-study-key.pem ec2-user@ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com (XX.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com,XX.XXX.XXX.XXX' (RSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/
There are 6 security update(s) out of 11 total update(s) available
Run "sudo yum update" to apply all updates.
$
$ sudo yum update -y
Apacheのインストール:
$ sudo yum install -y httpd
$ sudo chkconfig httpd on
Groovyのインストール:
$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.11.90) (amazon-62.1.11.11.90.55.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
$
$ vi .bash_profile
---------------------------
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin#PATH=$PATH:$HOME/bin
GROOVY_HOME=/home/ec2-user/groovy-2.1.6
PATH=$PATH:$GROOVY_HOME/bin
export PATH
---------------------------
$ source .bash_profile
$ groovy -v
Groovy Version: 2.1.6 JVM: 1.6.0_24 Vendor: Sun Microsystems Inc. OS: Linux
$
aws-cliのインストール:
$ python --version
Python 2.6.8
$ sudo easy_install pip
$ sudo pip install awscli
$ sudo pip install awscli --upgrade
$ complete -C aws_completer aws
$ vi .bash_profile
-------
export AWS_ACCESS_KEY_ID=<アクセスキーID>
export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>
export AWS_DEFAULT_REGION=ap-northeast-1
complete -C aws_completer aws
-------
$ source .bash_profile
$ aws --version
aws-cli/0.13.2 Python/2.6.8 Linux/3.4.43-43.43.amzn1.x86_64
jqのインストール:
$ sudo yum install -y jq
$ jq --version
jq version 1.2
イメージ(image)に関する操作
関連するコマンドは以下の8つ。
create-image
copy-image
describe-images
describe-image-attribute
modify-image-attribute
reset-image-attribute
register-image
deregister-image
create-image
"実行中"(running)若しくは"停止"(stopped)のインスタンスから、EBS-Backed AMIイメージを作成します。以下では上記で作成したEC2のinstance-idと、任意にAMIの名称を指定して実行しています。
$ aws ec2 stop-instances --instance-ids i-c6907cc2
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ aws ec2 create-image --instance-id i-c6907cc2 --name myFirstAMIImag
{
"ImageId": "ami-4d3bac4c"
}
copy-image
AMIイメージをコピーします。
$ aws ec2 copy-image --source-region ap-northeast-1 --source-image-id ami-4d3bac4c --name secondAmiImage
{
"ImageId": "ami-693bac68"
}
describe-images
関連するイメージ情報を表示します。
検索条件を指定しないと対象全件取りに行ってしまうので(その数8000件超)...
$ aws ec2 describe-images | jq '.[] | length'
1
8632
実利用の際はイメージID等で絞込みする必要がありそうです。
$ aws ec2 describe-images --image-ids ami-39b23d38
{
"Images": [
{
"VirtualizationType": "paravirtual",
"Name": "amzn-ami-pv-2013.03.1.x86_64-ebs",
"Hypervisor": "xen",
"ImageOwnerAlias": "amazon",
"ImageId": "ami-39b23d38",
"RootDeviceType": "ebs",
"State": "available",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1",
"Ebs": {
"DeleteOnTermination": true,
"SnapshotId": "snap-826a82a0",
"VolumeSize": 8,
"VolumeType": "standard"
}
}
],
"Architecture": "x86_64",
"ImageLocation": "amazon/amzn-ami-pv-2013.03.1.x86_64-ebs",
"KernelId": "aki-44992845",
"OwnerId": "137112412989",
"RootDeviceName": "/dev/sda1",
"Public": true,
"ImageType": "machine",
"Description": "Amazon Linux AMI x86_64 PV EBS"
}
],
"ResponseMetadata": {
"RequestId": "84dc89ca-efcf-4c93-aea1-cdc1defbedfe"
}
}
$
describe-image-attribute
イメージの属性値を表示します。
ヘルプを見ると、利用可能な属性(--attribute)は"productCodes","kernel","ramdisk","launchPermission","blockDeviceMapping"となっています。AMI LinuxのIDを使ってアクセスしてみます。
$ aws ec2 describe-image-attribute --image-id ami-39b23d38 --attribute productCodes
{
"ProductCodes": [],
"Errors": [
{
"Message": "Not authorized for image:ami-39b23d38",
"Code": "AuthFailure"
}
],
"Description": {},
"LaunchPermissions": [],
"ResponseMetadata": {
"RequestId": "84283a58-fc85-412c-8302-58e656371eee"
},
"BlockDeviceMappings": [],
"KernelId": {},
"RamdiskId": {}
}A client error (AuthFailure) occurred: Not authorized for image:ami-39b23d38
おや?エラーが。エラーメッセージで検索してみると『対象がpublicじゃないからなのでは?』みたいな事書いてますね。
インスタンスの属性値を見てみます…う〜む、(対象項目これで合ってるのならば)true、ですね…。属性値(pubilc)や権限で何か設定が必要なのでしょうか。引き続き調査の方向で。
$ aws ec2 describe-images --image-ids ami-39b23d38 | jq '.Images[].Public'
true
modify-image-attribute
AMIイメージに関する属性を編集します。
ヘルプによると編集出来る属性は限られている模様。この形で実行は出来ましたが…何がどう変わったのかな?ちょっとこの辺も保留。
$ aws ec2 modify-image-attribute --image-id ami-39b23d38 --attribute launchPermission --operation-type add
{
"return": "true",
"ResponseMetadata": {
"RequestId": "4214ce14-4371-457e-a4c9-9bc1a89cfb9f"
}
}
reset-image-attribute
所定のイメージ属性情報をリセットします。
使い方的にはmodify-image-attributeと同じようですが、こちらも同様にエラーが出てしまいますね...
]$ aws ec2 reset-image-attribute --image-id ami-39b23d38 --attribute launchPermission
{
"Errors": [
{
"Message": "Not authorized for image:ami-39b23d38",
"Code": "AuthFailure"
}
],
"ResponseMetadata": {
"RequestId": "ae1057f8-7cef-45b2-9f21-ceb9a36f1181"
}
}
A client error (AuthFailure) occurred: Not authorized for image:ami-39b23d38
register-image
EC2(環境)にAMIイメージを登録します。イメージは起動前に登録する必要があります。詳しくはRunInstanceの項を参照。それぞれのAMIは、AmazonEC2サービスのresiser-image操作によって提供される一意のIDに関連付けられます。
登録時、AmazonEC2はS3から指定された、イメージのマニフェストを取得しイメージを登録したユーザーが所有している事を検証します。S3イメージへの変更作業は、この登録情報を無効にしてしまいます。イメージを変更した場合は、以前のイメージを削除し、新しく登録し直してください。詳細についてはDeregisterImageの項を参照。
deregister-image
AMIを登録解除します。一旦登録解除されてしまうと、AMIのインスタンスは実行される事は無くなります。
※register-image/deregister-imageについては長くなりそうなので別エントリにて。