Message AWS Processing Framework for .NET の使用を開始する - AWS SDK for .NET

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Message AWS Processing Framework for .NET の使用を開始する

これはプレビューリリースの機能に関するプレリリースドキュメントです。このドキュメントは変更される可能性があります。

開始する前に、環境とプロジェクトがセットアップされている ことを必ず確認してください。また、「SDK の機能」の情報を確認してください。

このトピックでは、メッセージ処理フレームワークの使用を開始するのに役立つ情報を提供します。前提条件と設定情報に加えて、一般的なシナリオの実装方法を示すチュートリアルが用意されています。

前提条件と設定

  • アプリケーションに提供する認証情報には、使用するメッセージングサービスとオペレーションに対する適切なアクセス許可が必要です。詳細については、EventBridgeそれぞれのデベロッパーガイドの SQS SNS 、および のセキュリティトピックを参照してください。

  • Message AWS Processing Framework for .NET を使用するには、 AWS.Messaging NuGetパッケージをプロジェクトに追加する必要があります。例:

    dotnet add package AWS.Messaging
  • このフレームワークは、.NET の依存関係インジェクション (DI) サービスコンテナ と統合されます。アプリケーションの起動時にフレームワークを設定するには、 AddAWSMessageBusを呼び出して DI コンテナに追加します。

    var builder = WebApplication.CreateBuilder(args); // Register the AWS Message Processing Framework for .NET builder.Services.AddAWSMessageBus(builder => { // Register that you'll publish messages of type ChatMessage to an existing queue builder.AddSQSPublisher<ChatMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); });

チュートリアル

このチュートリアルでは、 AWS Message Processing Framework for .NET の使用方法を示します。2 つのアプリケーションを作成します。API エンドポイントでリクエストを受信したときに Amazon SQS キューにメッセージを送信する ASP.NET Core Minimal API と、これらのメッセージをポーリングして処理する長時間実行されるコンソールアプリケーションです。

  • このチュートリアルの手順は .NET CLI を優先しますが、.NET CLI や Microsoft Visual Studio などのクロスプラットフォームツールを使用してこのチュートリアルを実行できます。ツールの詳細については、「」を参照してくださいツールチェーンのインストールと設定

  • このチュートリアルでは、認証情報に [default]プロファイルを使用していることを前提としています。また、Amazon SQS メッセージを送受信するための適切なアクセス許可を持つ短期認証情報が利用可能であることを前提としています。詳細については、AWSで SDK 認証を設定します「」および SQS のセキュリティトピックを参照してください。

注記

このチュートリアルを実行すると、SQS メッセージングのコストが発生する可能性があります。

ステップ

SQS キューを作成する

このチュートリアルでは、メッセージを送受信するために SQS キューが必要です。キューは、 AWS CLI または に対して次のいずれかのコマンドを使用して作成できます AWS Tools for PowerShell。返されるキュー URL を書き留めておき、次のフレームワーク設定で指定できるようにします。

AWS CLI
aws sqs create-queue --queue-name DemoQueue
AWS Tools for PowerShell
New-SQSQueue -QueueName DemoQueue

公開アプリケーションを作成して実行する

