の AWS メッセージ処理フレームワークの使用を開始します。NET - AWS SDK for .NET

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

の AWS メッセージ処理フレームワークの使用を開始します。NET

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

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

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

前提条件と設定

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

  • の AWS メッセージ処理フレームワークを使用するには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 メッセージ処理フレームワークを使用する方法を示しますNET。これにより、 という 2 つのアプリケーションが作成されますASP。NET Core Minimal API は、APIエンドポイントでリクエストを受信したときに Amazon SQSキューにメッセージを送信し、これらのメッセージをポーリングして処理する長時間実行されるコンソールアプリケーションです。

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

  • このチュートリアルでは、認証情報に[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 メッセージ処理フレームワークへの依存関係を追加します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の値を指定し、実行 を選択します。これによりAPI、SQSメッセージを送信する が呼び出されます。

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

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

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

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

    dotnet new console --name Handler
  3. 新しいプロジェクトのフォルダに移動します。の 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 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>"