AWS SDK for .NET의 버전 4(V4)가 출시되었습니다!
새 버전의 SDK 사용을 시작하려면 AWS SDK for .NET(V4) 개발자 안내서, 특히 버전 4로 마이그레이션 주제를 참조하세요.
.NET용 AWS 메시지 처리 프레임워크 사용 시작
시작하기 전에 먼저 환경 및 프로젝트를 설정해야 합니다. 또한 SDK 기능의 정보를 검토합니다.
이 주제에서는 메시지 처리 프레임워크 사용을 시작하는 데 도움이 되는 정보를 제공합니다. 사전 조건 및 구성 정보 외에도 일반적인 시나리오를 구현하는 방법을 보여 주는 자습서가 제공됩니다.
사전 조건 및 구성
-
애플리케이션에 제공하는 자격 증명에는 사용하는 메시징 서비스 및 작업에 대한 적절한 권한이 있어야 합니다. 자세한 내용은 해당 개발자 안내서의 SQS, SNS 및 EventBridge에 대한 보안 주제를 참조하세요. 또한 특정 권한
을 설명하는 GitHub의 README 파일 부분을 참조하세요. -
.NET용 AWS 메시지 처리 프레임워크를 사용하려면 프로젝트에
AWS.MessagingNuGet 패키지를 추가해야 합니다. 예: 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"); });
자습서
이 자습서에서는 .NET용 AWS 메시지 처리 프레임워크를 사용하는 방법을 보여 줍니다. 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을 기록해 둡니다.
게시 애플리케이션 생성 및 실행
다음 절차에 따라 게시 애플리케이션을 생성하고 실행합니다.
-
명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 만들 수 있는 운영 체제 폴더를 찾거나 생성합니다.
-
해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 만듭니다.
dotnet new webapi --name Publisher -
새 프로젝트의 폴더로 이동합니다. .NET용 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다.
cd Publisher dotnet add package AWS.Messaging참고
인증에 AWS IAM Identity Center를 사용하는 경우
AWSSDK.SSO및AWSSDK.SSOOIDC도 추가해야 합니다. -
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; } } } -
다음 명령을 실행합니다. 그러면 API를 탐색하고 테스트할 수 있는 Swagger UI가 있는 브라우저 창이 열립니다.
dotnet watch run<queue URL created earlier> -
/greeting엔드포인트를 열고 시도를 선택합니다. -
메시지의
senderName및greeting값을 지정하고 실행을 선택합니다. 이렇게 하면 API가 간접적으로 호출되어 SQS 메시지가 전송됩니다.
처리 애플리케이션 생성 및 실행
다음 절차를 통해 처리 애플리케이션을 생성 및 실행합니다.
-
명령 프롬프트 또는 터미널을 엽니다. .NET 프로젝트를 만들 수 있는 운영 체제 폴더를 찾거나 생성합니다.
-
해당 폴더에서 다음 명령을 실행하여 .NET 프로젝트를 만듭니다.
dotnet new console --name Handler -
새 프로젝트의 폴더로 이동합니다. .NET용 AWS 메시지 처리 프레임워크에 대한 종속성을 추가합니다. 또한
Microsoft.Extensions.Hosting패키지를 추가하여 .NET Generic Host를 통해 프레임워크를 구성할 수 있습니다. cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hosting참고
인증에 AWS IAM Identity Center를 사용하는 경우
AWSSDK.SSO및AWSSDK.SSOOIDC도 추가해야 합니다. -
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()); } } } -
다음 명령을 실행합니다. 이렇게 하면 장기 실행 폴러가 시작됩니다.
dotnet run<queue URL created earlier>시작 직후 애플리케이션은 이 자습서의 첫 부분에서 전송된 메시지를 수신하고 다음 메시지를 기록합니다.
Received message {greeting} from {senderName} -
Ctrl+C를 눌러 폴러를 중지합니다.
정리
AWS CLI 또는 AWS Tools for PowerShell에 대해 다음 명령 중 하나를 사용하여 대기열을 삭제합니다.