公開アプリケーションを作成して実行するには、次の手順に従います。

  1. コマンドプロントまたはターミナルを開きます。.NET プロジェクトを作成できるオペレーティングシステムフォルダを検索するか作成します。

  2. そのフォルダで、次のコマンドを実行して .NET プロジェクトを作成します。

    dotnet new webapi --name Publisher
  3. 新しいプロジェクトのフォルダに移動します。Message Processing Framework for AWS .NET への依存関係を追加します。

    cd Publisher dotnet add package AWS.Messaging
    注記

    認証 AWS IAM Identity Center に を使用している場合は、必ず AWSSDK.SSOと を追加してくださいAWSSDK.SSOOIDC

  4. のコードを次のコードProgram.csに置き換えます。

    using AWS.Messaging; using Microsoft.AspNetCore.Mvc; using Publisher; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle. builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Configure the AWS Message Processing Framework for .NET. builder.Services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register that you'll publish messages of type GreetingMessage: // 1. To a specified queue. // 2. Using the message identifier "greetingMessage", which will be used // by handlers to route the message to the appropriate handler. builder.AddSQSPublisher<GreetingMessage>(args[0], "greetingMessage"); } // You can map additional message types to queues or topics here as well. }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Create an API Endpoint that receives GreetingMessage objects // from the caller and then sends them as an SQS message. app.MapPost("/greeting", async ([FromServices] IMessagePublisher publisher, Publisher.GreetingMessage message) => { return await PostGreeting(message, publisher); }) .WithName("SendGreeting") .WithOpenApi(); app.Run(); public partial class Program { /// <summary> /// Endpoint for posting a greeting message. /// </summary> /// <param name="greetingMessage">The greeting message.</param> /// <param name="messagePublisher">The message publisher.</param> /// <returns>Async task result.</returns> public static async Task<IResult> PostGreeting(GreetingMessage greetingMessage, IMessagePublisher messagePublisher) { if (greetingMessage.SenderName == null || greetingMessage.Greeting == null) { return Results.BadRequest(); } // Publish the message to the queue configured above. await messagePublisher.PublishAsync(greetingMessage); return Results.Ok(); } } namespace Publisher { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } }
  5. 以下のコマンドを実行します。これにより、Swagger UI でブラウザウィンドウが開き、API の探索とテストが可能になります。

    dotnet watch run <queue URL created earlier>
  6. /greeting エンドポイントを開き、 を試す を選択します。

  7. メッセージの senderNamegreetingの値を指定し、実行 を選択します。これにより、SQS メッセージを送信する API が呼び出されます。

処理アプリケーションを作成して実行する

次の手順を使用して、処理アプリケーションを作成して実行します。

  1. コマンドプロントまたはターミナルを開きます。.NET プロジェクトを作成できるオペレーティングシステムフォルダを検索するか作成します。

  2. そのフォルダで、次のコマンドを実行して .NET プロジェクトを作成します。

    dotnet new console --name Handler
  3. 新しいプロジェクトのフォルダに移動します。Message Processing Framework for AWS .NET への依存関係を追加します。また、 Microsoft.Extensions.Hostingパッケージを追加します。これにより、.NET 汎用ホスト を介してフレームワークを設定できます。

    cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hosting
    注記

    認証 AWS IAM Identity Center に を使用している場合は、必ず AWSSDK.SSOと を追加してくださいAWSSDK.SSOOIDC

  4. のコードを次のコードProgram.csに置き換えます。

    using AWS.Messaging; using Handler; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET. services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register you'll poll the following queue. builder.AddSQSPoller(args[0]); // And that messages of type "greetingMessage" should be: // 1. Deserialized as GreetingMessage objects. // 2. Which are then passed to GreetingMessageHandler. builder.AddMessageHandler<GreetingMessageHandler, GreetingMessage>("greetingMessage"); } // You can add additional message handlers here, using different message types. }); }); var host = builder.Build(); await host.RunAsync(); namespace Handler { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } /// <summary> /// This handler is invoked each time you receive the message. /// </summary> public class GreetingMessageHandler : IMessageHandler<GreetingMessage> { public Task<MessageProcessStatus> HandleAsync( MessageEnvelope<GreetingMessage> messageEnvelope, CancellationToken token = default) { Console.WriteLine( $"Received message {messageEnvelope.Message.Greeting} from {messageEnvelope.Message.SenderName}"); return Task.FromResult(MessageProcessStatus.Success()); } } }
  5. 以下のコマンドを実行します。これにより、長時間実行されるポーラーが開始されます。

    dotnet run <queue URL created earlier>

    起動後すぐに、アプリケーションはこのチュートリアルの最初の部分で送信されたメッセージを受信し、次のメッセージをログに記録します。

    Received message {greeting} from {senderName}
  6. Ctrl+C を押してポーラーを停止します。

クリーンアップ

キュー AWS Tools for PowerShell を削除するには、 AWS CLI または に次のいずれかのコマンドを使用します。

AWS CLI
aws sqs delete-queue --queue-url "<queue URL created earlier>"
AWS Tools for PowerShell
Remove-SQSQueue -QueueUrl "<queue URL created earlier>"