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

如何让Pulumi函数仅在pulumi up实际部署时运行而非预览阶段?

在Pulumi中仅在实际部署阶段执行自定义代码

核心解决方案:利用pulumi.runtime.isDryRun()

Pulumi提供pulumi.runtime.isDryRun()方法判断当前是否处于Dry Run模式——该模式包含pulumi preview命令,以及pulumi up执行过程中用户确认前的规划阶段。只有当用户确认部署、开始实际向云端创建/修改资源时,isDryRun()才会返回false,此时可执行你的自定义AWS SDK代码。

直接修改代码如下:

const pulumi = require("@pulumi/pulumi");

// 仅在实际部署阶段执行资源策略操作
if (!pulumi.runtime.isDryRun()) {
    myAwsModule.putResourcePolicy({
        policyName: "AWSLogDeliveryWrite20150319",
        // 补充其他必要参数
    });
}

替代方案:使用@pulumi/command资源

如果需要更严格的执行控制(比如确保代码执行的幂等性或依赖其他资源状态),可将自定义代码封装成脚本,通过@pulumi/command的LocalCommand资源执行。该资源默认不会在Dry Run阶段运行,仅在实际部署时触发:

  1. 创建单独的脚本文件set-resource-policy.js:
// set-resource-policy.js
const myAwsModule = require("./path-to-your-aws-module");

async function run() {
    // 可添加前置检查逻辑(如判断策略是否已存在)保证幂等性
    await myAwsModule.putResourcePolicy({
        policyName: "AWSLogDeliveryWrite20150319",
        // 其他参数
    });
}

module.exports = { run };
  1. 在Pulumi栈文件中调用该脚本:
const command = require("@pulumi/command");

new command.local.Command("apply-log-delivery-policy", {
    create: "node -e \"require('./set-resource-policy.js').run()\"",
    // 可选:设置触发器,确保仅在必要时重新执行
    triggers: [Date.now().toString()],
});

注意事项

  • 这类命令式代码脱离了Pulumi的声明式状态管理,需自行处理幂等性(比如先检查资源策略是否存在,再决定是否执行put操作),避免重复执行导致异常。
  • 确保执行代码的环境拥有足够的AWS权限,且与Pulumi栈使用的身份一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:11