web-dev-qa-db-ja.com

AWS Dockerのデプロイ

ECSにカスタムDockerイメージをアップロードしました。私はこの問題を試すためのアクセス許可を公開しました(これが機能するようになったらもう一度ロックします)。 DockerイメージをElastic Beanstalkにデプロイしようとしています。 Docker対応のElastic Beanstalk環境をセットアップしています。 AWSのドキュメントによると、AWSからイメージを取得している場合、認証情報を渡す必要はありません。 Dockerrun.aws.jsonファイルをアップロードして、インストールしようとしました。それはエラーで失敗します:

インスタンスでコマンドが失敗しました。戻りコード:1出力:「us-east-1」のレジストリ「434875166128」のECRによる認証に失敗しました。フック/opt/elasticbeanstalk/hooks/appdeploy/pre/03build.shが失敗しました。詳細については、コンソールまたはEB CLIを使用して/var/log/eb-activity.logを確認してください。

/var/log/eb-activity.log情報には何も有用ではありません。

これが私のDockerrun.aws.jsonファイルです。

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
  "Name": "{id000xxxx}.dkr.ecr.us-east-1.amazonaws.com/my-repo:1.0.0",
  "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "4000"
    }
  ],
  "Logging": "/var/log/app-name"
}

また、S3でdockercfg.jsonファイルを使用して認証を追加してみました。それも私にはうまくいきませんでした。

私は個人アカウントではなくビジネスアカウントを使用しているため、不明な差異がいくつかある可能性があることに注意してください。

ありがとう!

更新:私のユーザーも現時点で完全な権限を持っているので、権限に関して邪魔になることはありません。

32
Nick Allen

私も同じ問題を抱えていました。

解決策:AWS -> IAM -> Roles - >で、Beanstalkが使用しているロールを選択します。

私の場合はaws-elasticbeanstalk-ec2-roleに設定されていました

ロールのPermissionsの下で、ポリシーをアタッチします:AmazonEC2ContainerRegistryReadOnly

ECRでは、このロールに権限を与える必要はありません。

59
Anter

Elastic Beanstalkのnewコンソールを使用して、Elastic Beanstalk(aws-elasticbeanstalk-ec2-role、aws-elasticbeanstalk-service-role、AWSServiceRoleForECS)に必要なサービスロールを初期化できます。これは、各AWSアカウントで1回だけ実行する必要があります。

  • Elastic beanstalkコンソールに移動します。
  • 「新しいデザイン」を受け入れます。コンソールの上部にある「新しいデザインを再テストしています」というメッセージが表示された場合は、新しいバージョンのコンソールの使用を受け入れます。警告、古いコンソールにロールバックできないようです。
  • 新しいアプリケーションの作成ウィザードを起動し、テクノロジーのデフォルトのサンプルアプリケーションを使用します。
  • 再開するまでウィザードのすべてのステップを完了し、セキュリティパネルを確認します。「aws-elasticbeanstalk-ec2-role」と「aws-elasticbeanstalk-service-role」の2つのロールが表示されます。ウィザードを終了してサンプルアプリを作成します。
  • しばらくすると、アプリケーションが実行されているはずです
  • 緊急の場合は、IAMコンソールに移動して、ロールaws-elasticbeanstalk-ec2-roleとaws-elasticbeanstalk-service-roleを削除し、ウィザードを再度実行してください。

「コマンドがインスタンスで失敗しました。戻りコード:1出力:レジストリのECRによる認証に失敗しました」およびその他の奇妙なエラー(「指定したAWSアクセスキーIDがレコードに存在しません。(ElasticBeanstalk :: ManifestDownloadError) ")NEWコンソールを使用する。私はまだ古いものでこのエラーがありました。

0
JayMore