簡體   English   中英

使用端口轉發從本地到 AWS ECS 的 SSM 連接

[英]SSM connection from local to AWS ECS with Port Forwarding

我的 java 應用程序在 AWS ECS 容器中運行,8000 作為公開端口

我的ECS在私有Su.net下運行

我想像這樣通過 session 管理器連接到我的 ECS:

aws ssm start-session --target My-ECS-Instance-ID --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["8000"], "localPortNumber":["8000"]}' --region My-Region

而且這種聯系似乎毫無問題地建立起來了:

Starting session with SessionId: botocore-session-1******-09cf*********8
Port 8000 opened for sessionId botocore-session-1******-09cf*********8.

但不幸的是,當我 curl 這個 url 時:

curl -X GET "http://localhost:8000/api/user/9"

它生成以下 output:

curl:(52)來自服務器的空回復

對於來這里尋找一種方法將端口轉發到在 Fargate 中運行的任務(而不是 EC2 節點)的其他人,方法如下:

aws ssm start-session--target參數的文檔說您需要 EC2 實例 ID,但它也可以采用ecs:<cluster-name>_<task-id>_<container-runtime_id>格式的值ecs:<cluster-name>_<task-id>_<container-runtime_id>

請注意,ECS 任務角色需要以下權限才能正常工作

{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}

正如您的評論中提到的,您指定了ContainerPort: 8000而沒有 HostPort。 因此,EC2 盒子中的實際端口號會有所不同。 可以在此處找到更多詳細信息

請使用 SSM session manager 將 ssh 連接到 EC2 主機,然后運行sudo docker ps以找出正確的端口號。 然后,在您的aws ssm start-session命令中使用此值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM