mcpField
C
cloud-monitoring-notification-channels-configuration

cloud-monitoring-notification-channels-configuration

github.com/googleクラウド・DevOps21.6k678 回インストール今日更新
リポジトリ

cloud-monitoring-notification-channels-configuration について

Google Cloud Monitoring の通知チャネルを設定するスキルです。Terraform による監視設定を生成またはデプロイするユーザー向けに、チャネル種別、認証情報、権限、コマンドの帰属表示を含む手順を定めています。

主な機能

  1. 01通知チャネルの Terraform 設定生成
  2. 02複数のチャネル種別に対応
  3. 03アラートポリシーへのチャネル追加
  4. 04認証情報とクラウド要件の確認

活用シーン

  1. 01Monitoring アラート用チャネルの作成
  2. 02既存チャネルのアラートポリシーへの追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/google/skills --skill cloud-monitoring-notification-channels-configuration

インストール後、Claude Code で/cloud-monitoring-notification-channels-configurationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
secret.tfvars
references/
attribution.md
email.md
pagerduty.md
pubsub.md
slack.md
sms.md
webhook.md
scripts/
verify_pubsub_topic.sh

詳細

Cloud Monitoring 通知チャネルの構成

帰属情報

必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、必ず使用状況の帰属情報をお読みください。ターミナルで直接実行するコマンド(生成されたスクリプト、Terraform、ユーザーコード内での実行は不可)では、gcloud の前に CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration)" を付け、User-Agent ヘッダーに agent-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration) を追加してください。

