cdkDeploy

cdkDeploy

This script performs a CDK deploy into an AWS account.

Welcome users: run this script as

ENVIRONMENT=some_env python3 cdkDeploy [-p <properties_env>] [-l <cdk_language> (Default: python)] [-h Help] [-v VERBOSE]
 1#!/usr/bin/env python3
 2"""
 3cdkDeploy
 4
 5This script performs a CDK deploy into an AWS account.
 6
 7Welcome users: run this script as
 8
 9    ENVIRONMENT=some_env python3 cdkDeploy [-p <properties_env>] [-l <cdk_language> (Default: python)] [-h Help] [-v VERBOSE]
10
11"""
12
13import argparse
14import os
15import glob
16import sys
17from pathlib import Path
18from utils import cdk, common
19from subprocess_tee import run as _run
20
21REGION = os.environ.get('AWS_DEFAULT_REGION', 'us-east-1')
22
23
24if __name__ == "__main__":
25    print("cdkDeploy.__main__(): BEGIN")
26
27    #
28    # ArgParse
29    #
30    parser = argparse.ArgumentParser(description='Deploy a CDK to an AWS Environment.')
31    parser.add_argument(
32        '-p',
33        '--properties_env',
34        action='store',
35        type=str,
36        required=False,
37        default=os.environ.get('CDK_ENV', None),
38        help='properties env file [i.e. gov-prod in properties.gov-prod.json]')
39
40    parser.add_argument(
41        '-l',
42        '--language',
43        action='store',
44        type=str,
45        required=False,
46        default=os.environ.get('CDK_LANG', None),
47        help='cdk language to use [python, typescript]')
48
49    parser.add_argument(
50        '-P',
51        '--path',
52        action='store',
53        type=str,
54        required=False,
55        default=os.environ.get('CDK_PATH', None),
56        help='cdk path, if different from root. Will attempt to dynamically find it.')
57
58    parser.add_argument(
59        '-v',
60        '--verbose',
61        action='count',
62        default=0,
63        required=False,
64        help='verbosity level')
65
66    args = parser.parse_args()
67
68    _VERBOSE = args.verbose
69    _CDK_ENV = args.properties_env
70    _CDK_LANG = args.language
71    _CDK_PATH = args.path if args.path is not None else os.path.dirname(glob.glob('**/cdk.json', recursive=True)[0])
72    _PROPS_FILE = f"properties.{_CDK_ENV}.json"
73
74    with common.ChDir(_CDK_PATH):
75
76        env_file = Path(_PROPS_FILE).read_text()
77        # env_data = json.load(env_file)
78        print(env_file)
79
80        cdk.install_cdk_requirements(cdk_lang=_CDK_LANG)
81
82        my_env = os.environ.copy()
83        my_env["ENVIRONMENT"] = _CDK_ENV
84
85        _process_output = _run(['cdk', 'deploy', '--require-approval', 'never', '--all'], env=my_env, check=True)
86
87        with open('cdk.deploy.txt', 'w') as file:
88            if _process_output.stderr is not None:
89                file.write(_process_output.stderr)
90
91            if _process_output.stdout is not None:
92                file.write(_process_output.stdout)
93
94        sys.exit(_process_output.returncode)