web-dev-qa-db-ja.com

docker composer)を使用してAWSBeanstalkにdockerをデプロイします

AWS Beanstalkに複数のnode.jsマイクロサービスをデプロイしようとしていますが、それらを同じインスタンスにデプロイしたいと思います。複数のサービスを展開するのは初めてなので、いくつかの失敗があり、誰かに助けてもらう必要があります。そこで、最初にDockerコンテナにパッケージ化してみました。その間、docker composerを使用して構造を管理しています。仮想マシンでローカルに稼働していますが、beanstalkにデプロイすると、いくつかの問題が発生しました。

私が知っていること:

  1. マルチコンテナDockerとしてデプロイすることを選択する必要があることはわかっています。
  2. 複数のnode.jsサービスを管理するためのベストプラクティスは、dockercomposerを使用することです。
  3. Node.jsアプリにはdockerrun.aws.jsonが必要です。
  4. そのecsインスタンスのタスク定義を作成する必要があります。

私が問題を抱えているところ:

  1. Phpのdockerrun.aws.jsonテンプレートとtask_definition.jsonテンプレートしか見つからないため、これら2つのjsonファイルのnode.jsの構成が正しいかどうかを確認できません。
  2. docker-compose.ymldockerrun.aws.json、およびtask_definition.jsonが同様の仕事をしているようです。 task_definitionを保持する必要がありますが、それでもdockerrun.aws.jsonが必要ですか?
  3. Ecsでタスクを実行しようとしましたが、すぐに停止しました。タスクのログを確認するにはどうすればよいですか?

私が得た:

環境にecsタスク定義(または空の定義ファイル)が見つかりません

私の仕事はいつもすぐに止まるからです。ログを確認できれば、トラブルシューティングがずっと楽になります。

これが私のtask_definition.jsonです:

{
  "requiresAttributes": [],
  "taskDefinitionArn": "arn:aws:ecs:us-east-1:231440562752:task-definition/ComposerExample:1",
  "status": "ACTIVE",
  "revision": 1,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 100,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [
        {
          "containerPath": "/usr/share/nginx/html",
          "sourceVolume": "webdata",
          "readOnly": true
        }
      ],
      "name": "nginxexpressredisnodemon_nginx_1",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "nginxexpressredisnodemon_nginx",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": null,
      "cpu": 99,
      "privileged": null
    }
  ],
  "volumes": [
    {
      "Host": {
        "sourcePath": "/ecs/webdata"
      },
      "name": "webdata"
    }
  ],
  "family": "ComposerExample"
}
11
Lingbo Tang

同様の問題が発生し、含まれているフォルダーをArchive.Zipファイルに直接アーカイブしたため、Archive.Zipファイルに次の構造が含まれていることがわかりました。

RootFolder
    - Dockerrun.aws.json
    - Other files...

Amazon Beanstalkは、RootFolderのコンテンツのみをアーカイブし(フォルダー自体はアーカイブしない)、ECSタスク定義ファイルを認識することが判明しました。

お役に立てれば。

8
simdrouin

私にとっては、 AWSドキュメント で説明されているように、ファイルの名前が正確な大文字小文字と一致していることを確認するだけの場合でした。

dockerfile.aws.jsonは正確にDockerfile.aws.jsonである必要がありました

2
Chris

同様の問題。私にとってそれを修正したのは、自分自身を圧縮する代わりにCLIツールを使用し、eb deployを実行するだけでうまくいったことでした。

1
Sam H.

エラーのためここに着きました。私の問題は、以下を使用してラベルを使用してデプロイしていたことです。

eb deploy --label MY_LABEL

あなたがする必要があるのは'でデプロイすることです:

eb deploy --label 'MY_LABEL'
0
Remigiusz

私もこの問題を抱えています。私にとっての問題は、Dockerrun.aws.jsonがgitに追加されていないことでした。 eb deployはgitの存在を検出します。

私はこれを理解するためにeb deploy --verboseを実行しました:

INFO: Getting version label from git with git-describe
INFO: creating Zip using git archive HEAD

さらに、Zipに入るすべてのファイルが一覧表示されますが、Dockerrun.aws.jsonはありません。

git statusはこれを報告します:

On branch master
Your branch is up to date with 'Origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Dockerrun.aws.json

nothing added to commit but untracked files present (use "git add" to track)

ファイルをgitに追加してコミットすると役に立ちました。私の特定のケースでは、スクリプト展開で.gitディレクトリを削除するだけで済みます。

0
Jaap

私にとって、codecommitはノーでした。次に、Dockerrun.aws.jsonをgitに追加すると、機能します。

0
Mamun Hasan