AWS Beanstalkに複数のnode.jsマイクロサービスをデプロイしようとしていますが、それらを同じインスタンスにデプロイしたいと思います。複数のサービスを展開するのは初めてなので、いくつかの失敗があり、誰かに助けてもらう必要があります。そこで、最初にDockerコンテナにパッケージ化してみました。その間、docker composerを使用して構造を管理しています。仮想マシンでローカルに稼働していますが、beanstalkにデプロイすると、いくつかの問題が発生しました。
私が知っていること:
dockerrun.aws.json
が必要です。私が問題を抱えているところ:
dockerrun.aws.json
テンプレートとtask_definition.json
テンプレートしか見つからないため、これら2つのjsonファイルのnode.jsの構成が正しいかどうかを確認できません。docker-compose.yml
、dockerrun.aws.json
、およびtask_definition.json
が同様の仕事をしているようです。 task_definitionを保持する必要がありますが、それでもdockerrun.aws.jsonが必要ですか?私が得た:
環境に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"
}
同様の問題が発生し、含まれているフォルダーをArchive.Zipファイルに直接アーカイブしたため、Archive.Zipファイルに次の構造が含まれていることがわかりました。
RootFolder
- Dockerrun.aws.json
- Other files...
Amazon Beanstalkは、RootFolderのコンテンツのみをアーカイブし(フォルダー自体はアーカイブしない)、ECSタスク定義ファイルを認識することが判明しました。
お役に立てれば。
私にとっては、 AWSドキュメント で説明されているように、ファイルの名前が正確な大文字小文字と一致していることを確認するだけの場合でした。
dockerfile.aws.json
は正確にDockerfile.aws.json
である必要がありました
同様の問題。私にとってそれを修正したのは、自分自身を圧縮する代わりにCLIツールを使用し、eb deploy
を実行するだけでうまくいったことでした。
エラーのためここに着きました。私の問題は、以下を使用してラベルを使用してデプロイしていたことです。
eb deploy --label MY_LABEL
あなたがする必要があるのは'
でデプロイすることです:
eb deploy --label 'MY_LABEL'
私もこの問題を抱えています。私にとっての問題は、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
ディレクトリを削除するだけで済みます。
私にとって、codecommitはノーでした。次に、Dockerrun.aws.jsonをgitに追加すると、機能します。