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

AWS SDK for .NETのバージョン 4 (V4) がリリースされました。

SDK の新しいバージョンの使用を開始するには、「AWS SDK for .NET (V4) デベロッパーガイド」、特に「バージョン 4 への移行」に関するトピックを参照してください。

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

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

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

設定の前提条件

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

  • AWS Message 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. 新しいプロジェクトのフォルダに移動します。AWS Message Processing Framework for .NET への依存関係を追加します。

    cd Publisher dotnet add package AWS.Messaging
    注記

    認証に AWS IAM Identity Center を使用している場合は、必ず AWSSDK.SSOAWSSDK.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. メッセージの senderName 値と greeting 値を指定し、[実行] を選択します。これにより、SQS メッセージを送信する API が呼び出されます。

処理アプリケーションの作成と実行

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

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

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

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

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

    認証に AWS IAM Identity Center を使用している場合は、必ず AWSSDK.SSOAWSSDK.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 CLI または AWS Tools for PowerShell の次のいずれかのコマンドを使用します。

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