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

如何通过AWS SSM命令传递多行字符串参数?

解决GitHub Workflow向AWS实例传递多行.env内容的问题

问题概述

通过GitHub Workflow在AWS远程实例上创建.env文件时,采用以下步骤:

  1. 从GitHub Vars生成多行键值对内容,存入环境变量DEV_ENV_VAR
  2. 通过AWS SSM Start Session执行远程命令,尝试将DEV_ENV_VAR写入实例的.env文件

但实际执行后,.env文件无内容,给echo添加-e参数会触发语法错误,核心问题是多行字符串无法正确传递到远程命令中。

原因分析

  1. GitHub Actions渲染${{ env.DEV_ENV_VAR }}时,会将多行字符串的换行符转换为空格,破坏了原本的键值对结构
  2. AWS SSM的command参数对特殊字符(换行、引号)的转义处理逻辑,导致多行内容被截断或解析为无效命令

解决方案

方案一:Base64编码传递(兼容所有场景)

通过Base64将多行内容转为单行字符串,避免换行和特殊字符的干扰,远程解码后还原内容:

1. 修改环境变量生成步骤

- name: 生成并编码.env内容
  run: |
    # 生成标准.env格式的多行内容
    ENV_CONTENT=$(echo "$VARS_JSON" | jq -r 'keys[] as $k | "\($k)=\(.[$k])"')
    # Base64编码为单行(-w 0避免自动换行)
    echo "DEV_ENV_VAR=$(echo "$ENV_CONTENT" | base64 -w 0)" >> $GITHUB_ENV

2. 修改远程执行命令

- name: 在远程服务器执行部署命令
  run: |
    sudo apt-get update;
    sudo apt-get install expect -qq > /dev/null;
    echo "Starting execution of commands";
    unbuffer aws ssm start-session --parameters command="cd ${{ env.DEPLOY_PATH }}; git pull; yarn install --frozen-lockfile; echo '${{ env.DEV_ENV_VAR }}' | base64 -d >> .env; yarn build; pm2 restart all;" --target '${{ env.DEPLOY_SERVER }}' --document-name "AWS-StartInteractiveCommand";

方案二:远程直接生成.env(更简洁)

跳过本地生成多行内容的步骤,直接将GitHub Vars的JSON字符串传递到远程,在实例上用jq解析生成.env:

- name: 在远程服务器执行部署命令
  run: |
    sudo apt-get update;
    sudo apt-get install expect -qq > /dev/null;
    echo "Starting execution of commands";
    unbuffer aws ssm start-session --parameters command="cd ${{ env.DEPLOY_PATH }}; git pull; yarn install --frozen-lockfile; apt-get install -y jq; echo '${{ env.VARS_JSON }}' | jq -r 'keys[] as \$k | \"\(\$k)=\(.[\$k])\"' >> .env; yarn build; pm2 restart all;" --target '${{ env.DEPLOY_SERVER }}' --document-name "AWS-StartInteractiveCommand";

注意:如果远程实例已预装jq,可删除apt-get install -y jq部分

补充说明

  • 避免直接在远程命令中拼接多行字符串,特殊字符(如引号、换行)会触发shell语法错误
  • Base64编码是处理跨环境传递复杂字符串的通用方案,几乎无兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:25:33