從命令列將無伺服器容器部署到雲
Fargate是用來將容器部署到 AWS Fargate 的命令列介面。使用Fargate ,開發人員可以輕鬆操作 Fargate 服務,包括:部署應用程式(鏡像和環境變數)、監控部署、查看容器日誌、重新啟動和擴充。
您可以使用curl實用程式腳本或從發布頁面下載二進位檔案來安裝最新的穩定CLI。安裝後,您將獲得fargate
命令。
curl -s get-fargate.turnerlabs.io | sh
如果您想安裝最新的預發行版,請使用以下命令:
curl -s get-fargate.turnerlabs.io | RELEASE=develop sh
預設情況下,fargate 使用us-east-1 ,因為這是 AWS Fargate 可用的單一區域。 CLI 接受 --region 參數以供將來使用,並將遵循AWS_REGION和AWS_DEFAULT_REGION環境設定。請注意,指定所有必需服務均不可用的區域將傳回錯誤。
請參閱區域表,以了解哪些區域提供哪些服務的詳細資訊。
Fargate 使用 AWS SDK for Go 構建,它在以下位置尋找憑證:
環境變數
共享憑證文件
EC2 執行個體設定檔
有關更多信息,請參閱 AWS SDK for Go 文件中的指定憑證。
指定參數的方法有多種。每個項目優先於其下面的項目:
CLI 參數(例如--cluster my-cluster
)
環境變數(例如FARGATE_CLUSTER=my-cluster
)
fargate.yml
(例如,如下)
cluster : my-cluster
service : my-service
task : my-task
rule : my-event-rule
verbose : false
nocolor : true
旗幟 | 短的 | 預設 | 描述 |
---|---|---|---|
- 簇 | -c | ECS叢集名稱 | |
- 地區 | 美國東部1 | AWS 區域 | |
--無顏色 | 錯誤的 | 禁用顏色輸出 | |
--詳細 | -v | 錯誤的 | 詳細輸出 |
服務管理在 AWS Fargate 上執行的長期容器執行個體。如果您的容器因任何原因退出,服務排程器將重新啟動您的容器並確保您的服務運作所需數量的任務。服務可以與負載平衡器搭配使用,以在服務中的任務之間分配流量。
旗幟 | 短的 | 預設 | 描述 |
---|---|---|---|
- 服務 | -s | ECS服務名稱 |
fargate service list
列出服務
fargate service deploy [--image <docker-image>]
將新鏡像部署到服務
可以透過 --image 標誌指定要在服務中使用的 Docker 容器映像。
fargate service deploy [--file docker-compose.yml]
將 docker compose 檔案中定義的映像、環境變數和機密部署到服務
將 docker 映像和 docker compose 檔案中定義的環境變數作為一個單元一起部署。請注意,環境變數和機密將替換為撰寫文件中的內容。
可以將機密定義為 docker compose 檔案擴充欄位x-fargate-secrets
下的鍵值對。若要使用擴充字段,撰寫檔案版本必須至少為2.4
(對於 2.x 系列)或至少為3.7
(對於 3.x 系列)。
這允許您在本地運行docker-compose up
來運行您的應用程序,就像在 AWS 中運行一樣。請注意,雖然 docker-compose yaml 配置支援多種選項,但僅將映像和環境變數部署到 Fargate。如果 docker compose 檔案定義了多個容器,您可以使用標籤aws.ecs.fargate.deploy: 1
來指示您要部署哪個容器。例如:
version : " 3.7 "
services :
web :
build : .
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-service:0.1.0
ports :
- 80:5000
environment :
FOO : bar
BAZ : bam
env_file :
- hidden.env
x-fargate-secrets :
QUX : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : 1
redis :
image : redis
fargate service info
檢驗服務
顯示服務的擴充訊息,包括負載平衡器配置、活動部署、環境變數和機密。
部署顯示正在執行的服務的活動版本。如果服務因部署或更新配置(例如 CPU、記憶體或環境變數)而發生轉換,則會顯示多個部署。
fargate service logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--time] [--no-prefix]
顯示服務中任務的日誌
使用 --follow 選項即時傳回服務日誌的特定片段或尾部日誌。日誌以其日誌流名稱為前綴,格式為「fargate/<service-name>/<task-id>」。
Follow 將繼續運行並傳回日誌,直到被 Control-C 中斷。如果傳遞了--follow,則無法指定--end。
透過 --task 標誌傳遞任務 ID,可以傳回服務中特定任務的日誌。多次傳遞 --task 和任務 ID 以便從多個特定任務檢索日誌。
可以透過傳遞 --start 和 --end 選項以及時間表達式來請求特定的日誌視窗。時間表達式可以是持續時間或時間戳記:
您可以透過 --filter 標誌傳遞過濾器表達式來過濾特定術語的日誌。傳遞單一術語以搜尋該術語,傳遞多個術語以搜尋包含所有術語的日誌訊息。有關更多詳細信息,請參閱 CloudWatch Logs 文件。
--time 在輸出中包含日誌時間戳
--no-prefix 從輸出排除日誌流前綴
fargate service ps
列出服務正在運行的任務
fargate service scale <scale-expression>
擴展服務中的任務數量
透過給定的比例表達式來變更要在服務中執行的所需任務的數量。比例表達式可以是絕對數字,也可以是符號(例如 +5 或 -2)指定的增量。
fargate service env set [--env <key=value>] [--file <pathname>]
[--secret <key=valueFrom>] [--secret-file <pathname>]
設定環境變數和秘密
必須透過 --env、--file、--secret 或 --secret-file 標誌至少指定一個環境變數或機密。您可以透過在每個變數之前重複--env 來在命令列上指定任意數量的變量,或將多個變數放入文字檔案中,每行一個,並使用--file 和/或--secret- file 指定檔名。
檔案中的每個 --env 和 --secret 參數字串或行必須採用「key=value」的形式,且「=」周圍沒有引號,也沒有空格,除非您希望值中出現文字前導空格。此外,「key」端必須是合法的 shell 標識符,這意味著它必須以 ASCII 字母 AZ 或下劃線開頭,並且僅包含字母、數字和底線。
每個 --secret 標誌的「key=value」中的「值」應將 ARN 引用到 AWS Secrets Manager 金鑰或 AWS Systems Manager Parameter Store 參數。
fargate service env unset --key <key-name>
取消設定環境變數和機密
取消設定透過 --key 標誌指定的環境變數或機密。多次指定 --key 和鍵名以取消設定多個變數。
fargate service env list
顯示環境變數
旗幟 | 短的 | 預設 | 描述 |
---|---|---|---|
- 中央處理器 | 為每個任務分配的 CPU 單元數量 | ||
- 記憶 | -m | 為每個任務分配的 MiB 數量 |
fargate service update [--cpu <cpu-units>] [--memory <MiB>]
更新服務配置
CPU 和記憶體設定分別使用 --cpu 和 --memory 標誌指定為 CPU 單位和兆位元組。每 1024 個 CPU 單元相當於一個 vCPU。 AWS Fargate 僅支援某些 CPU 和記憶體配置組合:
CPU(CPU單元) | 內存 (MiB) |
---|---|
256 | 512、1024 或 2048 |
第512章 | 1024 到 4096(以 1GiB 為增量) |
1024 | 2048 到 8192(以 1GiB 為增量) |
2048 | 4096 到 16384(以 1GiB 為增量) |
4096 | 8192 到 30720(以 1GiB 為增量) |
必須至少指定 --cpu 或 --memory 之一。
fargate service restart
重啟服務
為服務建立一組新任務並停止先前的任務。例如,如果您的服務需要重新載入從外部來源快取的數據,這非常有用。
旗幟 | 短的 | 預設 | 描述 |
---|---|---|---|
- 任務 | -t | 任務定義系列 |
任務是容器的一次性執行。您的任務執行個體將一直執行,直到您透過 AWS API、AWS 管理主控台手動停止它們,或直到它們因任何原因中斷。
fargate task register [--image <docker-image>]
[-e KEY=value -e KEY2=value] [--env-file dev.env]
[--secret KEY3=valueFrom] [--secret-file secrets.env]
根據任務系列的最新版本為指定的 docker 映像、環境變數或金鑰註冊新的任務定義,並傳回新的版本號。
可以透過 --image 標誌指定新任務定義中使用的 Docker 容器映像。
可以使用一個或多個--env
標誌或--env-file
標誌來指定環境變數。
可以使用一個或多個--secret
標誌或--secret-file
標誌來指定機密。
fargate task register [--file docker-compose.yml]
使用 docker compose 檔案中定義的映像、環境變數和金鑰註冊新的任務定義。請注意,環境變數將替換為 compose 檔案中的內容。
可以將機密定義為 docker compose 檔案擴充欄位x-fargate-secrets
下的鍵值對。若要使用擴充字段,撰寫檔案版本必須至少為2.4
(對於 2.x 系列)或至少為3.7
(對於 3.x 系列)。
如果 docker compose 檔案定義了多個容器,您可以使用標籤aws.ecs.fargate.deploy: 1
來指示您要部署哪個容器。
fargate task describe
描述指令以 Docker Compose 格式描述任務定義。 Docker 映像、環境變數、秘密和目標連接埠是映射的元素。
此指令對於查看task register
、 service deploy
或service env set
指令所做的變更非常有用。它還可用於在本地運行任務定義以進行偵錯或故障排除。
fargate task describe -t my-app > docker-compose.yml
docker-compose up
您可以使用fargate.yml
檔、 FARGATE_TASK
環境變數或使用-t
標誌(包括可選修訂號)來指定任務定義系列。
fargate task describe -t my-app
fargate task describe -t my-app:42
輸出範例:
version : " 3.7 "
services :
app :
image : 1234567890.dkr.ecr.us-east-1.amazonaws.com/my-app:1.0
ports :
- published : 8080
target : 8080
environment :
AWS_REGION : us-east-1
ENVIRONMENT : dev
FOO : bar
x-fargate-secrets :
KEY : arn:key:ssm:us-east-1:000000000000:parameter/path/to/my_parameter
labels :
aws.ecs.fargate.deploy : " 1 "
fargate task logs [--follow] [--start <time-expression>] [--end <time-expression>]
[--filter <filter-expression>] [--task <task-id>]
[--container-name] [--time] [--no-prefix]
顯示任務日誌
假設 cloudwatch 日誌組有以下約定: fargate/task/<task>
,其中task
是透過--task
、fargate.yml 或環境變數選項指定的
使用 --follow 選項即時傳回任務日誌或尾部日誌的特定片段。日誌以其日誌流名稱為前綴,格式為fargate/<container-name>/<task-id>.
--container-name
可讓您在任務定義中指定要取得日誌的容器(預設為app
)
Follow 將繼續運行並傳回日誌,直到被 Control-C 中斷。如果傳遞了--follow
則無法指定--end
。
透過--task
標誌傳遞任務 ID 可以傳回特定任務的日誌。多次傳遞--task
和任務 ID 以便從多個特定任務檢索日誌。
可以透過傳遞--start
和--end
選項以及時間表達式來請求特定的日誌視窗。時間表達式可以是持續時間或時間戳記:
您可以透過--filter
標誌傳遞過濾器表達式來過濾特定術語的日誌。傳遞單一術語以搜尋該術語,傳遞多個術語以搜尋包含所有術語的日誌訊息。
--time
在輸出中包含日誌時間戳
--no-prefix
從輸出排除日誌流前綴
旗幟 | 短的 | 預設 | 描述 |
---|---|---|---|
- 規則 | -r | CloudWatch 事件規則 |
events
指令提供了使用 CloudWatch Events 的子命令(排程任務等)
fargate events target --revision <revision>
透過更新規則目標的EcsParameters.TaskDefinitionArn
,「部署」(導致下一個事件規則呼叫運行新版本)對 CloudWatch 事件規則的任務定義修訂。
典型的 CI/CD 系統可能會執行以下操作:
REVISION=$(fargate task register -i 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:${VERSION}-${CIRCLE_BUILD_NUM} -e FOO=bar)
fargate events target -r ${REVISION}