Agent Skills by ALSEL
汎用DevOps・インフラ⭐ リポ 41品質スコア 86/100

azure-eventgrid-dotnet-v2

Azure.Messaging.EventGrid (.NET) ワークフロースキル。ユーザーが Azure Event Grid SDK for .NET を必要とする場合に、このスキルを使用します。Azure Event Grid でイベントの発行と消費を行うためのクライアントライブラリです。イベント駆動アーキテクチャ、pub/sub メッセージング、CloudEvents、EventGridEvents に対応しています。マージまたは引き継ぎ前に、演算子は上流のワークフロー、コピーされたサポートファイル、および出所を保持する必要があります。

description の原文を見る

Azure.Messaging.EventGrid (.NET) workflow skill. Use this skill when the user needs Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents and the operator should preserve the upstream workflow, copied support files, and provenance before merging or handing off.

SKILL.md 本文

Azure.Messaging.EventGrid (.NET)

概要

このパブリック取り込みコピーは、https://github.com/sickn33/antigravity-awesome-skills から plugins/antigravity-awesome-skills/skills/azure-eventgrid-dotnet をパッケージ化し、ネイティブな Omni Skills 編集形式に変換しながら、その出自を隠さずに保持します。

オペレータがアップストリームワークフロー、サポートファイル、リポジトリコンテキストを整った状態で保つ必要があり、パブリックバリデータとプライベート拡張機能が通常のダウンストリームフローを継続する場合に使用してください。

この取り込みは、コピーされたアップストリームファイルを整った状態で保ち、metadata.jsonexternal_source ブロックと ORIGIN.md をレビュー用の出所証跡アンカーとして使用します。

Azure.Messaging.EventGrid (.NET) Azure Event Grid トピック、ドメイン、名前空間にイベントをパブリッシュするためのクライアントライブラリ

クリーンにパブリックヘッディングにマッピングされなかったインポートされたソースセクションは、以下またはサポートファイルに保持されます。注目すべきインポートされたセクション: 環境変数、クライアント階層、認証、イベントのパブリッシュ、プルデリバリー(名前空間)、イベントの消費(Azure Functions)。

このスキルをいつ使用するか

このセクションをトリガーフィルタとして使用してください。オペレータがファイルを読み込む、コマンドを実行する、またはプルリクエストを開く前に、活性化の境界を明確にする必要があります。

  • このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。
  • リクエストがインポートされたソースの意図と明確に一致する場合に使用してください: Azure Event Grid SDK for .NET。Azure Event Grid でイベントをパブリッシュおよび消費するためのクライアントライブラリ。イベント駆動アーキテクチャ、パブサブメッセージング、CloudEvents、および EventGridEvents に使用します。
  • オペレータがプロセスをゼロから書き直すのではなく、アップストリームワークフローの詳細を保つ必要がある場合に使用してください。
  • パブリッシュ、PR、またはレビューパケットで出所を見えるようにしておく必要がある場合に使用してください。
  • コピーされたアップストリーム参照、例、またはスクリプトが実質的に回答を向上させる場合に使用してください。
  • ワークフローがプライベート拡張機能が引き継ぐ前にパブリック取り込みリポジトリでレビュー可能のままである必要がある場合に使用してください。

操作テーブル

状況ここから開始その重要性
初めて使用する場合metadata.jsonコピーされたワークフローに触れる前に、external_source ブロックを通じてリポジトリ、ブランチ、コミット、およびインポートされたパスを確認します
出所のレビューORIGIN.mdインポートされたソースの明確言語監査証跡をレビュアーに提供します
ワークフロー実行SKILL.md実行を実質的に変更する最小のコピーされたファイルから開始します
サポートコンテキストSKILL.mdパッケージ全体を読み込まずに、次の最も関連性の高いコピーされたソースファイルを追加します
ハンドオフの決定## 関連スキルタスクがドリフトしたときにオペレータがより強力なネイティブスキルに切り替えるのに役立ちます

