适用于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
  • 如果我把一个空stringVIRTUAL_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。