-
-
Save codelinx/1db2df54694b27a513661b091f39b743 to your computer and use it in GitHub Desktop.
Revisions
-
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 0 additions and 59 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,59 +0,0 @@ -
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -24,7 +24,7 @@ private GetParameters(final String pathPrefix) { } private GetParametersByPathResult getParametersByPath(final Optional<String> nextToken) { final GetParametersByPathRequest request = nextToken.map(baseRequest.clone()::withNextToken).orElse(baseRequest); return this.ssm.getParametersByPath(request); } -
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 59 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,59 @@ import java.nio.file.Paths; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement; import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder; import com.amazonaws.services.simplesystemsmanagement.model.GetParametersByPathRequest; import com.amazonaws.services.simplesystemsmanagement.model.GetParametersByPathResult; import com.amazonaws.services.simplesystemsmanagement.model.Parameter; public class GetParameters { private static final String PRINT_FORMAT = "%s=\"%s\""; private final GetParametersByPathRequest baseRequest; private final AWSSimpleSystemsManagement ssm; private GetParameters(final String pathPrefix) { final String path = Objects.requireNonNull(pathPrefix, "pathPrefix is required."); this.baseRequest = new GetParametersByPathRequest().withPath(path).withRecursive(true).withWithDecryption(true); this.ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient(); } private GetParametersByPathResult getParametersByPath(final Optional<String> nextToken) { final GetParametersByPathRequest request = nextToken.map(baseRequest::withNextToken).orElse(baseRequest); return this.ssm.getParametersByPath(request); } private void parameters(Consumer<Parameter> process) { Optional<String> nextToken = Optional.empty(); while (true) { final GetParametersByPathResult result = getParametersByPath(nextToken); if (result.getParameters().isEmpty()) { return; } result.getParameters().stream().forEach(process); if (result.getNextToken() == null) { return; } nextToken = Optional.of(result.getNextToken()); } } private static void printParameter(final Parameter parameter) { final String envName = Paths.get(parameter.getName()).getFileName().toString(); System.out.println(String.format(PRINT_FORMAT, envName, parameter.getValue())); } public static void main(final String... args) { if (args.length == 0) { System.err.println("Usage: java GetParameters pathPrefix"); System.exit(1); } new GetParameters(args[0]).parameters(GetParameters::printParameter); } } -
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 31 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,31 @@ if (process.argv.length < 3) { throw `Usage: ${process.argv[1]} path_prefix` } const PATH_PREFIX = process.argv[2] const path = require('path') const AWS = require('aws-sdk') const ssm = new AWS.SSM() function getParametersByPath(nextToken, callback) { const params = { Path: PATH_PREFIX, Recursive: true, WithDecryption: true } if (nextToken) params['NextToken'] = nextToken ssm.getParametersByPath(params, (err, data) => { if (err) throw err callback(data) }) } function printParameter(parameter) { const envName = path.basename(parameter.Name) console.log(`${envName}="${parameter.Value}"`) } function handleResponse(response) { if (response.Parameters.length === 0) return response.Parameters.forEach(printParameter) if (!response.NextToken) return getParametersByPath(response.NextToken, handleResponse) } getParametersByPath(null, handleResponse) -
sonodar revised this gist
Dec 26, 2017 . 2 changed files with 81 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,46 @@ #!/usr/bin/env python from os import path from sys import argv import boto3 if len(argv) < 2: raise "Usage: %s path" % argv[0] PATH = argv[1] SSM = boto3.client('ssm') def get_parameters_by_path(next_token = None): params = { 'Path': PATH, 'Recursive': True, 'WithDecryption': True } if next_token is not None: params['NextToken'] = next_token return SSM.get_parameters_by_path(**params) def parameters(): next_token = None while True: response = get_parameters_by_path(next_token) parameters = response['Parameters'] if len(parameters) == 0: break for parameter in parameters: yield parameter if 'NextToken' not in response: break next_token = response['NextToken'] def print_env_vars(parameter): env_name = path.basename(parameter['Name']) env_value = parameter['Value'] print("%s=\"%s\"" % (env_name, env_value)) def main(): for parameter in parameters(): print_env_vars(parameter) if __name__ == "__main__": main() This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,35 @@ #!/usr/bin/env ruby require 'aws-sdk' raise "Usage: #{$0} path" if ARGV[0].nil? PATH = ARGV[0] SSM = Aws::SSM::Client.new def get_parameters_by_path(next_token = nil) params = { path: PATH, recursive: true, with_decryption: true, } params[:next_token] = next_token unless next_token.nil? SSM.get_parameters_by_path(params) end def parameters next_token = nil while true response = get_parameters_by_path(next_token) break if response.parameters.empty? response.parameters.each { |parameter| yield parameter } next_token = response.next_token break if next_token.nil? end end def print_env_vars(parameter) env_name = File.basename(parameter.name) env_value = parameter.value puts "#{env_name}=\"#{env_value}\"" end parameters { |p| print_env_vars p } -
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -12,6 +12,9 @@ # "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:parameter/app/api/staging/*" # }] # } # jq is required. if [ $# -lt 2 ]; then echo "Usage: $0 aws_region path_prefix" 1>&2 exit 1 -
sonodar revised this gist
Dec 26, 2017 . 1 changed file with 36 additions and 40 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,60 +1,56 @@ #!/usr/bin/env bash +x # Usage: get_ssm_parameters.sh aws_region path_prefix # $1 aws_region : SSM Parameter Region (ex. ap-northeast-1) # $2 path_prefix: SSM Parameter Path prefix (ex. /app/api/staging) # IAM Policy example: # { # "Version": "", # "Statement": [{ # "Sid": "" # "Effect": "Allow" # "Action": ["ssm:GetParametersByPath]" # "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:parameter/app/api/staging/*" # }] # } if [ $# -lt 2 ]; then echo "Usage: $0 aws_region path_prefix" 1>&2 exit 1 fi readonly AWS_REGION="${1}" readonly PATH_PREFIX="${2}" # $1 nextToken get_parameters_by_path() { local nextToken="${1}" aws ssm get-parameters-by-path --region "${AWS_REGION}" \ --path "${PATH_PREFIX}" --recursive --with-decryption \ $([ -z ${nextToken} ] || echo "--next-token ${nextToken}") } # $1 parameterName # $2 parameterValue print_env_vars() { local envName=$(basename "${1}") local envValue="${2}" echo "${envName}=\"${envValue}\"" } print_parameters() { local nextToken="" while true; do responseJson=$(get_parameters_by_path "${nextToken}") declare -i parameterCount=$(echo ${responseJson} | jq -c '.Parameters[].Name' | wc -l) [ ${parameterCount} -lt 1 ] && break echo $responseJson | jq -r '.Parameters[]|[.Name,.Value] | @sh' | while read LINE; do declare -a nameAndValue=($(echo $LINE | tr -d \')) print_env_vars ${nameAndValue[@]} done nextToken=$(echo ${responseJson} | jq -r '.NextToken') if [ -z ${nextToken} ] || [[ ${nextToken} == "null" ]]; then break fi done } print_parameters -
sonodar created this gist
Dec 25, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ #!/bin/bash +x # Usage: get_ssm_parameters.sh [prefix] # prefix: SSM Parameter Path prefix (ex. /app/api/staging) # IAM Policy example: # { # "Version": "", # "Statement": [{ # "Sid": "" # "Effect": "Allow" # "Action": ["ssm:GetParameter*]" # "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:parameter/app/api/staging/*" # }] # } if [[ -z $1 ]]; then echo 'Usage: $0 [prefix]' 1>&2 exit 1 fi # @param $1 Path prefix describe_parameter_names() { local prefix="${1}" aws ssm describe-parameters --parameter-filters "Key=Path,Option=Recursive,Values=${prefix}" \ --query 'Parameters[*].Name' --output text } # @param $1 Parameter name get_parameter_value() { local parameterName="${1}" local parameterValue=$(aws ssm get-parameter --name "${parameterName}" \ --query 'Parameter.Value' --output text --with-decryption) [[ ${parameterValue} == "None" ]] && return 1 echo ${parameterValue} } # @param $1 Path prefix output_parameter_values() { local prefix="${1}" declare -i hasError=0 for name in $(describe_parameter_names ${prefix}); do value=$(get_parameter_value ${name}) if [ $? -ne 0 ]; then echo "Can't get parameter, parameter_name=${name}" 1>&2 hasError=1; continue fi envName=$(basename ${name} || echo 'NULL') echo "${envName}=${value}" done return ${hasError} } AWS_REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g') AWS_AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone) AWS_REGION=$(echo ${AWS_AZ} | sed -e 's/.$//g') aws configure set region "${AWS_REGION}" echo "AWS_REGION=${AWS_REGION}" echo "AWS_AZ=${AWS_AZ}" echo "EC2_INSTANCE_ID=${EC2_INSTANCE_ID}" output_parameter_values "$1"