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

使用GitHub Actions自动化Terraform导入:Terragrunt Show导出JSON报错及资源提取

问题:Terragrunt Show导出JSON到文件时报"too many arguments"错误

已成功通过Terragrunt将手动创建的AWS Lambda函数导入Terraform管理,现需执行terragrunt show -json并将结果导出到文件,供后续Python脚本生成管理该Lambda的Terraform新模块。但在GitHub Actions中使用terragrunt-action执行show -json > myfile.txt时,出现"too many arguments"错误。

错误原因

terragrunt-action的tg_command参数会将整个传入的字符串当作命令的参数列表解析,>和myfile.txt会被识别为show命令的额外参数,导致参数数量超出预期,触发报错。

解决方案

方法1:直接用Shell命令执行Terragrunt

跳过terragrunt-action,直接用GitHub Actions的run步骤调用terragrunt命令,这样可以正常使用Shell重定向功能:

- name: 导出Terragrunt Show结果到文件
  working-directory: target-repo
  run: |
    terragrunt show -json > myfile.txt
  env:
    AWS_SDK_LOAD_CONFIG: 1
    TERRAFORM_VERSION: ${{ github.event.inputs.tf_version }}
    TERRAGRUNT_VERSION: ${{ github.event.inputs.tg_version }}

注意:需确保Runner环境已安装对应版本的Terraform和Terragrunt,若未安装,可在该步骤前添加安装命令。

方法2:通过步骤输出捕获后写入文件

若坚持使用terragrunt-action,可先将show -json的输出捕获到步骤输出中,再写入文件:

- name: 执行Terragrunt Show
  id: terragrunt_show
  uses: gruntwork-io/terragrunt-action@v2
  with:
    tf_version: ${{ github.event.inputs.tf_version }}
    tg_command: 'show -json'
    tg_version: ${{ github.event.inputs.tg_version }}
    tg_dir: target-repo
  env:
    AWS_SDK_LOAD_CONFIG: 1

- name: 将输出写入文件
  working-directory: target-repo
  run: printf "%s" "${{ steps.terragrunt_show.outputs.stdout }}" > myfile.txt

用printf替代echo可避免特殊字符转义问题,确保输出内容完整准确。

方法3:通过Terraform Output提取特定属性(可选)

若只需获取Lambda的核心属性,可先在Terraform配置中添加Output块,再导出指定Output的JSON:
在你的Terraform资源文件中添加:

output "lambda_details" {
  value = aws_lambda_function.imported_lambda
}

然后在GitHub Actions中执行:

- name: 导出Lambda属性到文件
  working-directory: target-repo
  run: terragrunt output -json lambda_details > lambda_details.json
  env:
    AWS_SDK_LOAD_CONFIG: 1

此方法可缩小后续Python脚本处理的数据范围,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:20:01