要自助管理 AWS EKS 集群中的 EC2 实例补丁,你可以使用 AWS Systems Manager 的 Patch Manager 功能。下面是一个包含代码示例的解决方法。
创建一个 IAM 角色,并为该角色附加适当的权限,以便 EC2 实例能够访问 Systems Manager 的 Patch Manager 功能。
创建一个 Lambda 函数,用于触发 EC2 实例的补丁管理任务。以下是一个示例的 Node.js Lambda 函数代码:
const AWS = require('aws-sdk');
const ssm = new AWS.SSM();
exports.handler = async (event, context) => {
// 获取 EC2 实例 ID
const instanceId = event.detail["instance-id"];
try {
// 创建补丁管理任务
const command = await ssm.sendCommand({
DocumentName: "AWS-RunPatchBaseline", // 补丁基线文档
Targets: [{
Key: "InstanceIds",
Values: [instanceId]
}],
MaxConcurrency: "50",
MaxErrors: "0"
}).promise();
console.log("Patch management task created: ", command.Command.CommandId);
} catch (error) {
console.error("Failed to create patch management task: ", error);
}
};
Resources:
PatchManagementRule:
Type: AWS::Events::Rule
Properties:
Description: "Patch management rule"
EventPattern:
source:
- "aws.ec2"
detail-type:
- "EC2 Instance State-change Notification"
detail:
state:
- pending
- running
- stopped
State: ENABLED
Targets:
- Arn: "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME"
Id: "PatchManagementTarget"
将其中的 REGION
、ACCOUNT_ID
和 FUNCTION_NAME
替换为你的实际值。
这样,当 EC2 实例的状态发生变化时,CloudWatch Events 规则将触发 Lambda 函数,并创建一个 Patch Manager 任务来管理该实例的补丁更新。
上一篇:AWS EKS 主集群安全组