[アップデート] さらば名無しのスナップショット! 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 タグが一切付与されていないスナップショット」群を見て呆然としていた、かつての自分に教えてあげたいです。

以上、千葉(幸)がお送りしました。