我必须通过Cloudformation将Json文件放入AWS SSM参数中。 我已经编写了 CFT 来创建 SSM 参数,但我在传递参数值(即 JSON 文件内容)时面临挑战。
Parameters:
Environment:
Description: 'Deployment Environment'
Type: String
Default: dev
SSMParameterName:
Description: 'SSM Parameter Name'
Type: String
Default: testswapeligibility
JsonFormatToPutInSSM:
Description: 'Provide the text in JSON format to put on SSM parameter'
Type: String
Default: '{"This_is_sample":"Sample1,Sample2","Name":"some thing here","anything_else":""}'
Resources:
JsonFormatToPutInSSM:
Type: AWS::SSM::Parameter
Properties:
Description: 'SSM Parameter to hold LogGroup names and details for which Subscription filter needs to be created'
Name: !Sub '/app/rds/${SSMParameterName}-${Environment}'
Type: String
Value: !Sub '${JsonFormatToPutInSSM}'
现在我有 Jenkins 工作来部署这个 CFT。 在该 Jenkins 作业中,我从 Git 获取 JSON 文件并读取 JSON 文件,并希望将该 JSON 文件内容作为值传递给“SSMParameterName”参数。
在云形成中,它不直接支持 JSON 文件,需要使用额外的反斜杠转义保留的 JSON 字符,例如退格符、换页符、换行符、回车符、制表符、双引号和反斜杠。 我想在 groovy 本身中执行此操作,并将格式化的 JSON 文件内容作为 json 字符串传递给 Cloudformation 参数值。 如何转换: 例如
{"This_is_sample":"Sample1,Sample2","Name":"some thing here","anything_else":""}
进入
{\"This_is_sample\":\"Sample1,Sample2\",\"Name\":\"some thing here\",\"anything_else\":\"\"}
在 Jenkins 文件本身中并将其作为参数值传递给 Cloudformation 命令。
所以我认为你正在做这样的事情:
stage('SSMConfig') {
steps {
def jsonParams = readJson file: "path/to/json/parameters"
script {
def escapedJson = JsonOutput.toJson( JsonOutput.toJson( jsonParams ) )
}
}
}
通过运行
JsonOutput.toJson
两次,第二次执行将转义 JSON 字符串中的所有内容。 另外,通过解析 GIT 文件中的 JSON,您可以删除所有空格和其他在将输出放入参数时可能会出错的内容,这样输出中就不会出现任何可能让您出错的 \n
或 \t
.