AWS ECS Anywhere 手把手教學,迎接 Architecture Anywhere 的時代

2021-06-02 未分類

這陣子的消息 Amazon ECS Anywhere – Now Generally Available 等到天花地老的 ECS Anywhere 終於 GA 了,Architecture Anywhere 的時代也準備要來臨了,即便很多人仍然在 Single Data Center 也可以看看在雲端的世界是如何 Scale 架構。今天這篇算是手把手教學,也是作者自己嘗試做一次的紀錄。

從架構圖來看可以得知 ECS Anywhere 是依靠 SSM Agent 和 ECS Agent 分別跟 System Manager 以及 Amazon ECS 溝通,在開始之前務必要先讀一下 Considerations 關於 ECS Anywhere 的限制,簡單概要說一下:

  • 1 個 On-Prem instance 只能註冊在 1 個 ECS Cluster
  • On-Prem instances 不支援 SELinuxECS Exec
  • On-Prem instances 必須能訪問 Amazon ECS Services,參考 Networking
    • ecs-a-*.${region}.amazonaws.com
    • ecs-t-*.${region}.amazonaws.com
    • ecs.${region}.amazonaws.com
    • 基於安全考量的人也可以考慮用 HTTP Proxy 在 ECS, SSM Agent 過一次白名單。
  • 不支援 AWS ELB, Service discovery 和 App Mesh
  • 支援 bridge, hostnone,不支援 awsvpc 模式 (因為不在 AWS 合情合理)
  • ECS Anywhere 目前仍不能在 ECS task 定義 GPU
  • 支援的 OS architectures
    • RHEL7, CentOS7 以上
    • Fedora 32 以上
    • SUSE Enterprise 15, openSUSE Tumbleweed
    • Ubuntu 18 以上
    • 以上版本 x86_64 或 ARM64 都支援
  • 其他細節請看 Considerations

On Prem instance Install by Vagrant

由於我是在 Macbook Pro 模擬環境,所以直接用 brew 安裝 Vagrant 搭配 Virtualbox 來跑一台 VM 模擬 On Prem instance:

$ brew install vagrant
$ vagrant init hashicorp/bionic64
$ vagrant up

三行指令 Vagrant 就幫你跑一台 Ubuntu 18.04 … 非常方便啊

ECS External instance Register

ECS Anywhere 在 Console 多出一個 Register External Instance 的功能,其實就是向 System Manager 發出一個 On Prem instance 的 Activation 註冊請求。

然後可以拿到一個 Command Script 拿去 On Prem instance 執行

這邊要注意 “每按一次 Register external instance” 都會向 System Manager 要一次 Activation,而 activation code 只有在 request 的 “當下” 可以拿到。

內容大概是這樣:

$ curl --proto "https" -o "/tmp/ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" \
    && bash /tmp/ecs-anywhere-install.sh \
    --region "us-east-1" --cluster "${ecs-cluster}" --activation-id ${activation-id} --activation-code ${yactivation-code}

ecs-anywhere-install.sh 這隻 script 幫你做完以下事情:

  • 安裝必要的系統套件 e.g. docker-ce, containerd.io, ca-certificates .. 等等
  • 安裝 SSM Agent 和 ECS Agent
  • SSM Agent 拿 activation-id 和 activation-code 註冊到 System Manager

安裝完成後 ECS Container instance 會多出一個 mi-* 的 instance 或是在 AWS CLI 查詢:

$ aws ecs list-container-instances --cluster ${your-ecs-cluster-name}

{ “containerInstanceArns”: [ “arn:aws:ecs:us-east-1:${accountId}:container-instance/${ecs-cluster}/02f6198817884d2f86e2bd2dd63c4a50” ] }

把 containerInstance Id 拿去查可以拿到 mi-* 的 instance-Id 代表是由 On Prem 註冊上來的

$ aws ecs describe-container-instances --cluster ${ecs-cluster} --container-instances 02f6198817884d2f86e2bd2dd63c4a50 | grep ec2InstanceId 

Instance ID 當 i-* 是由 AWS Managed EC2,而 mi-* 則是代表 External instance 註冊到 AWS 託管

在 On Prem 可以檢查幾項 Script 有沒有跑成功

  1. 檢查 ecs service 是否正常運行
$ systemctl status ecs.service

2. 檢查 ssm agent 是否正常運行

$ systemctl status amazon-ssm-agent.service

3. 檢查 Docker 安裝以及 ecs agent 是否正常運行

$ docker ps -f "name=ecs-agent" -f "status=running"

到這邊 ECS Anywhere 就大功告成成為 ECS Cluster 的一部分,怎麼跑 Task 就不在這篇細講,但 Task Definition 要注意必須重新定義 launch type 為 External ,包含 ECS Service 也是需要另外定義。

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