You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK创建EC2启动模板时自动生成额外用户数据,如何移除?

解决AWS CDK自动生成额外用户数据的问题

我之前也碰到过一模一样的情况!CDK悄悄给LaunchTemplate塞了一堆安装CodeDeploy Agent和AWS CLI的脚本,结果在RHEL上因为包名不兼容直接报错。下面分两种场景给你解决方案:

场景1:你的栈中用到了CodeDeploy部署组

如果是因为你在栈里创建了ServerDeploymentGroup并关联了这个LaunchTemplate,CDK会默认自动添加安装CodeDeploy Agent的脚本到用户数据里。要关闭这个自动行为,只需要在创建ServerDeploymentGroup时加上installAgent: false参数:

new aws_codedeploy.ServerDeploymentGroup(this, 'MyDeploymentGroup', {
  // 其他必要参数(比如关联的EC2实例标签、服务角色等)
  installAgent: false, // 关键:禁用CDK自动安装CodeDeploy Agent的逻辑
});

设置之后,CDK就不会再给你的LaunchTemplate追加那些自动生成的冗余脚本,你可以完全自主控制UserData的内容。

场景2:未使用CodeDeploy但仍自动生成脚本

如果你的栈里根本没涉及CodeDeploy,那大概率是CDK的默认逻辑在暗中追加内容。这时候你可以直接用自定义用户数据彻底覆盖默认行为,把ec2.UserData.forLinux()换成ec2.UserData.custom(),确保只有你编写的命令会被加入:

// 使用custom()创建完全自定义的用户数据,开头记得加#!/bin/bash指定解释器
const userData = ec2.UserData.custom(`#!/bin/bash
yum -y update
# 在这里添加你自己的CodeDeploy Agent安装命令,比如适配RHEL的版本:
yum install -y ruby
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
chmod +x ./install
./install auto
`);

new aws_ec2.LaunchTemplate(this, 'LaunchTemplate', {
  machineImage: ec2.MachineImage.lookup({
    name: 'RHEL-8.6.0_HVM-20220503-x86_64-2-Hourly2-GP2',
  }),
  userData: userData,
  // 其他配置参数...
});

额外提示

如果你之前已经部署过栈,修改UserData后不用担心更新问题——CDK默认会把UserData的变化视为需要替换LaunchTemplate(userDataCausesReplacement默认值为true),部署时会自动创建新的LaunchTemplate版本,旧版本不会影响新实例的启动。

内容的提问来源于stack exchange,提问作者Varid Vaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:37:51