ECSからの疎通確認

Pocket

コンテナはDockerを使用することを想定しています。

内容

ECSと他サービスの疎通を確認するための覚書です。
ローカルとAWS ECSで確認することを想定しています。

  • ローカルのDockerコンテナからAWSサービス(例:SQS)と疎通を確認
  • AWS ECSからAWSサービス(例:SQS)と疎通を確認

クレデンシャル

SDKはコードにクレデンシャルを明示しない場合は、以下順序でクレデンシャルを解決します。

  1. 環境変数
  2. クレデンシャルファイル/プロフィール
  3. IAMロール(STS)

ローカルのDockerからの確認とAWS ECSからの確認でプログラムを変更したくないため、以下の方法でSDKにクレデンシャルを渡すことにします。

  • ローカルのDockerコンテナからAWSサービスと疎通を確認:環境変数を使用
  • AWS ECSからAWSサービスと疎通を確認:IAMロールを使用

↑を実現するために、AWS SDKのClient(例:SQS)にクレデンシャルを設定しません。

$client = new SqsClient([
    'region' => 'ap-northeast-1',
    'version' => '2012-11-05'
]);

以下のようにprofileなどを指定するとコンテナにクレデンシャルが必要になってしまいます。

$client = new SqsClient([
+    'profile' => 'default',
    'region' => 'ap-northeast-1',
    'version' => '2012-11-05'
]);

クレデンシャルを付与

ローカル

docker runeオプションを使ってクレデンシャルを環境変数で渡します。

# シェル変数にローカルの`default`のクレデンシャルを設定
$ AWS_REGION=$(aws configure get region)
$ AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
$ AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)

docker runeオプションで環境変数を渡します。

# -eでクレデンシャルを環境変数としてコンテナに渡す
$ docker run -e AWS_REGION=$AWS_REGION -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY aws-sqs-sample:latest

イメージaws-sqs-sample:latestが存在することを想定しています。

AWS ECS

AWS ECSでは、タスクロールに適切にIAMロールを設定していれば、IAMロールの一時認証情報(STS)を使ってクレデンシャルを取得します。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。