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からも同じ感じで利用できそうなので色々と利用していみたいと思います。

ASP.NET Core MVC 2.0でFromBodyに引数が設定されない

以下のようにコントローラーでAPIを作成したときにcurlから引数のmessageへ値を設定することができずハマったのでまとめます。

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    public class SampleController : Controller
    {
         [HttpPost("create")]
        public async Task<string> CreateMessage([FromBody]string message)
        {
            ...
        }
}

最初はJSONで{"message": "hogehoge"}のような記述をしていたが、これだとmessageに値が設定されなかった。

$ curl -d '{"message": "hogehoge"}' -H "Content-type: application/json"  -XPOST localhost:5000/api/sample/create 

結局以下の通りmessageに設定する値を指定すれば良いことがわかったのでめでたしめでたし。

$ curl -d '"value1"' -H "Content-type: application/json"  -XPOST localhost:5000/api/sample/create 

なお、{"code":"xxxxx", "value":"dummy"}のような複数のフィールドに対応させる場合には対象のPOCOを作成してバインドする必要があります。むしろこの方が直感的で分かりやすかったりしますね。

ALBのリスナーに設定した証明書を変更する

こんにちは。beaglesoftの真鍋です。

先週は休暇を兼ねて沖縄に行ってきました。サンゴ礁の青い海とのどかな雰囲気の沖縄は休暇を過ごすにはとても良い環境でした。

ALBのリスナーに設定した証明書を変更する

さて、今回はAWSのALBについてです。ALBに設定した証明書を変更する必要が出てきたのですが、ドキュメントを調べたところaws cliからのみ変更できるとのことでしたので手順をまとめました。

サーバー証明書の更新 - Elastic Load Balancing

サーバー証明書を更新する

サーバー証明書を更新するために必要な情報は以下の通りとなります。

  1. ターゲットグループのARN
  2. 設定する証明書のARN

これらの情報はコンソールのEC2 > ロードバランサー > リスナー から取得することができます。

modify-listenerを実行する

modify-listenerを実行すると以下の通りとなります。

$ aws elbv2 modify-listener --listener-arn arn:aws:elasticloadbalancing:ap-northeast-1:...  \
    --certificates CertificateArn=arn:aws:acm:ap-northeast-1:...
{
    "Listeners": [
        {
            "Protocol": "HTTPS",
            "DefaultActions": [
                {
                    "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:...",
                    "Type": "forward"
                }
            ],
            "SslPolicy": "ELBSecurityPolicy-2016-08",
            "Certificates": [
                {
                    "CertificateArn": "arn:aws:acm:ap-northeast-1:123...:certificate/fuga..."
                }
            ],
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:...",
            "Port": 443,
            "ListenerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:..."
        }
    ]
}

これで証明書が変更されました。

最後に

AWSはドキュメントがよく整備されているので、困ったときにはドキュメントを探すとたいてい解決します。ただ、その解決方法が意外とコンソールではなくaws cliだったりすることがあるので初めてのことはちょっと戸惑うことがあるように思います。

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/03/23
  • メディア: 単行本
  • この商品を含むブログを見る