cloud-monitoring-notification-channels-configuration
cloud-monitoring-notification-channels-configuration について
Google Cloud Monitoring の通知チャネルを設定するスキルです。Terraform による監視設定を生成またはデプロイするユーザー向けに、チャネル種別、認証情報、権限、コマンドの帰属表示を含む手順を定めています。
主な機能
- 01通知チャネルの Terraform 設定生成
- 02複数のチャネル種別に対応
- 03アラートポリシーへのチャネル追加
- 04認証情報とクラウド要件の確認
活用シーン
- 01Monitoring アラート用チャネルの作成
- 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.tfvarsreferences/attribution.mdemail.mdpagerduty.mdpubsub.mdslack.mdsms.mdwebhook.mdscripts/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ファイルの配置先パスを決定します。- ユーザーがパスを指定した場合は、その正確なパスに
.tfファイルを配置します。 - パスが指定されていない場合は、ワークスペース内の既存の
.tfファイルを検索します(google_monitoring_notification_channelまたはgoogle_monitoring_alert_policyリソースをすでに定義しているファイルを優先し、既存ディレクトリについては優先順位を厳守してmonitoring/、次にops/、次にsre/の順に確認します)。 見つかった場合は、そのディレクトリにnotification_channels.tfを作成します(既存のリソースを変更する場合は、既存の.tfファイルを更新します)。 - パスが指定されておらず、ワークスペースに
.tfファイルも配置先ディレクトリも存在しない場合は、monitoring/notification_channels.tfを作成して書き込みます。
- ユーザーがパスを指定した場合は、その正確なパスに
-
Google Cloud の前提条件:
gcloudCLI の検出コマンドを実行する場合、または Google Cloud プロジェクトに対してterraformCLI で設定をデプロイする場合は、次の前提条件を順番に満たしてください(ユーザーが Terraform HCL の生成または表示のみを求めている場合、これらのコマンドは実行しないでください)。- 対象のプロジェクト 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(ユーザーへの確認):コマンドが失敗する場合、またはプロジェクト番号を取得できない場合は、ユーザーに提示を求めます。
- 方法 A(標準):
- ユーザーの依頼、または
- 認証:
gcloud auth loginでgcloudCLI を認証し、Terraform 用にgcloud auth application-default loginで Application Default Credentials(ADC)を設定します。 - プロジェクトの設定と請求:
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 コンソールで設定します)。
- 復旧対応:
- 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(または必要な権限を含むカスタムロール)の付与を依頼するようユーザーに案内します。
- 復旧対応:これらの権限を付与するカスタムロールを持つユーザーには、プリ定義済みロール名は必要ありません。
- 対象のプロジェクト ID とプロジェクト番号:
-
検出のヒント:
- 通知チャンネルの一覧表示:通知チャンネルを一覧表示するには、必ず
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}を実行して、次の項目を確認します。- トピックのプロジェクトで Pub/Sub API(
pubsub.googleapis.com)が有効になっていること(同一プロジェクト内のトピックと、projects/{topic_project_id}/topics/{topic_name}で指定されたクロスプロジェクトのトピックの両方に対応しています)。 - トピックが存在し、監視対象プロジェクトの Cloud Monitoring Service Agent(
service-{monitoring_project_number}@gcp-sa-monitoring-notification.iam.gserviceaccount.com)が、トピックまたはトピックのプロジェクトでroles/pubsub.publisherを保持していること。 - トピックにメッセージ保存ポリシー(
messageStoragePolicy/message_storage_policy)が定義されておらず、転送中の適用(enforceInTransit/enforce_in_transit)が有効になっていないこと。メッセージ保存ポリシーが定義されているトピックや、転送中の制限が適用されるトピックは、通知チャンネルとして使用しないでください。Cloud Monitoring はそのようなトピックにメッセージを配信できません。
- トピックのプロジェクトで Pub/Sub API(
- 通知チャンネルの一覧表示:通知チャンネルを一覧表示するには、必ず
-
アトリビューション:以下で作成、変更、またはユーザーに提案する、該当するすべてのコマンドと 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にあるテンプレートを使用して作成し、認証情報はそのファイルに保存するようユーザーに伝えてください。
実行手順
-
ユーザーが設定を希望する通知チャネルに対応するリファレンスファイルを開きます。
通知チャネルの種類 リファレンスファイル email email.md sms sms.md slack slack.md pubsub pubsub.md pagerduty pagerduty.md webhook webhook.md -
Prerequisitesセクションにガイドラインがある場合はそれに従い、チャネル設定に必要な要件をすべて満たします。 -
リファレンスファイルの
Specification内にRequired Credentialsセクションがある場合は、記載されている必須の認証情報がsecret.tfvarsファイルで設定されていることを必ず確認します。- 認証情報の値が空、またはファイル内に見つからない場合は、先に進む前にユーザーに入力を求める必要があります。
-
リファレンスファイルの
Specification内にあるTerraform HCLセクションのテンプレートを使用し、必要に応じて指定された変数を置き換えて、新しい設定を出力ファイルに書き込みます。ユーザーが通知チャネルのdisplay_nameを明示的に指定した場合は、既定の"<Type> Notification Channel (...)"テンプレート文字列ではなく、その文字列をそのままdisplay_nameに設定します。 -
既存のアラートポリシーへのチャネル追加:新しいチャネルを作成せず、既存の
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" に設定してください。