ASP.NET Core2でSQSを利用してみる

AWS SQSをdotnetから利用するためのサンプルを作成しました。

github.com

基本的にはAmazon SQS 例 - AWS SDK for .NETを参照して作成したものです。時間の関係からデッドレターキューについては実装していません。

認証について

認証についてどうしているんだろうと気になったのですが、開発者であれば通常はユーザーディレクトリに.aws/credentialsを作成していると思います。それをAmazonSQSClientを生成するときにFallbackCredentialsFactoryあたりで取得してくれます。

github.com

この辺はJavaのときはwithCredentialsのように認証チェーンを自分で定義したのですが、SQSではよしなに対応してくれるようです。

なお、AWS SDK for .NETでの認証に関するドキュメントはこちらになります。

docs.aws.amazon.com

認証周りは基本的に設定ファイルに記述しないことが前提になるので、ここは重要なところですよね。

SQSへの各処理について

SQSへの各処理については特に困るようなこともなく、普通に実装すればOKでした。Queueメッセージの登録はこんな感じでサクッとできますね。

SQSへのQueueメッセージの登録

        [HttpPost("create")]
        public async Task<string> CreateMessage([FromBody] string message)
        {
            var queue = await QueueUrl.Build(_client,QueueName, _sqsConfigParam.QueueAttributes);
            var request = new SendMessageRequest
            {
                QueueUrl = queue.Value,
                MessageBody = message
            };

            var response = await _client.SendMessageAsync(request);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                var result = new
                {
                    StatusCode = "正常終了",
                    Message = "SQSへメッセージの登録に成功しました。"
                };
                return JsonConvert.SerializeObject(result);
            }
            else
            {
                var result = new
                {
                    StatusCode = "エラー",
                    Message = "SQSへメッセージの登録に失敗しました。"
                };
                return JsonConvert.SerializeObject(result);
            }
        }

終わりに

これまで主にJavaではAWSをよく利用したのですが、dotnetからも同じ感じで利用できそうなので色々と利用していみたいと思います。