ワークフロー

このワークフローは、意図的に編集と操作の両方を同時に実行します。インポートされたソースをオペレータに役立つものにしながら、ダウンストリーム拡張機能フローに供給するパブリック取り込み標準を満たします。

  1. bash # トピックおよびドメイン(プッシュデリバリー) dotnet add package Azure.Messaging.EventGrid # 名前空間(プルデリバリー) dotnet add package Azure.Messaging.EventGrid.Namespaces # CloudNative CloudEvents 相互運用性 dotnet add package Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents 現在のバージョン: 4.28.0 (安定版)
  2. ユーザーの目標、インポートされたワークフローのスコープ、およびこのスキルがまだタスクの適切なルータであるかどうかを確認してください。
  3. コピーされたアップストリームサポートファイルを読み込む前に、概要と出所ファイルを読んでください。
  4. 現在のリクエストの結果を実質的に変更する参照、例、プロンプト、またはスクリプトのみを読み込んでください。
  5. 出所とソース境界を作業メモで明示的に保ちながら、アップストリームワークフローを実行してください。
  6. コピーされたファイルの結果を、アップストリーム期待値および参照できる証拠に対して検証してください。
  7. 作業がこのインポートされたワークフローの中心から外れるときは、関連スキルにエスカレートまたはハンドオフしてください。

インポートされたワークフローノート

インポート: インストール

# トピックおよびドメイン(プッシュデリバリー)
dotnet add package Azure.Messaging.EventGrid

# 名前空間(プルデリバリー)
dotnet add package Azure.Messaging.EventGrid.Namespaces

# CloudNative CloudEvents 相互運用性
dotnet add package Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents

現在のバージョン: 4.28.0 (安定版)

インポート: 環境変数

# トピック/ドメインエンドポイント
EVENT_GRID_TOPIC_ENDPOINT=https://<topic-name>.<region>.eventgrid.azure.net/api/events
EVENT_GRID_TOPIC_KEY=<access-key>

# 名前空間エンドポイント(プルデリバリー用)
EVENT_GRID_NAMESPACE_ENDPOINT=https://<namespace>.<region>.eventgrid.azure.net
EVENT_GRID_TOPIC_NAME=<topic-name>
EVENT_GRID_SUBSCRIPTION_NAME=<subscription-name>

例 1: アップストリームワークフローを直接要求する

@azure-eventgrid-dotnet-v2 を使用して <task> を処理してください。コピーされたアップストリームワークフローから開始し、結果を変更するファイルのみを読み込み、回答で出所を見える状態に保ってください。

説明: これは、オペレータがインポートされたワークフロー全体ではなく、インポートされたワークフローを必要とする場合の最も安全な開始点です。

例 2: 出所に根ざしたレビューを要求する

@azure-eventgrid-dotnet-v2 を metadata.json と ORIGIN.md に対してレビューし、どのコピーされたアップストリームファイルを最初に読み込むか、およびその理由を説明してください。

説明: レビューまたはトラブルシューティング前に、出所とファイル選択の正確で監査可能な説明が必要な場合に使用してください。

例 3: 実行前にコピーされたサポートファイルを絞り込む

@azure-eventgrid-dotnet-v2 を使用して <task> を実行してください。結果を変更するコピーされた参照、例、またはスクリプトのみを読み込み、進める前に明示的にファイル名を指定してください。

説明: これにより、スキルが全体的なコピーされたパッケージをデフォルトで読み込む代わりに、段階的な情報開示に合わせて保たれます。

例 4: レビュアーパケットを作成する

@azure-eventgrid-dotnet-v2 をコピーされたアップストリームファイルと出所を使用してレビューし、マージ前にギャップを要約してください。

説明: これは、PR がヒューマンレビューを待機していて、繰り返し可能な監査パケットを必要とする場合に役立ちます。

ベストプラクティス

