DockerコンテナからAWSにアクセスする時、AWSのcredentialsが必要になる。
AWS上でコンテナを動かす場合IAMロールを付与すればいいが、ローカルで動かす時はそうもいかない。
そこで、ここではローカルのAWS認証情報(~/.aws/)をコンテナに渡す方法をまとめた。
docker-compose.yaml
AWS SDK for JavaScriptを使ったWebアプリケーションをDockerコンテナで動かす体で見て欲しい。
docker-compose.yaml から一部抜粋する。
:
app:
environment:
- AWS_SDK_LOAD_CONFIG
- AWS_PROFILE
- NODE_ENV=development
volumes:
- ~/.aws/:/root/.aws:ro
:
environment
環境変数は値を書かなければローカルの環境変数がパススルーされるので、必要に応じてお好みで設定する。だいたい .env に書いている。
ちなみに AWS_SDK_LOAD_CONFIG を true に設定すると、SDKが自動的に ~/.aws/config を読み込むようになる。不要であれば別途 AWS_REGION を設定する必要がある。
プロファイルを default から変更したい時も AWS_PROFILE を設定する必要がある。
environment:
- AWS_SDK_LOAD_CONFIG
- AWS_PROFILE
volumes
ローカルの ~/.aws を、Dockerコンテナの /root/.aws にマウントする(念の為、読み取り専用にしている)。これでDockerコンテナからAWSの認証情報を参照できるようになる。
ここでは root ユーザーを実行ユーザーにしているが、実際は専用ユーザーを作成したほうがいいと思う。
volumes:
- ~/.aws/:/root/.aws:ro