如何将AWS SSM参数值注入Webpack构建流程
将AWS SSM参数值注入HtmlBundlerPlugin模板的实现方案
因为获取AWS SSM参数是异步操作,你需要把Webpack配置改成异步函数来处理这个流程,具体步骤如下:
调整Webpack配置为异步函数
Webpack支持导出异步函数作为配置,这样可以先完成SSM参数的获取,再初始化HtmlBundlerPlugin。整合SSM参数获取逻辑
在配置函数中调用你的get_ssm_parameter函数,拿到参数值后传入插件的data字段。注意要给SSM客户端指定正确的AWS区域,否则会触发权限或连接错误。模板中使用参数值
确保你的HTML模板使用HtmlBundlerPlugin支持的语法引用customer_name变量(比如EJS风格的<%= customer_name %>)。
完整的配置示例:
import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm"; import HtmlBundlerPlugin from 'html-bundler-webpack-plugin'; // 封装SSM参数获取函数,添加区域配置并返回实际参数值 async function get_ssm_parameter(ssm_parameter_name) { const client = new SSMClient({ region: '你的AWS区域' }); // 替换为实际区域,如us-east-1 const input = { Name: ssm_parameter_name, WithDecryption: true, }; const command = new GetParameterCommand(input); const response = await client.send(command); return response.Parameter.Value; } // 导出异步Webpack配置函数 export default async () => { // 提前获取SSM参数,添加错误捕获避免构建中断 let customerName = '默认值'; try { customerName = await get_ssm_parameter("/bar/foo"); } catch (err) { console.error('获取SSM参数失败:', err); } return { // ...其他Webpack基础配置(mode、output、module等) plugins: [ new HtmlBundlerPlugin({ entry: [ { import: './src/views/index.html', filename: 'index.html', data: { customer_name: customerName }, // 将SSM参数值传入模板 } ], // ...其他HtmlBundlerPlugin配置 }) ] }; };
额外说明:
- 构建环境需要配置AWS访问权限(比如设置
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量),否则无法调用SSM接口。 - 如果你的Webpack版本较低,可能需要使用
module.exports替代export default,并将异步函数包装在Promise中。
内容的提问来源于stack exchange,提问作者alexis
相关产品推荐
相关产品推荐

