AWS

AWS-SQSやLocalStackに対する操作をコマンドラインで行う

以前まで、AWS の SNS や SQS のサービスを利用するには AWS を使わないと動作確認できないと思っていたのですが、LocalStack の存在を知り、ローカルの Docker 上でも環境が構築できることが判明しました。

これにより、AWS のテスト環境をなかなか用意してもらえない企業でも、ローカルで AWS に近い環境を試すことができます。

EC2(AmazonLinux)は CentOS、Aurora(RDS)は MySQL サーバで代用できたとしても、その他多くの AWS のサービスを代用するのには限界がありますからね。

今回は、LocalStack の Docker コンテナの構築と、SQS のキューの操作(AWS-CLI)について紹介したいと思います。

LocalStackについて

LocalStack は、AWS のモックフレームワークを提供してくるアプリケーションです。

冒頭で SNS や SQS と書きましたが、以下のサービスを localhost のそれぞれのポートで起動してくれます。

API Gateway : 4567
Kinesis : 4568
DynamoDB : 4569
DynamoDB Streams : 4570
Elasticsearch : 4571
S3 : 4572
Firehose : 4573
Lambda : 4574
SNS : 4575
SQS : 4576
Redshift : 4577
Elasticsearch : 4578
SES : 4579
Route53 : 4580
CloudFormation : 4581
CloudWatch : 4582

よって、SNS であれば http://localhost:4575 のエンドポイントに対してトピック(topic)の操作ができますし、SQS であれば http://localhost:4576 が対象になります。

LocalStackをコンテナで動かす

LocalStack の利用方法はいくつかありますが、今回は冒頭でも書いた通り Docker で動かします。

DockerHub にイメージがあるので、それを利用してみましょう。

docker pull してもいいのですが、ローカルの Docker コンテナたちは docker-compose.yml で管理しているのでこちらに定義します。完全に自分都合ですが・・・。

docker-compose.yml を保存したら LocalStack を起動してみます。初回なので –build しておきますか。

AWS-CLIの実行環境を整える

これで LocalStack は使えるようになりましたが、実際に SNS や SQS の操作をするには以下の 2 つの作業が必要になります。

awscliのインストール
AWSの認証プロファイルの作成

Linux の場合は、AmazonLinux なら標準で組み込まれています。

CentOS の場合は以下で書きましたので参考にしてください。

CentOS7でawscliをセットアップしてS3に接続するAmazonLinux だと最初から AWS コマンドラインインターフェイス(CLI)が使えるのでいいですが、今回は CentOS7 を...

Mac の場合は brew でインストールすることになります。

コンテナの環境変数でデフォルトは東京リージョンとしましたが、別途、SNS や SQS などの各サービスを操作するためのプロファイルを用意する必要があり、ここでもリージョンは指定しておきます。

早速、作ります。「Access Key ID」や「Secret Access Key」はダミーの値で問題ないようなので、ここでは「dummy」としておきます。

プロファイル名は仮に「local」としておきます。

これで、各サービスを操作できる状態となりました。

LocalStackのSQSをコマンドラインから操作する

SQS の操作をする前に、以下を作成しておきます。

SNSのトピックスの作成
SQSのキューの作成
SNSのトピックからキューにメッセージを送信する権限付与
SNSのトピックとSQSのキューの連携設定

必要に応じて「デッドレターキュー」の作成もしておくといいかもしれませんね。

ここでは仮に、それぞれ 1 個ずつ作成して SNS と SQS を連動させてみます。

トピック名もキュー名もリラックマ(rilakkuma)とします。ワンライナーで書かずにシェルスクリプトにした方がわかりやすかったですね。

途中、¥ で折り返していますがみにくいかも・・・。

SQSの操作をする

上記で作成したキューがキュー一覧に表示されるか確認してみます。

キューをたくさん登録している場合は、–queue-name-prefix をつけてプレフィックス指定で検索してみてください。

このキューに受信可能なメッセージが何件あるか確認します。

他で受信されて、一定時間アクティブではないキューの件数を確認します。

キューのメッセージを 1 件受信してみます。
(長いのでBody以降を省略します)

メッセージを受信して削除します。受信したメッセージの ReceiptHandle を指定して削除です。

開発中に確認したいとしたら、このくらいでしょうか。