2017-07-28 44 views
0

我將一個ASP.NET Core Web API應用程序作爲Docker映像部署到AWS ECS,因此請爲此使用任務定義文件。適用於AWS ECS的ASP.NET內核需要VIRTUAL_HOST

事實證明,如果我和我的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

  • 我的EC2實例的實際公共DNS在VIRTUAL_HOST一切工作正常
  • 沒有環境變量,我從nginx的/ 1.13.0
  • 得到「503服務暫時無法使用」,如果我把一個空字符串VIRTUAL_HOST我從nginx的/ 1.13收到「502網關錯誤」。 0。

現在,我想避免在taskdef文件中指定虛擬主機 - 這可能嗎?我的問題是ASP.NET Core相關還是nginx相關?

回答

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身份和訪問管理(IAM)的角色授予在ECS與存儲的祕密訪問。

Full blog post

你也可以讓自己的Nginx的碼頭工人的形象,這已經包含環境變量。

FROM nginx 
LABEL maintainer YOUR_EMAIL 

ENV "VIRTUAL_HOST" "ec2-xx-xxx-xxxxxx.compute1.amazonaws.com" 

而且您只需構建它,然後私下發貨,然後將其用於您的配置。

+0

您可能也可以在ECS Web界面中使用參數存儲。 –

+0

謝謝 - 我現在不太在意安全性,只是想避免在taskdef中指定更多的基礎結構細節 - 是否可以根本避免使用'VIRTUAL_HOST'?我更新了更具體的問題 – andreister

+0

嗯,我不能真正幫助你,因爲這涉及到ASP.NET(而不是NGinx)。 –