生成されたパブリックスキルを、アップストリームリポジトリを囲むレビュー可能なパッケージング層として扱ってください。目標は、出所を明示的に保ち、実行を実質的に改善するコピーされたソース資料のみを読み込むことです。

  • CloudEvents を使用してください — 新しい実装では CloudEvents を優先してください(業界標準)
  • イベントをバッチ処理してください — 1回の呼び出しで複数のイベントを送信して効率性を実現してください
  • Entra ID を使用してください — アクセスキーではなくマネージドアイデンティティを優先してください
  • べき等ハンドラー — イベントは複数回配信される場合があります
  • イベント TTL を設定してください — 名前空間イベントの有効期間を設定してください
  • 部分的な失敗を処理してください — イベントを個別に確認/リリースしてください
  • デッドレターを使用してください — 失敗したイベント用にデッドレターを設定してください

インポートされた運用ノート

インポート: ベストプラクティス

  1. CloudEvents を使用してください — 新しい実装では CloudEvents を優先してください(業界標準)
  2. イベントをバッチ処理してください — 1回の呼び出しで複数のイベントを送信して効率性を実現してください
  3. Entra ID を使用してください — アクセスキーではなくマネージドアイデンティティを優先してください
  4. べき等ハンドラー — イベントは複数回配信される場合があります
  5. イベント TTL を設定してください — 名前空間イベントの有効期間を設定してください
  6. 部分的な失敗を処理してください — イベントを個別に確認/リリースしてください
  7. デッドレターを使用してください — 失敗したイベント用にデッドレターを設定してください
  8. スキーマを検証してください — 処理前にイベントデータを検証してください

トラブルシューティング

問題: オペレータがインポートされたコンテキストをスキップし、あまりにも一般的に回答した

症状: 結果が plugins/antigravity-awesome-skills/skills/azure-eventgrid-dotnet のアップストリームワークフローを無視し、出所を述べず、またはコピーされたソースファイルを全く使用しません。 解決策: metadata.jsonORIGIN.md、および最も関連性のあるコピーされたアップストリームファイルを再度開きます。external_source ブロックを最初にチェックしてから、出所を言い換えて続けてください。

問題: インポートされたワークフローがレビュー中に不完全に感じられる

症状: レビュアーは生成されたた SKILL.md を見ることができますが、現在のタスクに対してどの参照、例、またはスクリプトが重要かをすばやく判断することはできません。 解決策: 選択したパスを正当化する、正確なコピーされた参照、例、スクリプト、または資産を指摘してください。ギャップがまだ実質的な場合は、それを隠さずに PR に記録してください。

問題: タスクが異なる専門分野にドリフトした

症状: インポートされたスキルは正しい場所で開始しますが、作業がデバッグ、アーキテクチャ、設計、セキュリティ、またはネイティブスキルがより適切に処理するリリース編成に変わります。 解決策: 関連スキルセクションを使用して意図的にハンドオフしてください。インポートされた出所を見える状態に保つため、次のスキルは盲目的に開始するのではなく、正しいコンテキストを継承します。

関連スキル

  • @00-andruia-consultant - このインポートされたスキルがコンテキストを確立した後、作業がそのネイティブ専門分野によってより適切に処理される場合に使用してください。
  • @00-andruia-consultant-v2 - このインポートされたスキルがコンテキストを確立した後、作業がそのネイティブ専門分野によってより適切に処理される場合に使用してください。
  • @10-andruia-skill-smith - このインポートされたスキルがコンテキストを確立した後、作業がそのネイティブ専門分野によってより適切に処理される場合に使用してください。
  • @10-andruia-skill-smith-v2 - このインポートされたスキルがコンテキストを確立した後、作業がそのネイティブ専門分野によってより適切に処理される場合に使用してください。

追加リソース

このサポートマトリックスと以下のリンクされたファイルをこのインポートされたスキルのオペレータパケットとして使用してください。それらは一般的なスキャフォルディングではなく、実際のコピーされたソース資料を反映する必要があります。

