3

私は弾力のあるbeanstalkにマルチコンテナアプリケーションを展開したいと思います。次のエラーが表示されます。弾性BeanStalk MultiContainerドッカーが失敗する

Error 1: The EC2 instances failed to communicate with AWS Elastic Beanstalk, either because of configuration problems with the VPC or a failed EC2 instance. Check your VPC configuration and try launching the environment again.

は、私はちょうどパブリックサブネットと、インバウンドとアウトバウンドの両方のすべてのトラフィックを許可するセキュリティグループとVPCを設定しています。私はこれが生産レベルの展開には推奨されないことを知っていますが、私はエラーの原因を見つけるために複雑さを減らしました。

したがって、ロードバランサとEC2インスタンスは、インターネットゲートウェイに接続されているのと同じパブリックサブネット内にあります。両者は、すべてのトラフィックを許可する同じセキュリティグループを共有します。

上記のエラーの前に、私もエラー2を知らせる別のエラーを取得:環境

が見つかりませんECSのタスク定義(または空の定義ファイル)は、私は私のDockerrun.aws.jsonバンドルされている、と述べましたBeanstalkがデプロイメントに使用するソースバンドル内の.ebextensionsフォルダでファイルします。すべてのこれらのエラーの後 、二つの質問へのドリルダウン:

  1. 私はcontainerDefinitionsを含む私のdockerrun.aws.jsonファイルをパッケージ化しているときませECSタスクエラーは、表示されない理由私は理解できないのですか?
  2. 実行中のecsタスクがないため、インスタンス内で実行中のものはありません。これは、なぜbeanstalkとELBがインスタンスに通信できないのですか? (私のパブリックサブネットとすべてのトラフィックセキュリティグループが問題ではないと仮定して)

答えて

2

問題はVPCでした。私はパブリックサブネットだけで単純なVPCを持っていても、BeanStalkはインスタンスと通信できないため、インスタンスにECSタスク定義とドッキングコンテナを配置することはできません。

パブリックとプライベートの2つのサブネットを作成し、プライベートサブネット内のインスタンスのルーターになるパブリックサブネットにNATインスタンスを作成することによって、上記のセットアップを私のために働かせて、プライベートサブネットのEC2インスタンスにECSタスク定義を正常にデプロイできました。

1

同じエラーが発生したため、この質問が見つかりました。ここでは、実際に豆の木のマルチコンテナアプリを展開する私のために働いた手順は次のとおりです。

を過去にこの特定のエラーを取得するには、私はeb CLIツールを使用していました。何らかの理由で、私自身を圧縮してアップロードする代わりにeb deployを使用すると、これが修正されました。それは実際には機能しませんでしたが、それは私に新しい誤りを与えました。

したがって、私は、については、についてのエラーを停止するまで、より多くのドキュメントが必要なファイル形式を変更しました。

さらに、私はさらに良いエラーが発生しました! this part of the docsパー

ERROR: [Instance: i-0*********0bb37cf] Command failed on instance. 
Return code: 1 Output: (TRUNCATED)..._api_call 
raise ClientError(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred (AccessDenied) when 
calling the GetObject operation: Access Denied 
Failed to download authentication credentials [config file name] from [bucket name]. 
Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/02update- 
credentials.sh failed. For more detail, check /var/log/eb-activity.log 
using console or EB CLI. 

これを解決する方法は

  1. オープンにIAMコンソールでRolesページです。

  2. aws-elasticbeanstalk-ec2-roleを選択します。

  3. [権限]タブの[管理されたポリシー]で、[ポリシーを添付]を選択します。

  4. アプリケーションが使用する追加サービスの管理ポリシーを選択します。たとえば、AmazonS3FullAccessまたはAmazonDynamoDBFullAccessです。 (私たちの問題については、S3の場合)

  5. アタッチポリシーを選択します。 (まあ、覚えておいてください、私は手紙にこれを行う方法のthe instructionsに従うことを試みたが、)Authentication credentials are not in JSON format as expected. Please generate the credentials using 'docker login'.は:

この部分は、私はまだ別のエラーを得たので、本当にエキサイティングです。これは私の上にあったことがわかりましたが、S3に格納されているDockerHub認証ファイルにJSONの形式が正しくありませんでした。私は構文チェックを得るためにファイル名をdockercfg.jsonに変更しました。この時点で... CannotPullContainerError: Error: image [DockerHub organization]/[repo name]:latest not found)という別のエラーがあったため、Beanstalk/ECSは.jsonという名前の部分でOKです。うーん、タイプミスがあったのかもしれない?確認してみましょう:

$ docker run -it [DockerHub organization]/[repo name]:latest 
Unable to find image '[DockerHub organization]/[repo name]:latest' locally 
latest: Pulling from [DockerHub organization]/[repo name] 

[OK]をレポします。だから...私の認証は悪いですか?うん、私はあなたがをしてはならないDockerHubのauthドキュメントの例に従ったことが分かります。あなたのdockercfg.json

{ 
    "https://index.docker.io/v1/": { 
    "auth": "ZWpMQ=Vyd5zOmFsluMTkycN0ZGYmbn=WV2FtaGF2", 
    "email": "[email protected]" 
    } 
} 

ようになっているはずがあり、さらにいくつかのエラーが(ボリュームsourcePathは絶対パスである必要があります!それはinvalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowedメッセージは何を意味するかだ)だったが、それは最終的に展開します。小説のために申し訳ありません。それが誰かを助けることを望んでいる。

+0

https://github.com/micahhausler/container-transformはDockerrun.aws.json形式で本当に役立ちました –

関連する問題