EC2インスタンスでコードを実行すると、AWSリソースへのアクセスに使用するSDKは、169.254.169.254でローカルにリンクされたウェブサーバーと自動的に通信し、他のAWSサービスとの通信に必要なAWS認証情報(access_key、secret)をインスタンスに取得します。
ENV変数に資格情報を設定したり、コマンドライン引数として渡すなど、他のオプションもあります...
ここでのベストプラクティスは何ですか?私は、コンテナーが169.254.169.254にアクセスできるようにする(要求をルーティングする)か、169.254.169.254の実サーバーの動作を模倣するプロキシコンテナーを実行する方がよいと考えています。
そこにすでに解決策はありますか?
EC2メタデータサービスは通常、Docker内から利用できます(よりカスタムなネットワーク設定を使用しない限り、同様の質問については この回答 を参照してください)。
Dockerネットワークの設定でアクセスできない場合は、ENV
でDockerfile
ディレクティブを使用するか、実行中に直接渡すことができますが、IAMロールからの認証情報は自動的にローテーションされることに注意してください。 AWS。
Amazonには、コンテナーがSDKを介してIAMロールにアクセスし、ECSエージェントコンテナーまたはホストを介してリクエストをルーティング/転送できるようにするためのメカニズムがいくつかあります。コピーして貼り付ける方法は多すぎますが、--net Host
を使用することは、最も推奨されないオプションです。これは、ホストが実行する権限を持つすべてのコンテナへのフルアクセスをコンテナに許可する追加のフィルタがないためです。
https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html