🏥 病院の健康診断で例えると超わかりやすい!
CloudWatchは「病院の健康診断センター」のようなもの!
AWSの標準メトリクス = 基本的な健康診断(身長・体重・血圧)
カスタムメトリクス = あなた独自の検査項目
(コレステロール値、肝機能など)
でも検査結果を送るには
「許可証」
が必要ですよね?
その許可証が
cloudwatch:PutMetricData
という
IAMアクション
です!✨
🩺 病院のたとえ話で完全理解!
CloudWatch
= 健康診断センター
病院には「健康診断センター」がありますよね。
ここにすべての検査結果が集まり、医師が確認できます。
CloudWatchがまさにこれ!
CPU使用率やメモリ使用量など、あらゆる「健康状態」を監視・記録する場所です。
カスタムメトリクス
= 独自の検査項目
基本健診以外にも「腫瘍マーカー」「アレルギー検査」など
オプションで追加できる検査がありますよね。
カスタムメトリクスがこれ!
「ログイン回数」「カート追加数」「API応答時間」など
あなたのビジネスに特化した数値 を送れます。
PutMetricData
= 検査結果提出の許可証
検査結果を健康診断センターに提出するには
「この人は検査結果を提出していいよ」という許可証が必要です。
cloudwatch:PutMetricData
というIAMアクションがこれ!
この権限がないと、メトリクスを送信できません。
IAMポリシー
= 院内規則書
「誰が」「どの検査室に」「どんな検査結果を」提出できるか
を定めた院内規則書です。
IAMポリシーがまさにこれ!
「このEC2インスタンスは」「CloudWatchに」「メトリクスを送信できる」
という 許可ルール を定義します。
📚 3つの重要概念をマスター!
標準メトリクス
AWSが
自動で収集
してくれる基本的な数値。
EC2なら「CPU使用率」「ネットワークI/O」など。
追加料金なし
で利用可能!
カスタムメトリクス
あなたが
自分で送信
する独自の数値。
「アクティブユーザー数」「購入完了率」など
ビジネス指標
を監視できる!
PutMetricData
カスタムメトリクスを
送信する権限
。
このIAMアクションがないと
データを送れない!
必須の許可です。
🔄 カスタムメトリクス送信の流れ
独自の数値を計測
の許可を確認
メトリクスを送信
グラフ化・アラーム設定
「検査結果を提出しようとしたら、受付で門前払いされた」状態です。
エラーメッセージ例:
User: arn:aws:iam::123456789012:user/myuser is not authorized to perform: cloudwatch:PutMetricData
🔐 PutMetricData IAMアクション詳解
アクション名
cloudwatch:PutMetricData
CloudWatchサービスの「メトリクスデータを送信(Put)する」アクションです。
このアクションを許可しないと、カスタムメトリクスは一切送信できません。
リソース指定
リソースレベルの制限はできません
(Resource: "*" のみ)
これは「どの名前空間にでも送信できる」という意味です。
ただし、送信できるかどうかは
Action の許可/拒否
で制御します。
条件キー(Condition)での制限
cloudwatch:namespace
条件キーで
名前空間を制限
できます!
例:「MyApp/Production」名前空間にのみ送信を許可
これで他のチームのメトリクスに誤って上書きすることを防げます。
// カスタムメトリクス送信に必要な最小限のポリシー { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" } ] }
// 特定の名前空間にのみ送信を許可(ベストプラクティス) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": "MyApp/Production" } } } ] } // 複数の名前空間を許可する場合 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringLike": { "cloudwatch:namespace": "MyApp/*" } } } ] }
💼 実際のユースケース
ECサイト
• カート追加数
• 購入完了率
• 商品閲覧数
• 決済処理時間
MyECShop/Sales
MyECShop/Performance
ゲームアプリ
• 同時接続プレイヤー数
• マッチング待ち時間
• ガチャ実行回数
• 課金イベント数
MyGame/Players
MyGame/Monetization
SaaSアプリケーション
• アクティブユーザー数
• API呼び出し回数
• 機能利用率
• エラー発生率
MySaaS/Usage
MySaaS/Health
IoT・製造業
• センサー温度
• 機械稼働率
• 製品不良率
• エネルギー消費量
Factory/Sensors
Factory/Production
# pip install boto3 import boto3 from datetime import datetime # CloudWatchクライアントを作成 cloudwatch = boto3.client('cloudwatch') # カスタムメトリクスを送信 response = cloudwatch.put_metric_data( Namespace='MyApp/Production', # 名前空間(必須) MetricData=[ { 'MetricName': 'ActiveUsers', # メトリクス名 'Value': 150, # 値 'Unit': 'Count', # 単位 'Timestamp': datetime.utcnow(), # タイムスタンプ 'Dimensions': [ # ディメンション(任意) { 'Name': 'Environment', 'Value': 'Production' }, ], }, ] ) print('メトリクス送信成功!')
# 単一のメトリクスを送信 aws cloudwatch put-metric-data \ --namespace "MyApp/Production" \ --metric-name "ActiveUsers" \ --value 150 \ --unit "Count" # ディメンション付きで送信 aws cloudwatch put-metric-data \ --namespace "MyApp/Production" \ --metric-name "ResponseTime" \ --value 0.5 \ --unit "Seconds" \ --dimensions "Environment=Production,Service=API" # JSONファイルから複数のメトリクスを送信 aws cloudwatch put-metric-data \ --namespace "MyApp/Production" \ --metric-data file://metrics.json
IAMポリシーの Condition で
cloudwatch:namespace
を指定し、送信先を限定しましょう。
「MyApp/*」のようなワイルドカードも使えます。
EC2やLambdaには IAMロール を割り当て、アクセスキーのハードコーディングを避けましょう。
セキュリティと管理性が大幅に向上します。
put_metric_data
は1回の呼び出しで最大1,000個のメトリクスを送信できます。
APIコールを減らしてコストと効率を最適化しましょう。
送信失敗時のリトライロジックを実装しましょう。
一時的なネットワーク障害でデータが欠落するのを防げます。
カスタムメトリクスは課金対象です。送信頻度と保存期間を適切に設定し、
不要なメトリクスは削除しましょう。
🎓 まとめ
🏥 病院の健康診断 = CloudWatch
カスタムメトリクスを送信するには
「検査結果提出の許可証」
が必要です!
cloudwatch:
PutMetricData
カスタムメトリクス
送信の許可
名前空間で
アクセスを制限
カスタムメトリクス送信 =
cloudwatch:PutMetricData
が必須!
最小権限の原則を守り、
cloudwatch:namespace
条件で制限をかけよう!🎉