如何通过AWS CLI获取SSM参数的Description字段?
解决AWS CLI获取SSM参数Description字段的问题
问题原因
你之前使用的两个命令受接口返回逻辑限制,无法获取Description字段:
get-parameters-by-path默认仅返回参数的名称、类型、值和版本,不包含Description元数据,因此无论是否添加--query参数都无法获取该字段。describe-parameters是专门用于获取参数元数据的命令,默认返回结果包含Description,但可能你之前未正确查看返回结构,或存在权限限制导致字段未显示。
解决方案
要完整获取SSM参数的Name、Value和Description,需结合两个AWS CLI命令:先用describe-parameters获取元数据(含Description),再用get-parameter获取参数值。以下是可直接用于迁移的Shell脚本示例:
#!/bin/bash # 配置源账号和目标账号信息 SOURCE_REGION="your-source-region" DEST_REGION="your-dest-region" DEST_AWS_PROFILE="target-account-profile" # 提前在~/.aws/credentials中配置目标账号的profile # 遍历所有SSM参数(自动处理分页) aws ssm describe-parameters --region $SOURCE_REGION --query 'Parameters[].{Name:Name, Description:Description, Type:Type}' --output json | jq -c '.[]' | while read param; do # 提取元数据字段 param_name=$(echo "$param" | jq -r '.Name') param_desc=$(echo "$param" | jq -r '.Description') param_type=$(echo "$param" | jq -r '.Type') # 获取参数值(加密参数需添加--with-decrypt) param_value=$(aws ssm get-parameter --name "$param_name" --region $SOURCE_REGION --with-decrypt --query 'Parameter.Value' --output text) # 写入目标账号 aws ssm put-parameter --name "$param_name" \ --value "$param_value" \ --type "$param_type" \ --description "$param_desc" \ --region $DEST_REGION \ --profile $DEST_AWS_PROFILE \ --overwrite # 若目标账号已存在同名参数,添加此参数覆盖 done
注意事项
- 权限配置:确保源账号的IAM用户/角色拥有
ssm:DescribeParameters和ssm:GetParameter权限;目标账号拥有ssm:PutParameter权限。 - 加密参数处理:若参数为
SecureString类型,需确保目标账号有权访问对应的KMS密钥,或在put-parameter命令中添加--key-id指定目标账号的KMS密钥ARN。 - 分页处理:AWS CLI的
describe-parameters默认会自动处理分页,返回所有参数;若参数数量极大,可添加--page-size 1000提升效率。 - 特殊字符处理:若参数值包含特殊字符(如引号、换行),建议将
param_value用双引号包裹,避免脚本执行出错。
内容的提问来源于stack exchange,提问作者Gaurav Thantry
相关产品推荐
相关产品推荐