提供されるコンテキスト

  • Terraform のみ:生成するオブザーバビリティ設定は、Terraform(例:notification_channels.tf)ファイルのみで記述します。

    • チャンネルのデプロイを依頼されており、かつ有効な Terraform のインストールがない場合に限り、Terraform をインストールします。
    • チャンネルのデプロイを依頼されていない場合は、Terraform をインストールしないでください。
  • 作業ディレクトリの推定:次の順序で .tf ファイルの配置先パスを決定します。

    1. ユーザーがパスを指定した場合は、その正確なパスに .tf ファイルを配置します。
    2. パスが指定されていない場合は、ワークスペース内の既存の .tf ファイルを検索します(google_monitoring_notification_channel または google_monitoring_alert_policy リソースをすでに定義しているファイルを優先し、既存ディレクトリについては優先順位を厳守して monitoring/、次に ops/、次に sre/ の順に確認します)。 見つかった場合は、そのディレクトリに notification_channels.tf を作成します(既存のリソースを変更する場合は、既存の .tf ファイルを更新します)。
    3. パスが指定されておらず、ワークスペースに .tf ファイルも配置先ディレクトリも存在しない場合は、monitoring/notification_channels.tf を作成して書き込みます。
  • Google Cloud の前提条件:gcloud CLI の検出コマンドを実行する場合、または Google Cloud プロジェクトに対して terraform CLI で設定をデプロイする場合は、次の前提条件を順番に満たしてください(ユーザーが Terraform HCL の生成または表示のみを求めている場合、これらのコマンドは実行しないでください)。

    1. 対象のプロジェクト ID とプロジェクト番号:
      • ユーザーの依頼、または gcloud config get-value project を使って対象の Google Cloud {project_id} を特定します。どちらでも取得できない場合は、続行する前にユーザーに {project_id} の提示を求めます。
      • Google Cloud のプロジェクト番号({project_number})が必要な場合(Pub/Sub チャンネル用の Cloud Monitoring Service Agent ID の構成など)は、次の方法を使用します。
        • 方法 A(標準):gcloud projects describe {project_id} --format='value(projectNumber)' を実行します。
        • 方法 B(ユーザーへの確認):コマンドが失敗する場合、またはプロジェクト番号を取得できない場合は、ユーザーに提示を求めます。
    2. 認証:gcloud auth login で gcloud CLI を認証し、Terraform 用に gcloud auth application-default login で Application Default Credentials(ADC)を設定します。
    3. プロジェクトの設定と請求:gcloud config set project {project_id} で対象の Google Cloud プロジェクトを設定し、プロジェクトに有効な請求先アカウントが紐付いていることを確認します。
      • 復旧対応:gcloud config set project {project_id} または gcloud projects describe {project_id} が失敗した場合は、gcloud auth list で有効な認証情報を確認し、gcloud projects list でアクセス可能なプロジェクトを一覧表示するか、ユーザーにプロジェクト ID とアクセス権限の確認を求めます。請求先アカウントが存在しない、または無効であるためにデプロイが失敗した場合は、デプロイを中止し、再試行する前に有効な請求先アカウントをリンクするようユーザーに案内します(gcloud billing projects link {project_id} --billing-account={account_id} を実行するか、Google Cloud コンソールで設定します)。
    4. IAM 権限:プリ定義済みの Monitoring NotificationChannel Editor ロール(roles/monitoring.notificationChannelEditor。既存のアラートポリシーにチャンネルを追加する場合は、さらに roles/monitoring.alertPolicyEditor)または、同等の権限(monitoring.notificationChannels.get、monitoring.notificationChannels.list、monitoring.notificationChannels.create、monitoring.notificationChannels.update、monitoring.notificationChannels.delete、およびアラートポリシーを更新する場合は monitoring.alertPolicies.get / monitoring.alertPolicies.update)を含むカスタム IAM ロールによって、プリンシパルに通知チャンネルを管理する権限があることを確認します。
      • 復旧対応:これらの権限を付与するカスタムロールを持つユーザーには、プリ定義済みロール名は必要ありません。gcloud または terraform コマンドが PERMISSION_DENIED(HTTP 403)で失敗した場合は、実行を中止し、不足している monitoring.notificationChannels.* または monitoring.alertPolicies.* 権限を特定して、プロジェクト管理者に、プリンシパルへの roles/monitoring.notificationChannelEditor(または必要な権限を含むカスタムロール)の付与を依頼するようユーザーに案内します。
  • 検出のヒント:

    • 通知チャンネルの一覧表示:通知チャンネルを一覧表示するには、必ず gcloud beta monitoring channels list --project={project_id} を使用してください。通知チャンネルの一覧表示に、他の gcloud コマンドを使用しないでください。
    • Pub/Sub トピックの確認:Pub/Sub 通知チャンネルを設定する際は、scripts/verify_pubsub_topic.sh {monitoring_project_id} {topic_name_or_path} を実行して、次の項目を確認します。
      1. トピックのプロジェクトで Pub/Sub API(pubsub.googleapis.com)が有効になっていること(同一プロジェクト内のトピックと、projects/{topic_project_id}/topics/{topic_name} で指定されたクロスプロジェクトのトピックの両方に対応しています)。
      2. トピックが存在し、監視対象プロジェクトの Cloud Monitoring Service Agent(service-{monitoring_project_number}@gcp-sa-monitoring-notification.iam.gserviceaccount.com)が、トピックまたはトピックのプロジェクトで roles/pubsub.publisher を保持していること。
      3. トピックにメッセージ保存ポリシー(messageStoragePolicy / message_storage_policy)が定義されておらず、転送中の適用(enforceInTransit / enforce_in_transit)が有効になっていないこと。メッセージ保存ポリシーが定義されているトピックや、転送中の制限が適用されるトピックは、通知チャンネルとして使用しないでください。Cloud Monitoring はそのようなトピックにメッセージを配信できません。
  • アトリビューション:以下で作成、変更、またはユーザーに提案する、該当するすべてのコマンドと Terraform リソースに、必ずタグを付けてください。

    • Terraform HCL(user_labels):

      • 作成するすべての google_monitoring_notification_channel リソースで、 user_labels ブロックに created-with-google-skill ラベルを含める必要があります。

        user_labels = {
          created-with-google-skill = "cloud-monitoring-notification-channels-configuration"
        }
        
      • 通知チャンネルを追加する目的だけで既存の google_monitoring_alert_policy リソースを 変更する場合は、created-with-google-skill を使用しないでください (このスキルはアラートポリシーを作成していないためです)。代わりに、 ポリシーに既存の user_labels がある場合はそれを保持したうえで、 user_labels ブロックに added-channel-with-google-skill ラベルを含めてください。

        user_labels = {
          added-channel-with-google-skill = "cloud-monitoring-notification-channels-configuration"
        }
        
    • 使用する CLI ツールに応じて、以下の手順に従ってください。

      • gcloud: すべての gcloud 呼び出しの先頭に、メトリクス用の 環境変数を付けてください。各コマンドにインラインで設定してください。 コマンド間でシェルの状態が保持されない場合があります。

        CLOUDSDK_METRICS_ENVIRONMENT="google-skills google-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration)" \
            gcloud <command> [flags]
        
      • 直接 HTTP 呼び出し: curl などで直接 HTTP 呼び出しを行う場合は、 シェルコマンドの構文で、明示的な -H "User-Agent: ..." ヘッダーを次の例と まったく同じ形式で渡す必要があります。

        curl -H "User-Agent: google-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration)" ...
        
      • Terraform: すべての Terraform の plan と apply 呼び出しの先頭に、 メトリクス用の環境変数を付けてください。各コマンドにインラインで設定してください。 コマンド間でシェルの状態が保持されない場合があります。例:

        GOOGLE_TERRAFORM_USERAGENT_EXTENSION="google-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration)" \
            terraform plan [flags]
        
    • スキルの手順に追加のスキルスクリプト名が記載されている場合は、 アトリビューションラベルにそのスクリプト名を含めてください。たとえば、 scripts/verify_pubsub_topic.sh 内で gcloud コマンドを 使用する場合は、次のようになります。

      CLOUDSDK_METRICS_ENVIRONMENT="google-skills google-skills/1.0 (skill:cloud-monitoring-notification-channels-configuration; script:verify_pubsub_topic)" \
          gcloud <command> [flags]
      
  • 実行時の注意(状態更新のタイムアウトからの復旧): terraform plan または terraform apply を実行する際は、コマンドのタイムアウトを 120 seconds に設定してください。 コマンドが 120 秒以内に完了しない場合(通常の実行ではなく、大きな状態ファイル全体の更新で Terraform が 停滞していることを示します)、コマンドをキャンセルし、作成または更新する特定のリソースに -target を指定して terraform plan と terraform apply を実行し、最大 1 回だけ再試行してください (例: -target=google_monitoring_notification_channel.<resource_name>。アラートポリシーも更新する場合は、 -target=google_monitoring_alert_policy.<policy_name> も指定します)。対象を絞った再試行も 120 秒で タイムアウトするか失敗した場合は、再試行しないでください。実行を停止し、タイムアウトまたはエラーを ユーザーに報告してください。

