适用于AWS ECS的ASP.NET Core需要VIRTUAL_HOST
我将一个ASP.NET Core Web API应用程序作为Docker镜像部署到AWS ECS,因此请使用任务定义文件。
事实certificate,只有当我指定环境variablesVIRTUAL_HOST
与我的EC2实例的公共DNS(如在这里突出显示: http : //docs.servicestack.net/deploy-netcore-docker-aws-ecs ),请参阅taskdef.json
下面:
{ "family": "...", "networkMode": "bridge", "containerDefinitions": [ { "image": "...", "name": "...", "cpu": 128, "memory": 256, "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 0, "protocol": "http" } ], "environment": [ { "name": "VIRTUAL_HOST", "value": "ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com" } ] } ] }
一旦应用程序部署到AWS ECS,我打到端点 – 例如http://ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com/v1/ping
- 与
VIRTUAL_HOST
的我的EC2实例的实际公共DNS都正常工作 - 没有envvariables我得到“503服务暂时不可用”从nginx / 1.13.0
- 如果我把一个空string
VIRTUAL_HOST
我得到一个“502错误的网关”从nginx / 1.13.0。
现在,我想避免在taskdef文件中指定虚拟主机 – 这可能吗? 我的问题是ASP.NET核心相关还是nginx相关?
Amazon ECS拥有使用Amazon S3的秘密pipe理系统。 您必须在您的ECS界面中创build一个秘密,然后才能在您的configuration中将其作为环境variables进行引用。
{ "family": "...", "networkMode": "bridge", "containerDefinitions": [ { "image": "...", "name": "...", "cpu": 128, "memory": 256, "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 0, "protocol": "http" } ], "environment": [ { "name": "VIRTUAL_HOST", "value": "SECRET_S3_VIRTUAL_HOST" } ] } ] }
将机密信息存储在Amazon S3上,并使用AWS Identity and Access Management(IAM)angular色授予对ECS中存储的机密的访问权限。
完整的博客文章
您也可以制作自己的NGinx Docker镜像,该镜像将包含环境variables。
FROM nginx LABEL maintainer YOUR_EMAIL ENV "VIRTUAL_HOST" "ec2-xx-xxx-xxxxxx.compute1.amazonaws.com"
而且你只需要build立它,私下发货,然后用它来进行configuration。