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