如何解決 Fargate 上 Amazon ECS 的網路介面佈建錯誤?
我想解決 AWS Fargate 上 Amazon Elastic Container Service (Amazon ECS) 的網路介面佈建錯誤。
簡短說明
當 Fargate 與基礎主機出現間歇性 API 問題時,您可能會收到以下錯誤:
- 如果 Fargate 服務嘗試將彈性網路介面附加至要執行任務的基礎結構,則您可能會收到下列錯誤訊息: 「等待網路介面佈建完成已逾時。」
- 如果您的 Fargate 任務因為未在任務佈建狀態期間建立彈性網路介面而無法啟動,則您可能會收到下列錯誤訊息: 「網路介面佈建完成錯誤等待網路介面佈建已逾時。」
**注意:**在與 Fargate 任務相同的子網路中](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)手動建立測試[彈性網路介面,以判斷彈性網路的建立是否有任何問題。您也可以查看 AWS 服務運作狀態儀表板以瞭解 API 問題。
解決方法
如果 Fargate 任務是 ECS 服務的一部分,則 ECS 服務排程器會嘗試再次自動啟動任務。
使用 RunTask API 啟動的任務涉及非同步工作流程。如果工作流程成功啟動,則會傳回成功代碼。任務並不表示它處於執行中狀態。使用 RunTask API 手動啟動的任務需要手動重試。
透過使用 AWS Step Functions,可透過指數退避和重試邏輯來自動化重試次數。
要建立以同步方式執行 ECS RunTask 作業的 Step Function,請執行下列步驟:
-
選擇 Create State Machine。
-
選擇 Write your workflow in code。
-
為類型選擇標準。如需不同工作流程類型的詳細資訊,請參閱標準工作流程 vs.快速工作流程。
-
將定義區段的預設內容取代為下列程式碼:
{ "Comment": "Synchronous RunTask ", "StartAt": "Run Synchronous ECS Task", "TimeoutSeconds": 3600, "States": { "Run Synchronous ECS Task": { "Type": "Task", "Resource": "arn:aws:states:::ecs:runTask.sync", "Parameters": { "LaunchType": "FARGATE", "Cluster": "<ECS_CLUSTER_ARN>", "TaskDefinition": "<TASK_DEFINITION_ARN>", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "<SUBNET_1>", "<SUBNET_2>", ], "AssignPublicIp": "<ENABLED or DISABLED>" } } }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 10, "MaxAttempts": 3, "BackoffRate": 2 } ], "Next": "Notify Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Failure" } ] }, "Notify Success": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "AWS ECS Task started by Step Functions reached a RUNNING state", "TopicArn": "<SNS_TOPIC_ARN>" }, "End": true }, "Notify Failure": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "AWS ECS Task started by Step Functions failed to reach a RUNNING state", "TopicArn": "<SNS_TOPIC_ARN>" }, "End": true } } }
6. 選擇下一步。
-
輸入狀態機器的名稱。
-
選擇一個角色來執行狀態機器並關聯資源。最佳做法是選取使用必要最低權限的角色,並僅包含 IAM 政策所需的許可。
下列程式碼範例顯示最低權限:
ECS 政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "arn:aws:ecs:*:123456789:task-definition/<TASK_DEFINITION>" ], "Condition": { "ArnLike": { "ecs:cluster": "arn:aws:ecs:*:123456789:cluster/<ECS " } } }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "*" ], "Condition": { "StringLike": { "iam:PassedToService": "ecs-tasks.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "ecs:StopTask", "ecs:DescribeTasks" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:us-east-1:123456788:rule/StepFunctionsGetEventsForECSTaskRule" ] } ] }
SNS 政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-1:12345678:<TOPIC>" ] } ] }
Amazon CloudWatch 政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" } ] }
-
選擇您的日誌級別。這將建立必要的 Amazon CloudWatch 日誌串流。
-
選擇建立狀態機器。
整合您的 Step Function 與 CloudWatch
-
打開 Amazon Eventbridge 主控台。
-
在導覽面板中,選擇事件,然後選擇規則。
-
選擇建立規則。
-
選擇排程。如果您想要具有事件導向的回應,也可以選擇事件。若要深入了解,請參閱 CloudWatch 事件中的事件模式。
-
選擇新增目標。
-
從下拉列表中選擇 Step Function 狀態機器。
-
選擇您建立的狀態機器。
-
選擇具有適當權限的角色來執行狀態機器。
-
選擇設定詳細資訊,並提供規則的名稱和說明。
-
選擇建立規則。
相關內容
- 已提問 3 個月前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 4 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 年前