[アップデート] さらば名無しのスナップショット! AMI の作成時にイメージとスナップショットにタグ付けができるようになりました!
コンバンハ、千葉(幸)です。
AMI を作成する際に、一緒にタグ付けをできるようになりました!
一度作成してから後追いでタグをつける……という操作から解放されますね!
何が変わったのか
冒頭の繰り返しとなりますが、 AMI の作成時にタグを付けられるようになりました。 AMI に紐づくスナップショットに対しても同様にタグ付け可能です。
AMI とスナップショットに同じタグを付けることもできれば、それぞれ固有のものを指定することもできます。
少し勘違いしてしまったのですが、「ベースとなる EC2 および EBS と同じものをつける」という指定はできません。
(少し前に AWS Backup がそのような機能に対応していたのでそれと混同してしまいました。もちろん明示的に同じ値を指定すればタグ付けは可能です。「同じ値でコピーさせる」ということができないだけです。)
作成時のタグ付けに対応したことで、後追いでのタグ付けを行う必要がなくなりました。手動で AMI 作成を行う場合にはタグの付け忘れから解放されますし、スクリプトを使用している際には叩く API が一度で済むようになります。
Name タグを忘れて判別がしづらくなったり、タグベースのアクセスコントロールをしている際にうっかりその対象外となってしまう、ということが起こりづらくなりました。
Amazon EC2 リソースのタグ付けサポート
こちらのドキュメントに、Amazon EC2 サービスに属するリソースのタグ付けのサポート状況が載っています。
そもそもタグが付けられるかと、リソースの作成時にタグを付けられるかを表したものです。
今回のアップデートで AMI が作成時のタグ付けに対応しました。現状「タグは付けられるが作成時には付けられない」というリソースも、今後のアップデートで対応していくかもしれませんね。
リソース | タグ付け | 作成時のタグ付け |
---|---|---|
AFI | 対応 | 対応 |
AMI | 対応 | 対応 New! |
Bundle task | 非 対応 | 非 対応 |
Capacity Reservation | 対応 | 対応 |
Carrier gateway | 対応 | 対応 |
Client VPN endpoint | 対応 | 対応 |
Client VPN route | 非 対応 | 非 対応 |
Customer gateway | 対応 | 対応 |
Dedicated Host | 対応 | 対応 |
Dedicated Host Reservation | 対応 | 対応 |
DHCP option | 対応 | 対応 |
EBS snapshot | 対応 | 対応 |
EBS volume | 対応 | 対応 |
EC2 Fleet | 対応 | 対応 |
Egress-only internet gateway | 対応 | 対応 |
Elastic IP address | 対応 | 非 対応 |
Elastic Graphics accelerator | 対応 | 非 対応 |
Instance | 対応 | 対応 |
Instance store volume | 該当なし | 該当なし |
Internet gateway | 対応 | 対応 |
IP address pool (BYOIP) | 対応 | 対応 |
Key pair | 対応 | 対応 |
Launch template | 対応 | 対応 |
Launch template version | 非 対応 | 非 対応 |
Local gateway | 対応 | 非 対応 |
Local gateway route table | 対応 | 非 対応 |
Local gateway virtual interface | 対応 | 非 対応 |
Local gateway virtual interface group | 対応 | 非 対応 |
Local gateway route table VPC association | 対応 | 対応 |
Local gateway route table virtual interface group association | 対応 | 非 対応 |
NAT gateway | 対応 | 対応 |
Network ACL | 対応 | 対応 |
Network interface | 対応 | 対応 |
Placement group | 対応 | 対応 |
Prefix list | 対応 | 対応 |
Reserved Instance | 対応 | 非 対応 |
Reserved Instance listing | 非 対応 | 非 対応 |
Route table | 対応 | 対応 |
Spot Fleet request | 対応 | 対応 |
Spot Instance request | 対応 | 対応 |
Security group | 対応 | 対応 |
Subnet | 対応 | 対応 |
Traffic Mirror filter | 対応 | 対応 |
Traffic Mirror session | 対応 | 対応 |
Traffic Mirror target | 対応 | 対応 |
Transit gateway | 対応 | 対応 |
Transit gateway route table | 対応 | 対応 |
Transit gateway VPC attachment | 対応 | 対応 |
Virtual private gateway | 対応 | 対応 |
VPC | 対応 | 対応 |
VPC endpoint | 対応 | 対応 |
VPC endpoint service | 対応 | 対応 |
VPC endpoint service configuration | 対応 | 対応 |
VPC flow log | 対応 | 対応 |
VPC peering connection | 対応 | 対応 |
VPN connection | 対応 | 対応 |
やってみた(マネジメントコンソール)
早速試してみましょう。
まずはマネジメントコンソールからです。
EC2 のコンソールからインスタンスを選択し、 [ アクション ] -> [ イメージとテンプレート ] -> [ イメージを作成 ] を選択します。
イメージの作成画面の中に、タグ付けに関するオプションが追加されています。以下の2パターンがあります。
- イメージとスナップショットに対し一緒にタグを付けます
- イメージとスナップショットに対し個別にタグを付けます
今回は「イメージとスナップショットに対し個別にタグを付けます」のパターンで試してみます。
イメージ用とスナップショット用でそれぞれタグを指定し、[ イメージを作成 ] を押下します。
作成が開始された段階で、タグ付けがなされています。
AMI に紐づくスナップショットにも指定したタグ付けがされています。
便利ですね。
やってみた(AWS CLI)
AWS CLI を使用するパターンも試してみます。
2020/12/8時点で、 AWS CLI v2 ではリファレンスに記載がなかったため対応していないようでした。
AWS CLI v1 で試してみます。
以下のような書式で指定します。
aws ec2 create-image \ --instance-id <value> \ --name <value> \ --tag-specifications 'ResourceType=image,Tags=[{Key=string,Value=string}]' 'ResourceType=snapshot,Tags=[{Key=string,Value=string}]'
AWS CLI v1 のバージョンを最新にして試してみます。
$ aws --version aws-cli/1.18.190 Python/2.7.18 Linux/4.14.203-156.332.amzn2.x86_64 botocore/1.19.30
以下のように指定して実行しました。
aws ec2 create-image \ --instance-id i-xxx8992d87f175f68 \ --name test-ami2 \ --region ap-northeast-1 \ --tag-specifications \ 'ResourceType=image,Tags=[{Key=Name,Value=image-20201208-2},{Key=Env,Value=prod}]' \ 'ResourceType=snapshot,Tags=[{Key=Name,Value=snapshot-20201208-2},{Key=Env,Value=prod}]' { "ImageId": "ami-xxx0f120a941e83da" }
AMI にきちんと指定したタグが付けられています。
aws ec2 describe-images \ --region ap-northeast-1 \ --image-ids ami-xxx0f120a941e83da \ | jq '.Images[].Tags' [ { "Value": "image-20201208-2", "Key": "Name" }, { "Value": "prod", "Key": "Env" } ]
スナップショットのタグも確認します。--filters
オプションで description に 当該 AMI ID を持つものをフィルタリングしています。
aws ec2 describe-snapshots \ --region ap-northeast-1 \ --filters Name=description,Values=*ami-xxx0f120a941e83da* \ | jq '.Snapshots[].Tags' [ { "Value": "prod", "Key": "Env" }, { "Value": "snapshot-20201208-2", "Key": "Name" } ]
こちらにもきちんとタグがついていますね。
終わりに
AMI 作成時にイメージとスナップショットにタグ付けできるというアップデートでした。
手動で作成する時もツールで作成する時も両方助かるアップデートですね。特に対象となる AMI の数が多い場合には、 API を実行する回数が減らせて嬉しいかと思います。
数百個の「 Name タグが一切付与されていないスナップショット」群を見て呆然としていた、かつての自分に教えてあげたいです。
以上、千葉(幸)がお送りしました。