Как экспортировать параметры из хранилища параметров aws и импортировать в другой аккаунт

В моем первом аккаунте aws параметры указаны следующим образом:

/config/a => value1
/config/b => value2
/config/c/a => value31
/config/c/b => value32

Я хочу переместить их на мой второй аккаунт AWS.

Я создал эти параметры в хранилище параметров вручную.

Как я могу легко скопировать эти значения из одной учетной записи в другую?

С помощью aws ssm get-parameters --names "<param-name>" было бы слишком сложно, так как у меня слишком много параметров.

7 ответов

Решение
  1. Получить все параметры через aws ssm get-parameters-by-path --path "/relative/path/" --recursive
  2. Запишите полученный JSON куда-нибудь вниз - например, в файл
  3. Подготовьте положенные команды, например, с JS
for (const value of params.Parameters) {
    const { Name, Value } = value;
    console.log(`aws ssm put-parameter --name "${Name}" --value "${Value}" --type "String"`);
}

Я создал утилиту, которая делает именно то, что вы хотите:

      pip install aws-ssm-copy
aws-ssm-copy --dry-run --source-profile <source> --recursive /

За к подробностями обращайтесьутилите aws-ssm-copy и в блоге .

Вот моя версия, которая выводит все параметры ' Name, Type а также Value в формате TSV (значения, разделенные табуляцией):

      aws ssm get-parameters-by-path --path "/" --recursive --query="Parameters[*].[Name, Type, Value]" --output text

Пример ответа:

      /prod/aaa    String  xxx
/prod/bbb    String  yyy
/prod/ccc    String  zzz

Может быть, здесь можно получить параметры по пути:aws ssm get-parameters-by-path --path "/" --recursive

https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html

Хорошо , я знаю, что прошел год, но для людей, которые все еще пытаются выяснить, вот подробное решение,

Поэтому вам нужно выполнить следующую команду, чтобы получить все параметры в вашем текущем регионе:

aws ssm get-parameters-by-path --path "/" –recursive

вы получите JSONформатированный ответ. Просто скопируйте ответ и вставьте его в файл (*.txt файл, затем переименуйте его в *.json). У вас есть файл JSON со всеми текущими параметрами

Я опубликовал этот код в репозитории git здесь. Просто клонируйте этот репозиторий после клонирования и добавьте сюда желаемый регион:

const ssm = new AWS.SSM({

apiVersion: '2014-11-06';,

region: 'eu-west-2'; // add your destination region here.

});

и ваш json файл здесь: const { Parameters } = await require('<YOUR JSON FILE>.json');

Затем установите npm пакеты, запустив команду npm install и запускаем скрипт командой npm start

Используя следующий cmd, вы можете легко получить имя и значения хранилища параметров.

      $ aws ssm get-parameters-by-path --path "/" --recursive --query="Parameters[*].[Name, Value]" --output json>parameters.json

Вы можете попробовать что-то вроде этого:

      $source_path=""
$source_region=""
$destination_path=""
$destination_region=""

aws_output=$(aws ssm get-parameters-by-path \
    --path "$source_path" \
    --with-decryption \
    --recursive \
    --query "Parameters[*].[Name, Type, Value]" \
    --output json \
    --region "$source_region")

echo "$aws_output" | jq -r '.[] | [.[0], .[1], .[2]] | @tsv' | while IFS=$'\t' read -r full_source_path type value; do
    full_destination_path="${full_source_path/$source_path/$destination_path}"
    if [ "$dry_run" = true ]; then
        echo "[Dry run] Copying: $full_source_path -($type)-> $full_destination_path"
    else
        echo "[Dry run] Copying: $full_source_path -($type)-> $full_destination_path"
        aws ssm put-parameter \
            --name "$full_destination_path" \
            --value "$value" \
            --type "$type" \
            --region "$destination_region"
    fi
done

Или полную версию здесь: https://gist.github.com/johnymachine/15fd9d4b7c5fdf51165258962e52488d

Другие вопросы по тегам