如何通过AWS::CloudFormation::Init的yum配置安装本地rpm包
AWS::CloudFormation::Init 的 packages 模块下的yum配置段不支持直接指定本地文件系统中的rpm包完成安装。
该配置段的yum字段仅接受两类有效值:
- 系统已配置yum源内收录的软件包名,可附带指定版本号
- 实例网络可直接访问的rpm包远程直链URL
如果直接在yum字段下填写本地rpm文件路径,cfn-init会将该字符串识别为软件包名称,到所有已配置的yum源中检索匹配,最终会因找不到对应包报错,无法触发本地文件安装逻辑。
要实现本地rpm包的自动化安装,可以通过以下配置方案实现:
- 提前将本地rpm包上传至EC2实例可访问的存储位置(最常用的是同账号下的S3存储桶),同时为EC2绑定的IAM实例角色授予对应S3路径的
s3:GetObject读取权限 - 在
AWS::CloudFormation::Init的files配置段定义文件下发规则,将rpm包从存储位置下载到实例本地固定路径 - 在
commands配置段编写本地rpm的yum安装命令。cfn-init默认会按「packages -> groups -> users -> sources -> files -> commands」的顺序执行配置,因此无需额外调整执行优先级,即可保证包下载完成后再触发安装。
对应的参考配置框架如下:
'AWS::CloudFormation::Init': configSets: Install: - install install: files: # 将rpm包下载到实例本地/opt目录 "/opt/myfile.rpm": source: "s3://your-bucket-name/path/to/myfile.rpm" # 替换为实际存储rpm的S3路径 mode: "0644" owner: root group: root commands: install-local-rpm: command: "yum install /opt/myfile.rpm -y" cwd: "/opt"
如果你的rpm包存放在实例可直接匿名访问的HTTP/HTTPS服务上,也可以使用简化配置,直接将rpm直链写到yum配置段中,cfn-init会自动完成下载、依赖解决和安装流程,配置示例如下:
install: packages: yum: myfile: "https://your-service-domain/path/to/myfile.rpm"
注意不要使用带过期时效的预签名URL填写在该位置,避免URL过期后后续堆栈更新、实例替换时出现安装失败问题。
内容的提问来源于stack exchange,提问作者denver
相关产品推荐
相关产品推荐

