LocalStackを調べたのでまとめ

Localstackについて調べてみたので、まとめる。

Localstackとは何か

PCやCI環境で動作するクラウドサービスのemulater(ソフトウェアを擬似実行できるようにするもの)
AWSのサービスをPC上で再現することができる。SQS, SNSなど幅広いサービスに対応している。

インストール

pip install localstack
python3 -m pip install awscli-local
localstack start -d
# 利用可能、起動中のサービスを確認
localstack status services

Localstackを使うためのawsコマンドのラッパーツールawscli-localを使うとSQSのエンキューなどができる。
localstack/awscli-local: 💲 "awslocal" - Thin wrapper around the "aws" command line interface for use with LocalStack

pip install awscli-local

LocalStack CLIなしでDockerで起動

docker run --rm -it -p 4566:4566 -p 4571:4571 localstack/localstack

SQSを使う

awslocalはawsコマンドのラッパーなので、同じコマンドを使える。

キューの作成:

awslocal sqs create-queue --queue-name sample-queue --region ap-northeast-1

キューの取得:

awslocal sqs list-queues  --region ap-northeast-1
awslocal sqs receive-message --queue-url 'http://localhost:4566/00000000000/sample-queue'  --region ap-northeast-1

aws-sdk-rubyから使う

これを使ってエンキュー、デキューをやってみる。
aws/aws-sdk-ruby: The official AWS SDK for Ruby.

require 'aws-sdk'
require 'aws-sdk-core'
require 'dotenv'
Dotenv.load

client = Aws::SQS::Client.new(
  region: 'ap-northeast-1',
  access_key_id: ENV['ID'],
  secret_access_key: ENV['KEY']
)

client.send_message({
                      queue_url: "http://localhost:4566/000000000000/foo",
                      message_body: "bar"
                    })

message = client.receive_message({
                              queue_url: "http://localhost:4566/000000000000/foo"
                            })

puts message.messages

こんな感じの結果が返される。

{:message_id=>"xxx", :receipt_handle=>"xxx", :md5_of_body=>"xxx", :body=>"bar", :attributes=>{}, :md5_of_message_attributes=>nil, :message_attributes=>{}}