helloworlds

not a noun, it's a verb

【localstack】AWSサービスをローカル環境へ

少し更新が途絶えてしまいました...

まあ、気を取り直してまた更新を続けます。

今回は、localstackというクラウドアプリを開発する際のテスト/モックツールです。

f:id:o21o21:20180522142528p:plain 画像元(https://localstack.cloud/)

簡単に言ってしまうと、AWSサービスアカウントを作成することなく無償でテストできる みたいなかんじです。

さっそく準備からやっていきます。

環境: macOS

Docker

dockerとdocker-composeというものが必要になります。 以下から、docker for mac をインストールします。 docker for macには、docker-composeも入っているかと思いますので便利です。

勿論、個別にインストールすることも可能ですので、 「dockerだけ入っている!」という方は、こちらを参考にしましょう!

docs.docker.com

AWS Cli

俗に言うAWSコマンドというものがあります。 AWSのマネジメントコンソールでは、基本的にほぼAPIで操作しています。 なので、cliコマンドを実行し、使用しているサービスを制御やコントロールすることが可能です。

AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。

引用: AWS公式

まず、cliをインストールするにあたって、Pythonpipがインストール使用できることを確認しましょう。

$ pip --version

Pythonのヴァージョンが3.6以上(公式の例が3.6であるため)であることを確認できたら、以下を実行。

$ pip3 install awscli --upgrade --user

cliがインストールできたか確認しましょう。

$ aws --version

バージョンがきちんと表示されたら完了です。

aws configure

cliコマンドを使用するにあたって、cliコマンドを使用するprofileやregionなどを設定します。

私の場合は、ホームディレクトリ配下に.aws/というディレクトリを作成して、 その配下にcredentialsとconfigファイルを置いています。

今回は、あくまでローカルで動作させるだけですので、それぞれのファイルに設定しなければならない 設定値はほぼダミーで構いません。

aws configureコマンドで、オプションにporofile名(今回はわかりやすくlocalstack)を指定し実行させ、 アクセスキーなどを入力していきます。

$ aws configure --profile localstack
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: us-east-1
Default output format [None]: json

リージョンなのですが、日本ならap-northeast-1を指定しがちですが、 localstackのデフォルトがus-east-1 ですのでアメリカを指定します。

ここまでできたら、あとはlocalstack のインストールです。

localstackをインストール

任意のプロジェクトルートにいって、以下を実行。

$ git clone https://github.com/localstack/localstack.git

そすると、docker-compose.yamlというファイルが確認できるかと思います。

このファイルがあるところで、docker-compose upが実行かのうです。

$ docker-compose up

複数のportでlocalstackのAWSサービスが開始され、Ready... がでたら、localshotのport8080をブラウザで開いてみましょう。

http://localhost:8080

ダッシュボードが確認できたら完了です!!!

これで模擬的にAWSサービスを使用できます。

cliを使用するにあたって、既にクレデンシャルなど指定している人は、 本番環境や会社のアカウントに影響がでないように気をつけましょう!

cliでエンドポイントを指定したりて色々試せるかと思います。 機会があれば、サンプルがてらその記事も書けたらと思います。

以上.