生成

入力時の前提条件(チェックリスト)
  • 通知チャネルの種類:新しい通知チャネルを作成するときは、ユーザーは設定する通知チャネルの種類を必ず指定する必要があります。
    • 種類が指定されていない場合(また、ユーザーが既存の通知チャネルをアラートポリシーに追加しようとしている場合を除く)、続行する前に種類を確認する必要があります。
  • 機密情報を含む認証情報ファイル:通知チャネルによっては、設定に機密性の高い認証情報が必要です。作業ディレクトリに secret.tfvars ファイルがあることを必ず確認してください。ファイルが存在しない場合は、assets/secret.tfvars にあるテンプレートを使用して作成し、認証情報はそのファイルに保存するようユーザーに伝えてください。
実行手順
  1. ユーザーが設定を希望する通知チャネルに対応するリファレンスファイルを開きます。

    通知チャネルの種類リファレンスファイル
    emailemail.md
    smssms.md
    slackslack.md
    pubsubpubsub.md
    pagerdutypagerduty.md
    webhookwebhook.md
  2. Prerequisites セクションにガイドラインがある場合はそれに従い、チャネル設定に必要な要件をすべて満たします。

  3. リファレンスファイルの Specification 内に Required Credentials セクションがある場合は、記載されている必須の認証情報が secret.tfvars ファイルで設定されていることを必ず確認します。

    • 認証情報の値が空、またはファイル内に見つからない場合は、先に進む前にユーザーに入力を求める必要があります。
  4. リファレンスファイルの Specification 内にある Terraform HCL セクションのテンプレートを使用し、必要に応じて指定された変数を置き換えて、新しい設定を出力ファイルに書き込みます。ユーザーが通知チャネルの display_name を明示的に指定した場合は、既定の "<Type> Notification Channel (...)" テンプレート文字列ではなく、その文字列をそのまま display_name に設定します。

  5. 既存のアラートポリシーへのチャネル追加:新しいチャネルを作成せず、既存の google_monitoring_notification_channel リソースを使用するよう既存の google_monitoring_alert_policy リソースを変更する場合は、google_monitoring_alert_policy ブロックに notification_channels を設定し、その user_labels ブロックで added-channel-with-google-skill ラベルを "cloud-monitoring-notification-channels-configuration" に設定します(既存の user_labels は保持してください)。

    notification_channels = [
      google_monitoring_notification_channel.<channel_resource_name>.name,
    ]
    user_labels = {
      added-channel-with-google-skill = "cloud-monitoring-notification-channels-configuration"
    }
    
出力と形式

すべてのチャネル設定を、#context-provided セクションで指定されたディレクトリ内の notification_channels.tf ファイルに書き込みます(または、既存の google_monitoring_alert_policy に通知チャネルを追加する場合は、対象の .tf ファイルを更新します)。生成するすべての google_monitoring_notification_channel リソースの user_labels で created-with-google-skill を "cloud-monitoring-notification-channels-configuration" に設定し、変更するすべての google_monitoring_alert_policy リソースの user_labels で added-channel-with-google-skill を "cloud-monitoring-notification-channels-configuration" に設定してください。


関連リンク

コメント