我将ASP.NET Core Web API应用程序作为docker镜像部署到AWS ECS,因此请使用任务定义文件。
事实证明,只有当我使用我的EC2实例的公共DNS指定环境变量VIRTUAL_HOST
时,该应用才有效(如此处突出显示: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一切正常VIRTUAL_HOST
我会得到一个" 502 Bad Gateway"来自nginx / 1.13.0。现在,我想避免在taskdef文件中指定虚拟主机 - 这可能吗?我的问题是ASP.NET核心相关还是nginx相关?
答案 0 :(得分:0)
Amazon ECS拥有使用Amazon S3的秘密管理系统。您必须在ECS界面中创建一个秘密,然后您将能够在配置中将其作为环境变量引用。
{
"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)角色授予对ECS中存储的机密的访问权。
你也可以制作自己的NGinx Docker镜像,它已经包含了环境变量。
FROM nginx
LABEL maintainer YOUR_EMAIL
ENV "VIRTUAL_HOST" "ec2-xx-xxx-xxxxxx.compute1.amazonaws.com"
你只需要构建它,私下发送它然后用它来配置。