質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

5361閲覧

AWS ECSでdocker.sockにアクセスするコンテナ/タスクの作り方

__banana

総合スコア8

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/05/12 11:31

###前提・実現したいこと
ECSでコンテナを複数立ち上げ、各コンテナのWebサービスにhttp://<コンテナ名>.example.com/ でアクセス出来る環境を作りたいと考えております。 jwilder/nginx-proxyを使うことを考えています。

###発生している問題・エラーメッセージ
taskRoleArnを記入しないと:
nginx-proxyが殺される

taskRoleArnを記入すると:
aws ecs task-runするした時に以下のメッセージが出て起動できない

An error occurred (ClientException) when calling the RunTask operation: ECS was unable to assume the role that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.

###該当のソースコード
task-definition.json

json

1{ 2 "containerDefinitions": [ 3 { 4 "name": "proxy-container", 5 "image": "jwilder/nginx-proxy:alpine", 6 "cpu": 1, 7 "memory": 1, 8 "portMappings": [ 9 { 10 "containerPort": 80, 11 "hostPort": 80, 12 "protocol": "tcp" 13 } 14 ], 15 "essential": true, 16 "environment": [ 17 { 18 "name": "ECS_ENABLE_TASK_IAM_ROLE", 19 "value": "true" 20 } 21 ], 22 "mountPoints": [ 23 { 24 "sourceVolume": "docker_sock", 25 "containerPath": "/tmp/docker.sock", 26 "readOnly": true 27 } 28 ] 29 } 30 ], 31 "volumes" : [ 32 { 33 "name": "docker_sock", 34 "host": { 35 "sourcePath": "/var/run/docker.sock" 36 } 37 } 38 ], 39 "taskRoleArn":"arn:aws:iam::000000:role/nginx-proxy", 40 "family": "test-app-proxy" 41}

上記taskRoleArnは以下のポリシーをアタッチしました

  • AmazonEC2ContainerRegistryFullAccess
  • AmazonEC2ContainerServiceFullAccess
  • AmazonEC2ContainerServiceforEC2Role
  • AmazonEC2ContainerServiceRole

aws ecs task-runしているユーザーは

  • AdministratorAccess
  • policygen-20170511111111 (iam:PassRoleを許可するポリシー)
  • EC2インスタンスの再起動

###試したこと

  • sshで直接dockerを叩いた
    • →起動し続け、目的の動作を果たした
  • AWSサンプル実行時に自動作成されたecsInstanceRoleに上記のポリシーをアタッチした
    • →コンテナは死んだ
  • ecsInstanceRoleのARNをtaskRoleArnに指定
    • →同様のエラーメッセージが出た

###補足情報(言語/FW/ツール等のバージョンなど)
$ aws --version
aws-cli/1.11.77 Python/3.6.0 Windows/7 botocore/1.5.40

amzn-ami-2016.09.g-amazon-ecs-optimized (ami-62745007)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

taskRoleArnを記入しないと:
nginx-proxyが殺される

これの原因はハードメモリ制限を1に設定しているためのものでした
質問文の中の
"memory": 1"memoryReservation": 4と変えることで、殺されることなく動くようになります。
(memoryReservationは最低4MBのようです。またGUIではどちらか片方を必ず指定するようになっていました)

AWS/ECSコンソールから、終了したタスクの詳細を見ると、きちんと以下のように原因が書かれていました

STOPPED (OutOfMemoryError: Container killed due to memory u)

また以下の問題に関しましては、@lazhuward さんが指摘した部分が問題でした。詳しくはそちらをご覧ください。

taskRoleArnを記入すると:
aws ecs task-runするした時に以下のメッセージが出て起動できない

投稿2017/05/20 09:37

__banana

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

IAM > ロール > nginx-proxy信頼関係タブにある信頼されたエンティティ > 信頼関係の編集はどうなっていますか?
このようになっていますか?

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

投稿2017/05/18 05:59

lazhuward

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__banana

2017/05/20 09:17 編集

返信ありがとうございます。一歩前進いたしました。 ```JSON "Principal": { "Service": "ec2.amazonaws.com" }, ``` この部分が `"ecs.amazonaws.com"` になっており、これを `*ecs-tasks.amazonaws.com*` に書き換えたところ、以下のタスク実行時のエラーがなくなりました。 (ちなみに、 `"ec2.amazonaws.com"` でも同様に以下のエラーが生じました) > ECS was unable to assume the role that was provided for this task.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問