はじめに
localstackを使用してハマった内容について、備忘録としてまとめました。
localstackとは
localstackとは、クラウドアプリケーションをオフラインで開発/テストするためのツールで、公式ページには、以下のように書かれています。
(原文)
It spins up a testing environment on your local machine that provides the same functionality and APIs as the real AWS cloud environment.
(google翻訳)
実際のAWSクラウド環境と同じ機能とAPIを提供するローカルマシンのテスト環境を起動します。
設定と動作
私は、dockerイメージを利用して、localstack環境を構築しました。
その時のdocker-compose.yamlがこちらです。
version: '2.1'
services:
localstack:
image: localstack/localstack
ports:
- "4566-4599:4566-4599"
- "8080:8080"
environment:
- SERVICES=dynamodb,s3,sqs
クラウドアプリケーションは、AWS SDK for .NETを使用して作成しました。
で、いざ動かしてみると、以下のような例外が発生して上手く動きません。
Unable to get IAM security credentials from EC2 Instance Metadata Service.
以前、別の環境でlocalstackを使った事があったのですが、その時は上記の現象は発生しませんでした。
解決策
ネットでいろいろ調べていると、localstackのGITにissue上がっていましたので、それらを試してみたのですが、まったく変わらずでした。
その後もいろいろ調べていたのですが、有効な情報も出てこず、途方に暮れていた時に、ふとどこかで「AWS SDKは認証情報としてawscliの設定情報を参照することがある」というのを聞いた事を思い出して、credentials/configの設定を見直すと、defaultの設定をしていませんでした。
defaultが設定されてないので情報が取れないのではと思い、試しに以下のように設定して再度アプリケーションを動作させると、見事に動きました!!!!!
[default]
aws_access_key_id = dummy
aws_secret_access_key = dummy
region=us-east-1
[default]
region = us-east-1
今回は、各KEYにdummyを登録しましたが、値は何でも良いようです。
まとめ
awscliはちゃんとdefaultを設定しておきましょう。