LocalStackを使ってPythonSDK(AWS)の動作確認をしてみた
概要
AWS環境構築用にboto3 や AWS CLIを使っているのだが、動作確認するだけで自分の環境が汚れてしまうのがどうも気にくわない。
また、スクリプト自体はunittest や shunit2 で単体テストを回して品質を担保したいが、一番重要なAWSコマンド実行の部分を動作させられないといまいち。
環境を汚さず品質担保するうまい方法はないかプロに聞いてみたら、LocalStackというのがあるからやってみれ、とのことだった。 ので、ひとまず使ってみた。
ゴール
WindowsのVirtualBox上に、LocalStackのサーバーを立てて、LocalStackに向けてS3のバケット作成コマンド実行する。
バージョン情報
Windows10
VirtualBox 5.1.30
Vagrant 2.0
Python3.6
結論
LocalStack仮想サーバーを構築する
下記のVagrantfileをローカルの適当なディレクトリに作成して、vagrant up
を実行する。
(IPアドレス、ポート、メモリサイズ等は環境に合わせて変更してください)
Vagrant.configure(2) do |config| config.vm.provider "virtualbox" do |vb| vb.name = "local_stack" vb.memory = "2048" end config.vm.box = "bento/centos-7.2" config.vm.hostname = 'localstack' config.vm.network "private_network", ip: "192.168.100.201" config.vm.provision :shell, inline: <<-SHELL for interface in $(grep 'NM_CONTROLLED=no' /etc/sysconfig/network-scripts/ifcfg-* -l) do sudo sed -i -e 's/NM_CONTROLLED=no/NM_CONTROLLED=yes/' $interface sudo ifdown $interface sudo ifup $interface done SHELL config.vm.provision :shell, inline: <<-SHELL sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker sudo -i docker run -itd -p 4567-4583:4567-4583 -p 8080:8080 localstack/localstack SHELL end
ブラウザで http://192.168.100.201:8080 にアクセスして、下記のような画面(ダッシュボード)が表示されれば、LocalStackの構築は完了。
LocalStackに向けて create bucketを実行する
以下のようなPythonコードを実行する。 boto3のインストール方法については割愛。
import boto3 as bt3 client = bt3.client('s3', endpoint_url='http://192.168.100.201:4572') client.create_bucket(Bucket='kudarizakawonobore-bucket')
実行成功したら、 LocalStackのダッシュボードを確認すると、S3のバケット作成が行われたことが確認できる。
やってること
vagrantのプロビジョニングでdocker のインストールとコンテナの構築を実施。
コンテナ作成時にポート4567~4583 までを仮想マシンのポートとつなげておけば、仮想マシンのポートをエンドポイントに指定するだけで応答を返してくれる。
(ダッシュボードは8080)
vagrantが使える環境であれば割と簡単に実行できる。
課題
今回はとりあえず動かしてみただけだが、単体テスト実行時だけは LocalStackを向いて、本番実行するときは所望の環境に向いてくれるように設定するのが好ましい。 やり方についてはこれから検討予定。