AMIの作成時間を測定したいので、色々調べて見た。
- AWSにはAMI作成に関してイベントが提供なし
- スナップショットを作成イベント (createSnapshots)より時間を測定できれば、それでもOK、SnapshotからAMIを作成の時間を短いですから
アーキテクチャ
下記はcreateSnapshotsイベントから着手、1から説明する
SNSトピックとサブスクリプション作成
snapshot-topic トピック作成
ARNをメモしておく(arn:aws:sns:ap-northeast-1:123456789012:snapshot-topic)
サブスクリプションからの確認メールからリンクをクリックして、SNSの配置完成
Lambda関数作成
注意点:
LambdaからSNSを呼び出すので、SNS発行可能なロールを新規作成。
ソースは下記となり。
import boto3
def lambda_handler(event, context):
result = event['detail']['result']
snapshotId = ",".join(event['resources'])
startTime = event['detail']['startTime']
endTime = event['detail']['endTime']
client = boto3.client('sns')
sns_response = client.publish(
TopicArn="arn:aws:sns:ap-northeast-1:123456789012:snapshot-topic",
Message=('SNS のスナップショットが作成されました。\n詳細は以下です。\n\n結果:'
+ result
+ '\nスナップショットID:'
+ snapshotId
+ '\n作成開始時間:'
+ startTime
+ '\n作成終了時間:'
+ endTime
+ '\n\n'),
Subject='demo-SnapshotCreateTime'
)
return sns_response
CloudWatchEventsを設定
注意:イベントタイプは下記に選択
EBS Multi-Volume snapshots completion status
JSON
{
"source": [
"aws.ec2"
],
"detail-type": [
"EBS Multi-Volume Snapshots Completion Status"
],
"detail": {
"event": [
"createSnapshots"
],
"result": [
"succeeded",
"failed"
]
}
}
試してみる
EC2配下、
ELASTIC BLOCK STORE配下の「スナップショットの作成」をクリック
最後に
この記事が誰かのお役に立てば幸いです
##参考資料
AMIの作成時間が知りたかったのでSNS Topicで通知させてみた
https://dev.classmethod.jp/articles/ami-create-time-sns/
説明の方法にはAMIの作成時間を測定できなく、一つEBSのスナップショットのみ測定しかない。
EBS スナップショットイベント
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-cloud-watch-events.html#snapshot-events
create-snapshots CLIヘルパー
https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshots.html
スナップショットを作成 (createSnapshots)
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-cloud-watch-events.html#create-snapshots-complete