リソースファミリーレビュアーに提供するものサンプルパス
referencesコピーされた参照ノート、ガイド、またはアップストリームからのバックグラウンド資料references/n/a
examplesアップストリームからコピーされた実装例または再利用可能なプロンプトexamples/n/a
scripts実行またはバリデーションを変更するアップストリームヘルパースクリプトscripts/n/a
agents本当にインポートされたパッケージの一部である、ルーティングまたは委譲ノートagents/n/a
assetsソースパッケージからコピーされたサポートする資産またはスキーマassets/n/a

インポートされた参照ノート

インポート: キー型参照

目的
EventGridPublisherClientトピック/ドメインにパブリッシュ
EventGridSenderClient名前空間トピックに送信
EventGridReceiverClient名前空間サブスクリプションから受け取り
EventGridEventEvent Grid ネイティブスキーマ
CloudEventCloudEvents 1.0 スキーマ
ReceiveResultプルデリバリーレスポンス
ReceiveDetailsブローカープロパティ付きイベント
BrokerPropertiesロックトークン、配信カウント

インポート: 参照リンク

リソースURL
NuGet パッケージhttps://www.nuget.org/packages/Azure.Messaging.EventGrid
API リファレンスhttps://learn.microsoft.com/dotnet/api/azure.messaging.eventgrid
クイックスタートhttps://learn.microsoft.com/azure/event-grid/custom-event-quickstart
プルデリバリーhttps://learn.microsoft.com/azure/event-grid/pull-delivery-overview
GitHub ソースhttps://github.com/Azure/azure-sdk-for-net/tree/main/sdk/eventgrid/Azure.Messaging.EventGrid

インポート: クライアント階層

プッシュデリバリー(トピック/ドメイン)
└── EventGridPublisherClient
    ├── SendEventAsync(EventGridEvent)
    ├── SendEventsAsync(IEnumerable<EventGridEvent>)
    ├── SendEventAsync(CloudEvent)
    └── SendEventsAsync(IEnumerable<CloudEvent>)

プルデリバリー(名前空間)
├── EventGridSenderClient
│   └── SendAsync(CloudEvent)
└── EventGridReceiverClient
    ├── ReceiveAsync()
    ├── AcknowledgeAsync()
    ├── ReleaseAsync()
    └── RejectAsync()

インポート: 認証

API キー認証

using Azure;
using Azure.Messaging.EventGrid;

EventGridPublisherClient client = new(
    new Uri("https://mytopic.eastus-1.eventgrid.azure.net/api/events"),
    new AzureKeyCredential("<access-key>"));

Microsoft Entra ID (推奨)

using Azure.Identity;
using Azure.Messaging.EventGrid;

EventGridPublisherClient client = new(
    new Uri("https://mytopic.eastus-1.eventgrid.azure.net/api/events"),
    new DefaultAzureCredential());

SAS トークン認証

string sasToken = EventGridPublisherClient.BuildSharedAccessSignature(
    new Uri(topicEndpoint),
    DateTimeOffset.UtcNow.AddHours(1),
    new AzureKeyCredential(topicKey));

var sasCredential = new AzureSasCredential(sasToken);
EventGridPublisherClient client = new(
    new Uri(topicEndpoint),
    sasCredential);

インポート: イベントのパブリッシュ

EventGridEvent スキーマ

EventGridPublisherClient client = new(
    new Uri(topicEndpoint),
    new AzureKeyCredential(topicKey));

// 単一イベント
EventGridEvent egEvent = new(
    subject: "orders/12345",
    eventType: "Order.Created",
    dataVersion: "1.0",
    data: new { OrderId = "12345", Amount = 99.99 });

await client.SendEventAsync(egEvent);

// イベントのバッチ
List<EventGridEvent> events = new()
{
    new EventGridEvent(
        subject: "orders/12345",
        eventType: "Order.Created",
        dataVersion: "1.0",
        data: new OrderData { OrderId = "12345", Amount = 99.99 }),
    new EventGridEvent(
        subject: "orders/12346",
        eventType: "Order.Created",
        dataVersion: "1.0",
        data: new OrderData { OrderId = "12346", Amount = 149.99 })
};

