def main(): parser = argparse.ArgumentParser() parser.add_argument('config_uri') parser.add_argument('-v', '--verbose', action='store_true') parser.add_argument('--aws-credentials', type=file) args = parser.parse_args() logging.basicConfig( format='%(asctime)s %(levelname)s %(message)s', level=(logging.DEBUG if args.verbose else logging.INFO)) aws_credentials = {} if args.aws_credentials: aws_credentials = json.loads(args.aws_credentials.read()) s3 = connect_s3(host='s3.amazonaws.com', **aws_credentials) # Fetch config json config_filename = os.path.basename(args.config_uri) download_to_filename(s3, args.config_uri, config_filename) with open(config_filename, 'rb') as f: config = json.load(f) # Compile environment variables env_parameters = {} kms = KMSConnection(**aws_credentials) env_parameters = process_env(kms, config.get('env', {})) # Create working directory working_directory = config['working_directory'] mkpath(working_directory) # Download staging files for item in config.get('download', []): download(s3, **item) # Execute command env = dict(os.environ) env.update(env_parameters) debug_command = [ debug_parameter(kms, parameter) for parameter in config['command'] ] command = [ process_parameter(kms, parameter) for parameter in config['command'] ] logging.info('executing command: %s', debug_command) logging.debug('Popen: command=%s, env=%s', command, env) process = subprocess.Popen(command, env=env, cwd=working_directory) return process.wait()
def connect_kms(aws_access_key_id=None, aws_secret_access_key=None, **kwargs): """ Connect to AWS Key Management Service :type aws_access_key_id: string :param aws_access_key_id: Your AWS Access Key ID :type aws_secret_access_key: string :param aws_secret_access_key: Your AWS Secret Access Key rtype: :class:`boto.kms.layer1.KMSConnection` :return: A connection to the AWS Key Management Service """ from boto.kms.layer1 import KMSConnection return KMSConnection(aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, **kwargs)