From a49527904e16019a16e456a1f30e6d61fca0c3d7 Mon Sep 17 00:00:00 2001 From: Fatema Alkhanaizi Date: Wed, 1 Jun 2022 13:29:57 +0100 Subject: [PATCH] Feature/dynamic accounts setup (#2) * update README for infra repository * update READMEs and the diagrams * remove some constant values * removing loaded account ids from config * add new template option for dynamic accounts through cfn params - add more to README - rename stagin to preprod - remove space from folder name - remove account specific details * add comments to constants.py * update script to handle updating constants.py * adding minor detail Co-authored-by: Fatema Alkhanaizi --- mlops-multi-account-cdk/mlops-infra/README.md | 29 +- mlops-multi-account-cdk/mlops-infra/app.py | 2 +- .../mlops_infra/config/constants.py | 12 +- .../mlops_infra/config/dev/constants.py | 8 +- .../mlops-infra/mlops_infra/pipeline_stack.py | 10 +- .../mlops-infra/scripts/cdk-account-setup.sh | 16 +- .../.githooks/pre-commit | 0 .../.gitignore | 0 .../.pre-commit-config.yaml | 0 .../LICENSE.txt | 0 .../Makefile | 0 .../README.md | 28 +- .../app.py | 2 +- .../cdk.json | 0 ...ecture-mlops project cicd architecture.jpg | Bin ...tecture-sagemaker project architecture.jpg | Bin .../diagrams/building.png | Bin .../diagrams/deployment.png | Bin .../mlops_sm_project_template_rt/__init__.py | 0 .../basic_project_stack.py} | 8 +- .../cdk_helper_scripts/zip-image/Dockerfile | 0 .../config/constants.py | 12 +- .../constructs/build_pipeline_construct.py | 0 .../constructs/deploy_pipeline_construct.py | 34 +- .../constructs/ssm_construct.py | 10 +- .../dynamic_accounts_project_stack.py | 291 ++++++++++++++++++ .../pipeline_stack.py | 4 +- .../service_catalog_stack.py | 55 +++- .../requirements-dev.txt | 0 .../requirements.txt | 0 .../scripts/cdk-account-setup.sh | 16 +- .../scripts/install-prerequisites-brew.sh | 0 .../seed_code/build_app/.githooks/pre-commit | 0 .../build_app/.pre-commit-config.yaml | 0 .../seed_code/build_app/Makefile | 0 .../seed_code/build_app/README.md | 0 .../seed_code/build_app/buildspec.yml | 0 .../build_app/ml_pipelines/README.md | 0 .../build_app/ml_pipelines/__init__.py | 0 .../build_app/ml_pipelines/__version__.py | 0 .../build_app/ml_pipelines/_utils.py | 0 .../ml_pipelines/get_pipeline_definition.py | 0 .../build_app/ml_pipelines/run_pipeline.py | 0 .../build_app/ml_pipelines/training/README.md | 0 .../ml_pipelines/training/__init__.py | 0 .../build_app/ml_pipelines/training/_utils.py | 0 .../ml_pipelines/training/pipeline.py | 6 +- .../seed_code/build_app/notebooks/README.md | 0 .../notebooks/sm_pipelines_runbook.ipynb | 0 .../seed_code/build_app/setup.cfg | 0 .../seed_code/build_app/setup.py | 0 .../build_app/source_scripts/Dockerfile | 0 .../build_app/source_scripts/README.md | 0 .../evaluate/evaluate_xgboost/README.md | 0 .../evaluate/evaluate_xgboost/main.py | 0 .../evaluate_xgboost/requirements.txt | 0 .../source_scripts/helpers/README.md | 0 .../source_scripts/helpers/logger.py | 0 .../source_scripts/helpers/requirements.txt | 0 .../source_scripts/helpers/s3_helper.py | 0 .../source_scripts/helpers/test/test_a.py | 0 .../prepare_abalone_data/README.md | 0 .../prepare_abalone_data/main.py | 0 .../prepare_abalone_data/requirements.txt | 0 .../source_scripts/training/xgboost/README.md | 0 .../training/xgboost/__main__.py | 0 .../training/xgboost/requirements.txt | 0 .../training/xgboost/test/test_a.py | 0 .../seed_code/deploy_app/.githooks/pre-commit | 0 .../deploy_app/.pre-commit-config.yaml | 0 .../seed_code/deploy_app/Makefile | 0 .../seed_code/deploy_app/README.md | 0 .../seed_code/deploy_app/app.py | 4 +- .../seed_code/deploy_app/cdk.json | 0 .../seed_code/deploy_app/config/config_mux.py | 0 .../seed_code/deploy_app/config/constants.py | 4 +- .../deploy_app/config/dev/constants.py | 0 .../deploy_app/config/dev/endpoint-config.yml | 0 .../deploy_app/config/prod/constants.py | 0 .../config/prod/endpoint-config.yml | 0 .../deploy_app/config/staging/constants.py | 0 .../config/staging/endpoint-config.yml | 0 .../deploy_app/deploy_endpoint/__init__.py | 0 .../deploy_endpoint/deploy_endpoint_stack.py | 0 .../deploy_endpoint/get_approved_package.py | 0 .../seed_code/deploy_app/requirements-dev.txt | 0 .../seed_code/deploy_app/requirements.txt | 0 .../seed_code/deploy_app/source.bat | 0 .../seed_code/deploy_app/tests/README.md | 0 .../tests/integration_tests/__init__.py | 0 .../tests/integration_tests/buildspec.yml | 0 .../tests/integration_tests/endpoint_test.py | 0 .../deploy_app/tests/unittests/__init__.py | 0 .../tests/unittests/test_deploy_app_stack.py | 0 .../source.bat | 0 .../tests/__init__.py | 0 .../tests/unit/__init__.py | 0 .../tests/unit/test_mlops_batch_v2_stack.py | 0 98 files changed, 464 insertions(+), 87 deletions(-) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/.githooks/pre-commit (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/.gitignore (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/.pre-commit-config.yaml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/LICENSE.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/Makefile (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/README.md (94%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/app.py (96%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/cdk.json (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/diagrams/MLOPs Foundation Architecture-mlops project cicd architecture.jpg (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/diagrams/MLOPs Foundation Architecture-sagemaker project architecture.jpg (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/diagrams/building.png (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/diagrams/deployment.png (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt /mlops_sm_project_template_rt/sm_project_stack.py => mlops-sm-project-template-rt/mlops_sm_project_template_rt/basic_project_stack.py} (98%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/cdk_helper_scripts/zip-image/Dockerfile (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/config/constants.py (79%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/constructs/build_pipeline_construct.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py (92%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/constructs/ssm_construct.py (91%) create mode 100644 mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/dynamic_accounts_project_stack.py rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/pipeline_stack.py (98%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/mlops_sm_project_template_rt/service_catalog_stack.py (86%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/requirements-dev.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/scripts/cdk-account-setup.sh (62%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/scripts/install-prerequisites-brew.sh (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/.githooks/pre-commit (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/.pre-commit-config.yaml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/Makefile (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/buildspec.yml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/__version__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/_utils.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/get_pipeline_definition.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/run_pipeline.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/training/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/training/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/training/_utils.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/ml_pipelines/training/pipeline.py (98%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/notebooks/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/notebooks/sm_pipelines_runbook.ipynb (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/setup.cfg (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/setup.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/Dockerfile (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/main.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/helpers/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/helpers/logger.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/helpers/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/helpers/s3_helper.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/helpers/test/test_a.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/main.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/training/xgboost/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/training/xgboost/__main__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/training/xgboost/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/build_app/source_scripts/training/xgboost/test/test_a.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/.githooks/pre-commit (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/.pre-commit-config.yaml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/Makefile (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/app.py (92%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/cdk.json (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/config_mux.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/constants.py (92%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/dev/constants.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/dev/endpoint-config.yml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/prod/constants.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/prod/endpoint-config.yml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/staging/constants.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/config/staging/endpoint-config.yml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/deploy_endpoint/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/deploy_endpoint/deploy_endpoint_stack.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/deploy_endpoint/get_approved_package.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/requirements-dev.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/requirements.txt (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/source.bat (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/README.md (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/integration_tests/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/integration_tests/buildspec.yml (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/integration_tests/endpoint_test.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/unittests/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/seed_code/deploy_app/tests/unittests/test_deploy_app_stack.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/source.bat (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/tests/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/tests/unit/__init__.py (100%) rename mlops-multi-account-cdk/{mlops-sm-project-template-rt => mlops-sm-project-template-rt}/tests/unit/test_mlops_batch_v2_stack.py (100%) diff --git a/mlops-multi-account-cdk/mlops-infra/README.md b/mlops-multi-account-cdk/mlops-infra/README.md index 9b22b5a2..ddc034b7 100644 --- a/mlops-multi-account-cdk/mlops-infra/README.md +++ b/mlops-multi-account-cdk/mlops-infra/README.md @@ -141,7 +141,18 @@ aws_session_token = YOUR_SESSION_TOKEN ### Bootstrap AWS Accounts ***Warning:** It is best you setup a python environment to handle all installs for this project and manage python packages. Use your preferred terminal and editor to run the following commands.* -Before you start with the deployment of the solution make sure to bootstrap your accounts. Ensure you add the account details in `mlops_infra/config/constants.py` mainly the target deployment accounts: **DEV**, **PREPROD** and **PROD**. follow the steps below to achieve that: +Before you start with the deployment of the solution make sure to bootstrap your accounts. Ensure you add the account details in `mlops_infra/config/constants.py` mainly the target deployment accounts: **DEV**, **PREPROD** and **PROD**. +``` +PIPELINE_ACCOUNT = "" # account to host the pipeline handling updates of this repository + +DEV_ACCOUNT = "" # account to setup sagemaker studio and networking stack + +PREPROD_ACCOUNT = "" # account to setup networking stack + +PROD_ACCOUNT = "" # account to setup networking stack +``` + +follow the steps below to achieve that: 1. Clone this repository in your work environment (e.g. your laptop) @@ -235,12 +246,24 @@ cdk synth as a stage could include a combination of stacks `--all` flag is included with the `deploy` command -once you are done with testing the new feature that was deployed locally, run the following to clean-up the environment: +### Clean-up + +In case you used the local deployment, once you are done with testing the new feature that was deployed locally, run the following to clean-up the environment: ``` -cdk --app ./cdk.out/assembly-Personal destroy —all # destroy stage to target account (make it match your stack name) +cdk --app ./cdk.out/assembly-Personal destroy —all +``` +This would only delete the service catalog stack deployed in the target account and not the deployed projects. + +Similarly if you used the CI/CD deployment: +``` +# destroy deployed stack in target account (make it match your stack name) +cdk destroy ``` +This would only delete the pipeline stack and nothing else deployed from the pipeline i.e. stacks deployed to the target accounts and the deployed projects. + +**NOTE** deployed stack from the pipeline won't be deleted to delete those you have to manually delete them through CloudFormation Delete stack command. This command could fail in the following cases: diff --git a/mlops-multi-account-cdk/mlops-infra/app.py b/mlops-multi-account-cdk/mlops-infra/app.py index 63aba021..a858e34c 100644 --- a/mlops-multi-account-cdk/mlops-infra/app.py +++ b/mlops-multi-account-cdk/mlops-infra/app.py @@ -25,7 +25,7 @@ deployment_env = cdk.Environment(account=PIPELINE_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION) -PipelineStack(app, "ml-deploy-pipeline", env=deployment_env) +PipelineStack(app, "ml-infra-deploy-pipeline", env=deployment_env) # Personal Stacks for testing locally, comment out when committing to repository if not os.getenv("CODEBUILD_BUILD_ARN"): diff --git a/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/constants.py b/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/constants.py index f5caf857..b3c3949e 100644 --- a/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/constants.py +++ b/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/constants.py @@ -18,17 +18,13 @@ CODE_COMMIT_REPO_NAME = "mlops-infra" PIPELINE_BRANCH = "main" -PIPELINE_ACCOUNT = "" +PIPELINE_ACCOUNT = "" # account to host the pipeline handling updates of this repository -DEV_ACCOUNT = "" -DEV_REGION = "eu-west-1" +DEV_ACCOUNT = "" # account to setup sagemaker studio and networking stack -PREPROD_ACCOUNT = "" -PREPROD_REGION = "eu-west-1" - -PROD_ACCOUNT = "" -PROD_REGION = "eu-west-1" +PREPROD_ACCOUNT = "" # account to setup networking stack +PROD_ACCOUNT = "" # account to setup networking stack DEFAULT_DEPLOYMENT_REGION = "eu-west-1" APP_PREFIX = "mlops" diff --git a/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/dev/constants.py b/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/dev/constants.py index 7248fc24..5e8b4156 100644 --- a/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/dev/constants.py +++ b/mlops-multi-account-cdk/mlops-infra/mlops_infra/config/dev/constants.py @@ -15,9 +15,9 @@ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -VPC_ID = "vpc-0d321f7663affed2d" -VPC_CIDR = "15.0.0.0/16" +VPC_ID = "vpc-" +VPC_CIDR = "10.0.0.0/16" -APP_SUBNETS = ["subnet-051d737bce2a09efe", "subnet-0272fcf9a6c5ad207", "subnet-0b6e3cc901590c35f"] +APP_SUBNETS = ["subnet-", "subnet-", "subnet-"] -BASE_SECURITY_GROUP = "sg-0657dec78ac20a372" +BASE_SECURITY_GROUP = "sg-" diff --git a/mlops-multi-account-cdk/mlops-infra/mlops_infra/pipeline_stack.py b/mlops-multi-account-cdk/mlops-infra/mlops_infra/pipeline_stack.py index a0f0b11c..486e738e 100644 --- a/mlops-multi-account-cdk/mlops-infra/mlops_infra/pipeline_stack.py +++ b/mlops-multi-account-cdk/mlops-infra/mlops_infra/pipeline_stack.py @@ -29,13 +29,11 @@ from mlops_infra.config.constants import ( APP_PREFIX, CODE_COMMIT_REPO_NAME, - DEV_REGION, DEV_ACCOUNT, PIPELINE_BRANCH, PREPROD_ACCOUNT, - PREPROD_REGION, PROD_ACCOUNT, - PROD_REGION, + DEFAULT_DEPLOYMENT_REGION ) from mlops_infra.networking_stack import NetworkingStack @@ -158,7 +156,7 @@ def __init__( CoreStage( self, "dev", - env=Environment(account=DEV_ACCOUNT, region=DEV_REGION), + env=Environment(account=DEV_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION), ) ) # add preprod stage for resources that we want to deploy in this account and potentially in other accounts as well @@ -167,7 +165,7 @@ def __init__( self, "preprod", deploy_sm_domain=False, - env=Environment(account=PREPROD_ACCOUNT, region=PREPROD_REGION), + env=Environment(account=PREPROD_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION), ) ) # add prod stage for resources that we want to deploy in this account and potentially in other accounts as well @@ -176,6 +174,6 @@ def __init__( self, "prod", deploy_sm_domain=False, - env=Environment(account=PROD_ACCOUNT, region=PROD_REGION), + env=Environment(account=PROD_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION), ) ) diff --git a/mlops-multi-account-cdk/mlops-infra/scripts/cdk-account-setup.sh b/mlops-multi-account-cdk/mlops-infra/scripts/cdk-account-setup.sh index c8f68f0c..ed7ab93e 100755 --- a/mlops-multi-account-cdk/mlops-infra/scripts/cdk-account-setup.sh +++ b/mlops-multi-account-cdk/mlops-infra/scripts/cdk-account-setup.sh @@ -6,11 +6,17 @@ read -p 'Governance Account: ' gov_account read -p 'Dev Account: ' dev_account read -p 'PreProd Account: ' preprod_account read -p 'Prod Account: ' prod_account - -region='eu-west-1' - read -p 'Deployment region: ' region +echo 'Updating constants.py file with accounts and region details' +pattern="[0-9a-zA-Z\-]*" +sed -i '' -e "s/PIPELINE_ACCOUNT = \"$pattern\"/PIPELINE_ACCOUNT = \"$gov_account\"/" \ + -e "s/DEV_ACCOUNT = \"$pattern\"/DEV_ACCOUNT = \"$dev_account\"/" \ + -e "s/PREPROD_ACCOUNT = \"$pattern\"/PREPROD_ACCOUNT = \"$preprod_account\"/" \ + -e "s/PROD_ACCOUNT = \"$pattern\"/PROD_ACCOUNT = \"$prod_account\"/" \ + -e "s/DEFAULT_DEPLOYMENT_REGION = \"$pattern\"/DEFAULT_DEPLOYMENT_REGION = \"$region\"/" \ + mlops_infra/config/constants.py + echo 'AWS profiles to be used for each account' read -p 'Governance Account AWS Profile: ' gov_profile read -p 'Dev Account AWS Profile: ' dev_profile @@ -23,6 +29,6 @@ cdk bootstrap aws://$gov_account/$region --profile $gov_profile cdk bootstrap aws://$dev_account/$region --trust $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $dev_profile -cdk bootstrap aws://$preprod_account/$region --trust $dev_account $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $preprod_profile +cdk bootstrap aws://$preprod_account/$region --trust $dev_account,$gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $preprod_profile -cdk bootstrap aws://$prod_account/$region --trust $dev_account $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $prod_profile +cdk bootstrap aws://$prod_account/$region --trust $dev_account,$gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $prod_profile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /.githooks/pre-commit b/mlops-multi-account-cdk/mlops-sm-project-template-rt/.githooks/pre-commit similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /.githooks/pre-commit rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/.githooks/pre-commit diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /.gitignore b/mlops-multi-account-cdk/mlops-sm-project-template-rt/.gitignore similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /.gitignore rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/.gitignore diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /.pre-commit-config.yaml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/.pre-commit-config.yaml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /.pre-commit-config.yaml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/.pre-commit-config.yaml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /LICENSE.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/LICENSE.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /LICENSE.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/LICENSE.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /Makefile b/mlops-multi-account-cdk/mlops-sm-project-template-rt/Makefile similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /Makefile rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/Makefile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/README.md similarity index 94% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/README.md index 0d66be8d..e37b6973 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /README.md +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/README.md @@ -149,7 +149,8 @@ This is an AWS CDK project written in Python 3.8. Here's what you need to have o │   │   └── ssm_construct.py <--- construct to deploy ssm parameter for the project template to use │   ├── pipeline_stack.py <--- stack for CICD with code pipeline setup for the repo │   ├── service_catalog_stack.py <--- stack for service catalog setup and template deployment -│   └── sm_project_stack.py <--- stack for sagemaker project template setup +│   ├── basic_project_stack.py <--- stack for basic sagemaker project template setup - DEV/PREPROD/PROD Accounts provided in constants.py +│   └── dynamic_accounts_project_stack.py <--- stack for sagemaker project template setup - DEV/PREPROD/PROD Accounts provided as parameters during project creation ├── requirements-dev.txt ├── requirements.txt <--- cdk packages used in the stacks (must be installed) ├── scripts <--- shell scripts to automate part of the deployments @@ -193,7 +194,18 @@ aws_session_token = YOUR_SESSION_TOKEN ### Bootstrap AWS Accounts ***Warning:** It is best you setup a python environment to handle all installs for this project and manage python packages. Use your preferred terminal and editor to run the following commands.* -Before you start with the deployment of the solution make sure to bootstrap your accounts. Ensure you add the account details in `mlops_sm_project_template_rt/config/constants.py` mainly the target deployment accounts: **DEV**, **PREPROD** and **PROD**. follow the steps below to achieve that: +Before you start with the deployment of the solution make sure to bootstrap your accounts. Ensure you add the account details in `mlops_sm_project_template_rt/config/constants.py` mainly the target deployment accounts: **DEV**, **PREPROD** and **PROD**. +``` +PIPELINE_ACCOUNT = "" # account to host the pipeline handling updates of this repository + +DEV_ACCOUNT = "" # account to host the service catalog template and then build sagemaker project + +PREPROD_ACCOUNT = "" # account to deploy the sagemaker endpoint + +PROD_ACCOUNT = "" # account to deploy the sagemaker endpoint +``` + +follow the steps below to achieve that: 1. Clone this repository in your work environment (e.g. your laptop) @@ -284,12 +296,22 @@ cdk --app ./cdk.out/assembly-Personal deploy —all as a stage could include a combination of stacks `--all` flag is included with the `deploy` command -once you are done with testing the new feature that was deployed locally, run the following to clean-up the environment: +### Clean-up + +In case you used the local deployment, once you are done with testing the new feature that was deployed locally, run the following to clean-up the environment: ``` # destroy stage to target account (make it match your stack name) cdk --app ./cdk.out/assembly-Personal destroy —all ``` +This would only delete the service catalog stack deployed in the target account and not the deployed projects. + +Similarly if you used the CI/CD deployment: +``` +# destroy deployed stack in target account (make it match your stack name) +cdk destroy +``` +This would only delete the pipeline stack and nothing else deployed from the pipeline i.e. stacks deployed to the target accounts and the deployed projects. This command could fail in the following cases: diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /app.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/app.py similarity index 96% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /app.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/app.py index d65bfb18..a22830e3 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /app.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/app.py @@ -26,7 +26,7 @@ pipeline_env = cdk.Environment(account=PIPELINE_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION) deployment_env = cdk.Environment(account=DEV_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION) -PipelineStack(app, "ml-deploy-pipeline", env=pipeline_env) +PipelineStack(app, "ml-sg-deploy-pipeline", env=pipeline_env) # Personal Stacks for testing locally, comment out when committing to repository if not os.getenv("CODEBUILD_BUILD_ARN"): diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /cdk.json b/mlops-multi-account-cdk/mlops-sm-project-template-rt/cdk.json similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /cdk.json rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/cdk.json diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/MLOPs Foundation Architecture-mlops project cicd architecture.jpg b/mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/MLOPs Foundation Architecture-mlops project cicd architecture.jpg similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/MLOPs Foundation Architecture-mlops project cicd architecture.jpg rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/MLOPs Foundation Architecture-mlops project cicd architecture.jpg diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/MLOPs Foundation Architecture-sagemaker project architecture.jpg b/mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/MLOPs Foundation Architecture-sagemaker project architecture.jpg similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/MLOPs Foundation Architecture-sagemaker project architecture.jpg rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/MLOPs Foundation Architecture-sagemaker project architecture.jpg diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/building.png b/mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/building.png similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/building.png rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/building.png diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/deployment.png b/mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/deployment.png similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /diagrams/deployment.png rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/diagrams/deployment.png diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/sm_project_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/basic_project_stack.py similarity index 98% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/sm_project_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/basic_project_stack.py index aeb58558..a6e754ff 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/sm_project_stack.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/basic_project_stack.py @@ -38,8 +38,7 @@ DeployPipelineConstruct, ) -from mlops_sm_project_template_rt.config.constants import PREPROD_ACCOUNT, PROD_ACCOUNT - +from mlops_sm_project_template_rt.config.constants import PREPROD_ACCOUNT, PROD_ACCOUNT, DEFAULT_DEPLOYMENT_REGION class MLOpsStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: @@ -260,4 +259,7 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: model_package_group_name, seed_bucket, deploy_app_key, - ) + PREPROD_ACCOUNT, + PROD_ACCOUNT, + DEFAULT_DEPLOYMENT_REGION + ) \ No newline at end of file diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/cdk_helper_scripts/zip-image/Dockerfile b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/cdk_helper_scripts/zip-image/Dockerfile similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/cdk_helper_scripts/zip-image/Dockerfile rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/cdk_helper_scripts/zip-image/Dockerfile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/config/constants.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/config/constants.py similarity index 79% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/config/constants.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/config/constants.py index aab19046..934d958f 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/config/constants.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/config/constants.py @@ -18,17 +18,13 @@ CODE_COMMIT_REPO_NAME = "mlops-sm-project-template-rt" PIPELINE_BRANCH = "main" -PIPELINE_ACCOUNT = "" +PIPELINE_ACCOUNT = "" # account used to host the pipeline handling updates of this repository -DEV_ACCOUNT = "" -DEV_REGION = "eu-west-1" +DEV_ACCOUNT = "" # account to host the service catalog template -PREPROD_ACCOUNT = "" -PREPROD_REGION = "eu-west-1" - -PROD_ACCOUNT = "" -PROD_REGION = "eu-west-1" +PREPROD_ACCOUNT = "" # account used to deploy the endpoint +PROD_ACCOUNT = "" # account used to deploy the endpoint DEFAULT_DEPLOYMENT_REGION = "eu-west-1" APP_PREFIX = "mlops-cdk" diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/build_pipeline_construct.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/build_pipeline_construct.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/build_pipeline_construct.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/build_pipeline_construct.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py similarity index 92% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py index be7fc976..7ec5ca77 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/deploy_pipeline_construct.py @@ -29,13 +29,6 @@ ) import aws_cdk from constructs import Construct -from mlops_sm_project_template_rt.config.constants import ( - PROD_ACCOUNT, - PROD_REGION, - PREPROD_ACCOUNT, - PREPROD_REGION, -) - class DeployPipelineConstruct(Construct): def __init__( @@ -48,6 +41,9 @@ def __init__( model_package_group_name: str, repo_s3_bucket_name: str, repo_s3_object_key: str, + preprod_account: int, + prod_account: int, + deployment_region: str, **kwargs, ) -> None: super().__init__(scope, construct_id, **kwargs) @@ -267,32 +263,32 @@ def __init__( ], ), codepipeline_actions.ManualApprovalAction( - action_name="Approve_Staging", + action_name="Approve_PreProd", run_order=2, - additional_information="Approving deployment for staging", + additional_information="Approving deployment for preprod", ), ], ) deploy_code_pipeline.add_stage( - stage_name="DeployStaging", + stage_name="DeployPreProd", actions=[ codepipeline_actions.CloudFormationCreateUpdateStackAction( - action_name="Deploy_CFN_Staging", + action_name="Deploy_CFN_PreProd", run_order=1, - template_path=cdk_synth_artifact.at_path("staging.template.json"), - stack_name=f"{project_name}-{construct_id}-staging", + template_path=cdk_synth_artifact.at_path("preprod.template.json"), + stack_name=f"{project_name}-{construct_id}-preprod", admin_permissions=False, replace_on_failure=True, role=iam.Role.from_role_arn( self, - "StagingActionRole", - f"arn:{Aws.PARTITION}:iam::{PREPROD_ACCOUNT}:role/cdk-hnb659fds-deploy-role-{PREPROD_ACCOUNT}-{PREPROD_REGION}", + "PreProdActionRole", + f"arn:{Aws.PARTITION}:iam::{preprod_account}:role/cdk-hnb659fds-deploy-role-{preprod_account}-{deployment_region}", ), deployment_role=iam.Role.from_role_arn( self, - "StagingDeploymentRole", - f"arn:{Aws.PARTITION}:iam::{PREPROD_ACCOUNT}:role/cdk-hnb659fds-cfn-exec-role-{PREPROD_ACCOUNT}-{PREPROD_REGION}", + "PreProdDeploymentRole", + f"arn:{Aws.PARTITION}:iam::{preprod_account}:role/cdk-hnb659fds-cfn-exec-role-{preprod_account}-{deployment_region}", ), cfn_capabilities=[ CfnCapabilities.AUTO_EXPAND, @@ -320,12 +316,12 @@ def __init__( role=iam.Role.from_role_arn( self, "ProdActionRole", - f"arn:{Aws.PARTITION}:iam::{PROD_ACCOUNT}:role/cdk-hnb659fds-deploy-role-{PROD_ACCOUNT}-{PROD_REGION}", + f"arn:{Aws.PARTITION}:iam::{prod_account}:role/cdk-hnb659fds-deploy-role-{prod_account}-{deployment_region}", ), deployment_role=iam.Role.from_role_arn( self, "ProdDeploymentRole", - f"arn:{Aws.PARTITION}:iam::{PROD_ACCOUNT}:role/cdk-hnb659fds-cfn-exec-role-{PROD_ACCOUNT}-{PROD_REGION}", + f"arn:{Aws.PARTITION}:iam::{prod_account}:role/cdk-hnb659fds-cfn-exec-role-{prod_account}-{deployment_region}", ), cfn_capabilities=[ CfnCapabilities.AUTO_EXPAND, diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/ssm_construct.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/ssm_construct.py similarity index 91% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/ssm_construct.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/ssm_construct.py index 3f0f2ee6..c24141b5 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/constructs/ssm_construct.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/constructs/ssm_construct.py @@ -44,18 +44,18 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: string_value=DEV_ACCOUNT, ) - # STAGING parameters + # PREPROD parameters PREPROD_ACCOUNT_id_param = ssm.StringParameter( self, - "StagingAccountIDParameter", - parameter_name="/mlops/staging/account_id", + "PreProdAccountIDParameter", + parameter_name="/mlops/preprod/account_id", string_value=PREPROD_ACCOUNT, ) PREPROD_REGION_param = ssm.StringParameter( self, - "StagingRegionParameter", - parameter_name="/mlops/staging/region", + "PreProdRegionParameter", + parameter_name="/mlops/preprod/region", string_value=PREPROD_REGION, ) diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/dynamic_accounts_project_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/dynamic_accounts_project_stack.py new file mode 100644 index 00000000..985134af --- /dev/null +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/dynamic_accounts_project_stack.py @@ -0,0 +1,291 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# SPDX-License-Identifier: MIT-0 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this +# software and associated documentation files (the "Software"), to deal in the Software +# without restriction, including without limitation the rights to use, copy, modify, +# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +from aws_cdk import ( + Aws, + CfnDynamicReference, + CfnDynamicReferenceService, + Stack, + Tags, + aws_s3 as s3, + aws_iam as iam, + aws_kms as kms, + aws_sagemaker as sagemaker, +) + +import aws_cdk + +from constructs import Construct + +from mlops_sm_project_template_rt.constructs.build_pipeline_construct import ( + BuildPipelineConstruct, +) +from mlops_sm_project_template_rt.constructs.deploy_pipeline_construct import ( + DeployPipelineConstruct, +) + +class MLOpsStack(Stack): + def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + # Define required parmeters + project_name = aws_cdk.CfnParameter( + self, + "SageMakerProjectName", + type="String", + description="The name of the SageMaker project.", + min_length=1, + max_length=32, + ).value_as_string + + project_id = aws_cdk.CfnParameter( + self, + "SageMakerProjectId", + type="String", + min_length=1, + max_length=16, + description="Service generated Id of the project.", + ).value_as_string + + preprod_account = aws_cdk.CfnParameter( + self, + "PreProdAccount", + type="String", + min_length=11, + max_length=13, + description="Id of preprod account.", + ).value_as_string + + prod_account = aws_cdk.CfnParameter( + self, + "ProdAccount", + type="String", + min_length=11, + max_length=13, + description="Id of prod account.", + ).value_as_string + + deployment_region = aws_cdk.CfnParameter( + self, + "DeploymentRegion", + type="String", + min_length=8, + max_length=10, + description="Deployment region for preprod and prod account.", + ).value_as_string + + + Tags.of(self).add("sagemaker:project-id", project_id) + Tags.of(self).add("sagemaker:project-name", project_name) + + # create kms key to be used by the assets bucket + kms_key = kms.Key( + self, + "ArtifactsBucketKMSKey", + description="key used for encryption of data in Amazon S3", + enable_key_rotation=True, + policy=iam.PolicyDocument( + statements=[ + iam.PolicyStatement( + actions=["kms:*"], + effect=iam.Effect.ALLOW, + resources=["*"], + principals=[iam.AccountRootPrincipal()], + ) + ] + ), + ) + + # allow cross account access to the kms key + kms_key.add_to_resource_policy( + iam.PolicyStatement( + actions=[ + "kms:Encrypt", + "kms:Decrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:DescribeKey", + ], + resources=[ + "*", + ], + principals=[ + iam.ArnPrincipal(f"arn:aws:iam::{preprod_account}:root"), + iam.ArnPrincipal(f"arn:aws:iam::{prod_account}:root"), + ], + ) + ) + + s3_artifact = s3.Bucket( + self, + "S3Artifact", + bucket_name=f"mlops-{project_name}-{project_id}-{Aws.REGION}", + encryption_key=kms_key, + versioned=True, + removal_policy=aws_cdk.RemovalPolicy.DESTROY, + ) + + # Block insecure requests to the bucket + s3_artifact.add_to_resource_policy( + iam.PolicyStatement( + sid="AllowSSLRequestsOnly", + actions=["s3:*"], + effect=iam.Effect.DENY, + resources=[ + s3_artifact.bucket_arn, + s3_artifact.arn_for_objects(key_pattern="*"), + ], + conditions={"Bool": {"aws:SecureTransport": "false"}}, + principals=[iam.AnyPrincipal()], + ) + ) + + # DEV account access to objects in the bucket + s3_artifact.add_to_resource_policy( + iam.PolicyStatement( + sid="AddDevPermissions", + actions=["s3:*"], + resources=[ + s3_artifact.arn_for_objects(key_pattern="*"), + s3_artifact.bucket_arn, + ], + principals=[ + iam.ArnPrincipal(f"arn:aws:iam::{Aws.ACCOUNT_ID}:root"), + ], + ) + ) + + # PROD account access to objects in the bucket + s3_artifact.add_to_resource_policy( + iam.PolicyStatement( + sid="AddCrossAccountPermissions", + actions=["s3:List*", "s3:Get*", "s3:Put*"], + resources=[ + s3_artifact.arn_for_objects(key_pattern="*"), + s3_artifact.bucket_arn, + ], + principals=[ + iam.ArnPrincipal(f"arn:aws:iam::{preprod_account}:root"), + iam.ArnPrincipal(f"arn:aws:iam::{prod_account}:root"), + ], + ) + ) + + model_package_group_name = f"{project_name}-{project_id}" + + # cross account model registry resource policy + model_package_group_policy = iam.PolicyDocument( + statements=[ + iam.PolicyStatement( + sid="ModelPackageGroup", + actions=[ + "sagemaker:DescribeModelPackageGroup", + ], + resources=[ + f"arn:aws:sagemaker:{Aws.REGION}:{Aws.ACCOUNT_ID}:model-package-group/{model_package_group_name}" + ], + principals=[ + iam.ArnPrincipal(f"arn:aws:iam::{preprod_account}:root"), + iam.ArnPrincipal(f"arn:aws:iam::{prod_account}:root"), + ], + ), + iam.PolicyStatement( + sid="ModelPackage", + actions=[ + "sagemaker:DescribeModelPackage", + "sagemaker:ListModelPackages", + "sagemaker:UpdateModelPackage", + "sagemaker:CreateModel", + ], + resources=[ + f"arn:aws:sagemaker:{Aws.REGION}:{Aws.ACCOUNT_ID}:model-package/{model_package_group_name}/*" + ], + principals=[ + iam.ArnPrincipal(f"arn:aws:iam::{preprod_account}:root"), + iam.ArnPrincipal(f"arn:aws:iam::{prod_account}:root"), + ], + ), + ] + ).to_json() + + model_package_group = sagemaker.CfnModelPackageGroup( + self, + "ModelPackageGroup", + model_package_group_name=model_package_group_name, + model_package_group_description=f"Model Package Group for {project_name}", + model_package_group_policy=model_package_group_policy, + tags=[ + aws_cdk.CfnTag(key="sagemaker:project-id", value=project_id), + aws_cdk.CfnTag(key="sagemaker:project-name", value=project_name), + ], + ) + + seed_bucket = CfnDynamicReference(CfnDynamicReferenceService.SSM, "/mlops/code/seed_bucket").to_string() + build_app_key = CfnDynamicReference(CfnDynamicReferenceService.SSM, "/mlops/code/build").to_string() + deploy_app_key = CfnDynamicReference(CfnDynamicReferenceService.SSM, "/mlops/code/deploy").to_string() + + kms_key = kms.Key( + self, + "PipelineBucketKMSKey", + description="key used for encryption of data in Amazon S3", + enable_key_rotation=True, + policy=iam.PolicyDocument( + statements=[ + iam.PolicyStatement( + actions=["kms:*"], + effect=iam.Effect.ALLOW, + resources=["*"], + principals=[iam.AccountRootPrincipal()], + ) + ] + ), + ) + + pipeline_artifact_bucket = s3.Bucket( + self, + "PipelineBucket", + bucket_name=f"pipeline-{project_id}-{Aws.REGION}", + encryption_key=kms_key, + versioned=True, + removal_policy=aws_cdk.RemovalPolicy.DESTROY, + ) + + BuildPipelineConstruct( + self, + "build", + project_name, + project_id, + s3_artifact, + pipeline_artifact_bucket, + model_package_group_name, + seed_bucket, + build_app_key, + ) + + DeployPipelineConstruct( + self, + "deploy", + project_name, + project_id, + pipeline_artifact_bucket, + model_package_group_name, + seed_bucket, + deploy_app_key, + preprod_account, + prod_account, + deployment_region, + ) diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/pipeline_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/pipeline_stack.py similarity index 98% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/pipeline_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/pipeline_stack.py index 2eb3cdd0..7b5b2bda 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/pipeline_stack.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/pipeline_stack.py @@ -29,8 +29,8 @@ from mlops_sm_project_template_rt.config.constants import ( APP_PREFIX, CODE_COMMIT_REPO_NAME, - DEV_REGION, DEV_ACCOUNT, + DEFAULT_DEPLOYMENT_REGION, PIPELINE_BRANCH, ) @@ -146,6 +146,6 @@ def __init__( CoreStage( self, "DEV", - env=Environment(account=DEV_ACCOUNT, region=DEV_REGION), + env=Environment(account=DEV_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION), ) ) diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/service_catalog_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/service_catalog_stack.py similarity index 86% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/service_catalog_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/service_catalog_stack.py index 4e5676f6..64dfbdc0 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /mlops_sm_project_template_rt/service_catalog_stack.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/mlops_sm_project_template_rt/service_catalog_stack.py @@ -15,6 +15,9 @@ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +import json +import logging +import os from aws_cdk import ( Aws, BundlingOptions, @@ -26,8 +29,6 @@ Tags, aws_iam as iam, aws_s3_assets as s3_assets, - aws_s3 as s3, - aws_kms as kms, aws_servicecatalog_alpha as servicecatalog_alpha, aws_servicecatalog as servicecatalog, aws_ssm as ssm, @@ -36,10 +37,15 @@ from constructs import Construct -from mlops_sm_project_template_rt.sm_project_stack import MLOpsStack +from mlops_sm_project_template_rt.basic_project_stack import MLOpsStack from mlops_sm_project_template_rt.constructs.ssm_construct import SSMConstruct -from mlops_sm_project_template_rt.config.constants import PREPROD_ACCOUNT, PROD_ACCOUNT +# Get environment variables +LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() + +# Configure logging +logger = logging.getLogger() +logger.setLevel(LOG_LEVEL) # Create a Portfolio and Product # see: https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_servicecatalog.html @@ -137,8 +143,9 @@ def __init__( actions=["iam:PassRole"], effect=iam.Effect.ALLOW, resources=[ - f"arn:aws:iam::{PREPROD_ACCOUNT}:role/*", - f"arn:aws:iam::{PROD_ACCOUNT}:role/*", + # f"arn:aws:iam::{PREPROD_ACCOUNT}:role/*", + # f"arn:aws:iam::{PROD_ACCOUNT}:role/*", + "*" ], ), ) @@ -195,7 +202,7 @@ def __init__( product_version_name=product_version.value_as_string, ) ], - description="This template includes a model building pipeline that includes a workflow to pre-process, train, evaluate and register a model. The deploy pipeline creates a staging and production endpoint.", + description="This template includes a model building pipeline that includes a workflow to pre-process, train, evaluate and register a model. The deploy pipeline creates a preprod and production endpoint.", ) # Create portfolio associate that depends on products @@ -320,4 +327,38 @@ def generate_template(self, stack: Stack, stack_name: str, **kwargs): stack = stack(stage, stack_name, synthesizer=aws_cdk.BootstraplessSynthesizer(), **kwargs) assembly = stage.synth() template_full_path = assembly.stacks[0].template_full_path + + self.remove_policy(template_full_path, template_full_path) + return template_full_path + + def remove_policy(self, input_path: str, output_path: str): + """ + Remove policy that CDK adds when part of the role_arn is provided from a cloudformation parameter + """ + with open(input_path, "r") as f: + t = json.load(f) + + # Remove policies + policy_list = [ + k for k in t["Resources"] if t["Resources"][k]["Type"] == "AWS::IAM::Policy" and ("deployPreProdActionRolePolicy" in k or "deployProdActionRolePolicy" in k) + ] + + for p in policy_list: + logger.debug(f"Removing Policy {p}") + del t["Resources"][p] + + # Remove policy dependencies + depends_on = [k for k in t["Resources"] if "DependsOn" in t["Resources"][k]] + for d in depends_on: + for p in policy_list: + if p in t["Resources"][d]["DependsOn"]: + logger.debug(f"Removing DependsOn {p}") + t["Resources"][d]["DependsOn"].remove(p) + if len(t["Resources"][d]["DependsOn"]) == 0: + del t["Resources"][d]["DependsOn"] + + # Save file back + logger.info(f"Writing template to: {output_path}") + with open(output_path, "w") as f: + json.dump(t, f, indent=2) diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /requirements-dev.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/requirements-dev.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /requirements-dev.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/requirements-dev.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /scripts/cdk-account-setup.sh b/mlops-multi-account-cdk/mlops-sm-project-template-rt/scripts/cdk-account-setup.sh similarity index 62% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /scripts/cdk-account-setup.sh rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/scripts/cdk-account-setup.sh index c8f68f0c..ed7ab93e 100755 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /scripts/cdk-account-setup.sh +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/scripts/cdk-account-setup.sh @@ -6,11 +6,17 @@ read -p 'Governance Account: ' gov_account read -p 'Dev Account: ' dev_account read -p 'PreProd Account: ' preprod_account read -p 'Prod Account: ' prod_account - -region='eu-west-1' - read -p 'Deployment region: ' region +echo 'Updating constants.py file with accounts and region details' +pattern="[0-9a-zA-Z\-]*" +sed -i '' -e "s/PIPELINE_ACCOUNT = \"$pattern\"/PIPELINE_ACCOUNT = \"$gov_account\"/" \ + -e "s/DEV_ACCOUNT = \"$pattern\"/DEV_ACCOUNT = \"$dev_account\"/" \ + -e "s/PREPROD_ACCOUNT = \"$pattern\"/PREPROD_ACCOUNT = \"$preprod_account\"/" \ + -e "s/PROD_ACCOUNT = \"$pattern\"/PROD_ACCOUNT = \"$prod_account\"/" \ + -e "s/DEFAULT_DEPLOYMENT_REGION = \"$pattern\"/DEFAULT_DEPLOYMENT_REGION = \"$region\"/" \ + mlops_infra/config/constants.py + echo 'AWS profiles to be used for each account' read -p 'Governance Account AWS Profile: ' gov_profile read -p 'Dev Account AWS Profile: ' dev_profile @@ -23,6 +29,6 @@ cdk bootstrap aws://$gov_account/$region --profile $gov_profile cdk bootstrap aws://$dev_account/$region --trust $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $dev_profile -cdk bootstrap aws://$preprod_account/$region --trust $dev_account $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $preprod_profile +cdk bootstrap aws://$preprod_account/$region --trust $dev_account,$gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $preprod_profile -cdk bootstrap aws://$prod_account/$region --trust $dev_account $gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $prod_profile +cdk bootstrap aws://$prod_account/$region --trust $dev_account,$gov_account --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --profile $prod_profile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /scripts/install-prerequisites-brew.sh b/mlops-multi-account-cdk/mlops-sm-project-template-rt/scripts/install-prerequisites-brew.sh similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /scripts/install-prerequisites-brew.sh rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/scripts/install-prerequisites-brew.sh diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/.githooks/pre-commit b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/.githooks/pre-commit similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/.githooks/pre-commit rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/.githooks/pre-commit diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/.pre-commit-config.yaml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/.pre-commit-config.yaml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/.pre-commit-config.yaml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/.pre-commit-config.yaml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/Makefile b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/Makefile similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/Makefile rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/Makefile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/buildspec.yml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/buildspec.yml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/buildspec.yml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/buildspec.yml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/__version__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/__version__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/__version__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/__version__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/_utils.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/_utils.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/_utils.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/_utils.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/get_pipeline_definition.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/get_pipeline_definition.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/get_pipeline_definition.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/get_pipeline_definition.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/run_pipeline.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/run_pipeline.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/run_pipeline.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/run_pipeline.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/_utils.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/_utils.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/_utils.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/_utils.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/pipeline.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/pipeline.py similarity index 98% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/pipeline.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/pipeline.py index 560285c9..df9c8c74 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/ml_pipelines/training/pipeline.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/ml_pipelines/training/pipeline.py @@ -154,7 +154,7 @@ def get_pipeline( region=region, version="1.0-1", py_version="py3", - instance_type=processing_instance_type, + instance_type="ml.m5.xlarge", ) script_processor = ScriptProcessor( image_uri=processing_image_uri, @@ -191,7 +191,7 @@ def get_pipeline( region=region, version="1.0-1", py_version="py3", - instance_type=training_instance_type, + instance_type="ml.m5.xlarge", ) xgb_train = Estimator( @@ -285,7 +285,7 @@ def get_pipeline( region=region, version="1.0-1", py_version="py3", - instance_type=inference_instance_type, + instance_type="ml.m5.xlarge", ) step_register = RegisterModel( name="RegisterAbaloneModel", diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/notebooks/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/notebooks/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/notebooks/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/notebooks/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/notebooks/sm_pipelines_runbook.ipynb b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/notebooks/sm_pipelines_runbook.ipynb similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/notebooks/sm_pipelines_runbook.ipynb rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/notebooks/sm_pipelines_runbook.ipynb diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/setup.cfg b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/setup.cfg similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/setup.cfg rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/setup.cfg diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/setup.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/setup.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/setup.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/setup.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/Dockerfile b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/Dockerfile similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/Dockerfile rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/Dockerfile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/main.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/main.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/main.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/main.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/evaluate/evaluate_xgboost/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/logger.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/logger.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/logger.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/logger.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/s3_helper.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/s3_helper.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/s3_helper.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/s3_helper.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/test/test_a.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/test/test_a.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/helpers/test/test_a.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/helpers/test/test_a.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/main.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/main.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/main.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/main.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/preprocessing/prepare_abalone_data/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/__main__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/__main__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/__main__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/__main__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/test/test_a.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/test/test_a.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/build_app/source_scripts/training/xgboost/test/test_a.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/build_app/source_scripts/training/xgboost/test/test_a.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/.githooks/pre-commit b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/.githooks/pre-commit similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/.githooks/pre-commit rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/.githooks/pre-commit diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/.pre-commit-config.yaml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/.pre-commit-config.yaml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/.pre-commit-config.yaml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/.pre-commit-config.yaml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/Makefile b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/Makefile similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/Makefile rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/Makefile diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/app.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/app.py similarity index 92% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/app.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/app.py index adeac742..0e4cc483 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/app.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/app.py @@ -29,11 +29,11 @@ app = cdk.App() dev_env = cdk.Environment(account=DEV_ACCOUNT, region=DEFAULT_DEPLOYMENT_REGION) -staging_env = cdk.Environment(account=PREPROD_ACCOUNT, region=PREPROD_REGION) +preprod_env = cdk.Environment(account=PREPROD_ACCOUNT, region=PREPROD_REGION) prod_env = cdk.Environment(account=PROD_ACCOUNT, region=PROD_REGION) DeployEndpointStack(app, "dev", env=dev_env) -DeployEndpointStack(app, "staging", env=staging_env) +DeployEndpointStack(app, "preprod", env=preprod_env) DeployEndpointStack(app, "prod", env=prod_env) app.synth() diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/cdk.json b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/cdk.json similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/cdk.json rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/cdk.json diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/config_mux.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/config_mux.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/config_mux.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/config_mux.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/constants.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/constants.py similarity index 92% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/constants.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/constants.py index 03b79569..1ecfd485 100644 --- a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/constants.py +++ b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/constants.py @@ -24,8 +24,8 @@ DEV_ACCOUNT = ssm_client.get_parameter(Name="/mlops/dev/account_id")["Parameter"]["Value"] -PREPROD_ACCOUNT = ssm_client.get_parameter(Name="/mlops/staging/account_id")["Parameter"]["Value"] -PREPROD_REGION = ssm_client.get_parameter(Name="/mlops/staging/region")["Parameter"]["Value"] +PREPROD_ACCOUNT = ssm_client.get_parameter(Name="/mlops/preprod/account_id")["Parameter"]["Value"] +PREPROD_REGION = ssm_client.get_parameter(Name="/mlops/preprod/region")["Parameter"]["Value"] PROD_ACCOUNT = ssm_client.get_parameter(Name="/mlops/prod/account_id")["Parameter"]["Value"] PROD_REGION = ssm_client.get_parameter(Name="/mlops/prod/region")["Parameter"]["Value"] diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/dev/constants.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/dev/constants.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/dev/constants.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/dev/constants.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/dev/endpoint-config.yml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/dev/endpoint-config.yml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/dev/endpoint-config.yml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/dev/endpoint-config.yml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/prod/constants.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/prod/constants.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/prod/constants.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/prod/constants.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/prod/endpoint-config.yml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/prod/endpoint-config.yml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/prod/endpoint-config.yml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/prod/endpoint-config.yml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/staging/constants.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/staging/constants.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/staging/constants.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/staging/constants.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/staging/endpoint-config.yml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/staging/endpoint-config.yml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/config/staging/endpoint-config.yml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/config/staging/endpoint-config.yml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/deploy_endpoint_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/deploy_endpoint_stack.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/deploy_endpoint_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/deploy_endpoint_stack.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/get_approved_package.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/get_approved_package.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/deploy_endpoint/get_approved_package.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/deploy_endpoint/get_approved_package.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/requirements-dev.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/requirements-dev.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/requirements-dev.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/requirements-dev.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/requirements.txt b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/requirements.txt similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/requirements.txt rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/requirements.txt diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/source.bat b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/source.bat similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/source.bat rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/source.bat diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/README.md b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/README.md similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/README.md rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/README.md diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/buildspec.yml b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/buildspec.yml similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/buildspec.yml rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/buildspec.yml diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/endpoint_test.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/endpoint_test.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/integration_tests/endpoint_test.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/integration_tests/endpoint_test.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/unittests/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/unittests/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/unittests/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/unittests/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/unittests/test_deploy_app_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/unittests/test_deploy_app_stack.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /seed_code/deploy_app/tests/unittests/test_deploy_app_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/seed_code/deploy_app/tests/unittests/test_deploy_app_stack.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /source.bat b/mlops-multi-account-cdk/mlops-sm-project-template-rt/source.bat similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /source.bat rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/source.bat diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/unit/__init__.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/unit/__init__.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/unit/__init__.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/unit/__init__.py diff --git a/mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/unit/test_mlops_batch_v2_stack.py b/mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/unit/test_mlops_batch_v2_stack.py similarity index 100% rename from mlops-multi-account-cdk/mlops-sm-project-template-rt /tests/unit/test_mlops_batch_v2_stack.py rename to mlops-multi-account-cdk/mlops-sm-project-template-rt/tests/unit/test_mlops_batch_v2_stack.py