await client.SendEventsAsync(events);

CloudEvent スキーマ

CloudEvent cloudEvent = new(
    source: "/orders/system",
    type: "Order.Created",
    data: new { OrderId = "12345", Amount = 99.99 });

cloudEvent.Subject = "orders/12345";
cloudEvent.Id = Guid.NewGuid().ToString();
cloudEvent.Time = DateTimeOffset.UtcNow;

await client.SendEventAsync(cloudEvent);

// CloudEvents のバッチ
List<CloudEvent> cloudEvents = new()
{
    new CloudEvent("/orders", "Order.Created", new { OrderId = "1" }),
    new CloudEvent("/orders", "Order.Updated", new { OrderId = "2" })
};

await client.SendEventsAsync(cloudEvents);

Event Grid ドメインへのパブリッシュ

// イベントはドメインルーティング用に Topic プロパティを指定する必要があります
List<EventGridEvent> events = new()
{
    new EventGridEvent(
        subject: "orders/12345",
        eventType: "Order.Created",
        dataVersion: "1.0",
        data: new { OrderId = "12345" })
    {
        Topic = "orders-topic"  // ドメイントピック名
    },
    new EventGridEvent(
        subject: "inventory/item-1",
        eventType: "Inventory.Updated",
        dataVersion: "1.0",
        data: new { ItemId = "item-1" })
    {
        Topic = "inventory-topic"
    }
};

await client.SendEventsAsync(events);

カスタムシリアル化

using System.Text.Json;

var serializerOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};

var customSerializer = new JsonObjectSerializer(serializerOptions);

EventGridEvent egEvent = new(
    subject: "orders/12345",
    eventType: "Order.Created",
    dataVersion: "1.0",
    data: customSerializer.Serialize(new OrderData { OrderId = "12345" }));

await client.SendEventAsync(egEvent);

インポート: プルデリバリー(名前空間)

名前空間トピックにイベントを送信

using Azure;
using Azure.Messaging;
using Azure.Messaging.EventGrid.Namespaces;

var senderClient = new EventGridSenderClient(
    new Uri(namespaceEndpoint),
    topicName,
    new AzureKeyCredential(topicKey));

// 単一イベントを送信
CloudEvent cloudEvent = new("employee_source", "Employee.Created",
    new { Name = "John", Age = 30 });
await senderClient.SendAsync(cloudEvent);

// バッチを送信
await senderClient.SendAsync(new[]
{
    new CloudEvent("source", "type", new { Name = "Alice" }),
    new CloudEvent("source", "type", new { Name = "Bob" })
});

イベントを受け取り処理する

var receiverClient = new EventGridReceiverClient(
    new Uri(namespaceEndpoint),
    topicName,
    subscriptionName,
    new AzureKeyCredential(topicKey));

// イベントを受け取り
ReceiveResult result = await receiverClient.ReceiveAsync(maxEvents: 10);

List<string> lockTokensToAck = new();
List<string> lockTokensToRelease = new();

foreach (ReceiveDetails detail in result.Details)
{
    CloudEvent cloudEvent = detail.Event;
    string lockToken = detail.BrokerProperties.LockToken;

    try
    {
        // イベントを処理
        Console.WriteLine($"Event: {cloudEvent.Type}, Data: {cloudEvent.Data}");
        lockTokensToAck.Add(lockToken);
    }
    catch (Exception)
    {
        // 再試行用にリリース
        lockTokensToRelease.Add(lockToken);
    }
}

// 正常に処理されたイベントを確認
if (lockTokensToAck.Any())
{
    await receiverClient.AcknowledgeAsync(lockTokensToAck);
}

// 再試行用にイベントをリリース
if (lockTokensToRelease.Any())
{
    await receiverClient.ReleaseAsync(lockTokensToRelease);
}

イベントを拒否(デッドレター)

