moto/scripts/ssm_get_default_params.py

61 lines
1.9 KiB
Python
Executable File

import boto3
import json
import os
import subprocess
import time
from moto.ssm.utils import convert_to_tree
def retrieve_by_path(client, path):
print(f"Retrieving all parameters from {path}. "
f"AWS has around 14000 parameters, and we can only retrieve 10 at the time, so this may take a while.\n\n")
x = client.get_parameters_by_path(Path=path, Recursive=True)
parameters = x["Parameters"]
next_token = x["NextToken"]
while next_token:
x = client.get_parameters_by_path(Path=path, Recursive=True, NextToken=next_token)
parameters.extend(x["Parameters"])
next_token = x.get("NextToken")
if len(parameters) % 100 == 0:
print(f"Retrieved {len(parameters)} from {path}...")
time.sleep(0.5)
return parameters
def main():
"""
Retrieve global parameters from SSM
- Download from AWS
- Convert them to a more space-optimized data format
- Store this in the dedicated moto/ssm/resources-folder
Note:
There are around 20k parameters, and we can only retrieve 10 at a time.
So running this scripts takes a while.
"""
client = boto3.client('ssm', region_name="us-west-1")
default_param_paths = ["/aws/service/global-infrastructure/regions",
"/aws/service/global-infrastructure/services"]
for path in default_param_paths:
params = retrieve_by_path(client, path)
tree = convert_to_tree(params)
root_dir = (
subprocess.check_output(["git", "rev-parse", "--show-toplevel"])
.decode()
.strip()
)
filename = "{}.json".format(path.split("/")[-1])
dest = os.path.join(root_dir, "moto/ssm/resources/{}".format(filename))
print("Writing data to {0}".format(dest))
with open(dest, "w") as open_file:
json.dump(tree, open_file, sort_keys=True, indent=2)
if __name__ == "__main__":
main()