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

AWS CDK v2能否获取执行cdk deploy的部署者身份变量?

问题结论

不存在可直接通过CloudFormation固有函数获取cdk deploy执行人员身份的内置变量,无法仅靠intrinsic functions实现这个需求。

原因说明

CloudFormation的固有函数、伪参数全部在CloudFormation服务端解析执行,服务端不会自动记录、暴露触发本次栈部署的调用方身份(不管是本地执行部署的个人用户,还是CI/CD流水线的执行角色),没有类似AWS::Deployer这类开箱即用的伪参数可供调用。

不过这个需求完全可以在CDK的synth阶段实现:CDK的TypeScript代码本身是在本地/CI运行环境执行的Node.js脚本,生成CloudFormation模板的阶段就可以拿到部署人身份,直接注入标签即可,不需要依赖CloudFormation端的能力。

实现方案(TypeScript + AWS CDK v2)

最简同步实现(覆盖90%场景)

直接在CDK代码里读取上下文参数、CI环境变量、本地系统用户名即可,不需要异步调用接口,示例:

import { App, Stack, Tags } from 'aws-cdk-lib';

const app = new App();
const stack = new Stack(app, 'YourServiceStack');

// 按优先级获取部署人标识
const deployer = app.node.tryGetContext('deployer') // 优先读命令行传入的上下文参数
  || process.env.GITHUB_ACTOR // Github Actions 触发人
  || process.env.GITLAB_USER_LOGIN // Gitlab CI 触发人
  || process.env.USER // Linux/macOS 本地用户名
  || process.env.USERNAME // Windows 本地用户名
  || 'unknown-deployer'; // 兜底值

// 给栈下所有资源统一添加owner标签
Tags.of(stack).add('owner', deployer);

// 其他栈资源逻辑写在这里

app.synth();

如果是在CI/CD流水线中执行部署,只需要在执行cdk deploy时把流水线内置的触发人变量通过上下文传入即可,例如Github Actions中:

cdk deploy -c deployer=${{ github.actor }}

Gitlab CI中:

cdk deploy -c deployer=$GITLAB_USER_LOGIN

传入的上下文值会被最高优先级读取,不需要修改其他代码逻辑。

更精准的身份获取(可选)

如果需要拿到当前执行部署的AWS身份ARN(而不是本地用户名),可以调用AWS STS的GetCallerIdentity接口获取,注意这部分是异步逻辑,需要等返回结果后再执行synth:

import { STSClient, GetCallerIdentityCommand } from "@aws-sdk/client-sts";

async function main() {
  const app = new App();
  const stack = new Stack(app, 'YourServiceStack');

  let deployer = app.node.tryGetContext('deployer')
    || process.env.GITHUB_ACTOR
    || process.env.GITLAB_USER_LOGIN;

  if (!deployer) {
    const sts = new STSClient({});
    const identity = await sts.send(new GetCallerIdentityCommand({}));
    deployer = identity.Arn || 'unknown-deployer';
  }

  Tags.of(stack).add('owner', deployer);
  // 其他栈资源逻辑
  app.synth();
}

main();

注意事项

  • 不要尝试在标签值中编写CloudFormation固有函数来获取部署人,目前CloudFormation没有提供对应能力,这类写法只会返回空值或者部署报错。
  • 如果有严格的审计要求,建议统一通过-c deployer=xxx的上下文参数传入部署人标识,避免不同环境下环境变量、本地用户名不一致导致标签值不规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:54:20