// 処理できないイベントを拒否
await receiverClient.RejectAsync(new[] { lockToken });

インポート: イベントの消費(Azure Functions)

EventGridEvent トリガー

using Azure.Messaging.EventGrid;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;

public static class EventGridFunction
{
    [FunctionName("ProcessEventGridEvent")]
    public static void Run(
        [EventGridTrigger] EventGridEvent eventGridEvent,
        ILogger log)
    {
        log.LogInformation($"Event Type: {eventGridEvent.EventType}");
        log.LogInformation($"Subject: {eventGridEvent.Subject}");
        log.LogInformation($"Data: {eventGridEvent.Data}");
    }
}

CloudEvent トリガー

using Azure.Messaging;
using Microsoft.Azure.Functions.Worker;

public class CloudEventFunction
{
    [Function("ProcessCloudEvent")]
    public void Run(
        [EventGridTrigger] CloudEvent cloudEvent,
        FunctionContext context)
    {
        var logger = context.GetLogger("ProcessCloudEvent");
        logger.LogInformation($"Event Type: {cloudEvent.Type}");
        logger.LogInformation($"Source: {cloudEvent.Source}");
        logger.LogInformation($"Data: {cloudEvent.Data}");
    }
}

インポート: イベントの解析

EventGridEvent を解析

// JSON 文字列から
string json = "..."; // Event Grid webhook ペイロード
EventGridEvent[] events = EventGridEvent.ParseMany(BinaryData.FromString(json));

foreach (EventGridEvent egEvent in events)
{
    if (egEvent.TryGetSystemEventData(out object systemEvent))
    {
        // システムイベントを処理
        switch (systemEvent)
        {
            case StorageBlobCreatedEventData blobCreated:
                Console.WriteLine($"Blob created: {blobCreated.Url}");
                break;
        }
    }
    else
    {
        // カスタムイベントを処理
        var customData = egEvent.Data.ToObjectFromJson<MyCustomData>();
    }
}

CloudEvent を解析

CloudEvent[] cloudEvents = CloudEvent.ParseMany(BinaryData.FromString(json));

foreach (CloudEvent cloudEvent in cloudEvents)
{
    var data = cloudEvent.Data.ToObjectFromJson<MyEventData>();
    Console.WriteLine($"Type: {cloudEvent.Type}, Data: {data}");
}

インポート: システムイベント

// 共通のシステムイベント型
using Azure.Messaging.EventGrid.SystemEvents;

// ストレージイベント
StorageBlobCreatedEventData blobCreated;
StorageBlobDeletedEventData blobDeleted;

// リソースイベント
ResourceWriteSuccessEventData resourceCreated;
ResourceDeleteSuccessEventData resourceDeleted;

// App Service イベント
WebAppUpdatedEventData webAppUpdated;

// Container Registry イベント
ContainerRegistryImagePushedEventData imagePushed;

// IoT Hub イベント
IotHubDeviceCreatedEventData deviceCreated;

インポート: イベントスキーマ比較

機能EventGridEventCloudEvent
標準Azure 固有CNCF 標準
必須フィールドsubject、eventType、dataVersion、datasource、type
拡張性限定的拡張属性
相互運用性Azure のみクロスプラットフォーム

インポート: エラー処理

using Azure;

try
{
    await client.SendEventAsync(cloudEvent);
}
catch (RequestFailedException ex) when (ex.Status == 401)
{
    Console.WriteLine("Authentication failed - check credentials");
}
catch (RequestFailedException ex) when (ex.Status == 403)
{
    Console.WriteLine("Authorization failed - check RBAC permissions");
}
catch (RequestFailedException ex) when (ex.Status

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
diegosouzapw
リポジトリ
diegosouzapw/awesome-omni-skills
ライセンス
MIT
最終更新
2026/5/10

Source: https://github.com/diegosouzapw/awesome-omni-skills / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: diegosouzapw · diegosouzapw/awesome-omni-skills · ライセンス: MIT