From 4b2240d12588525e927902e012891e5d2236bbd3 Mon Sep 17 00:00:00 2001 From: Santiago Garcia Arango Date: Thu, 21 Sep 2023 23:34:56 -0500 Subject: [PATCH 1/4] MAJOR adds for initial structure and CI/CD --- .github/prerequisites/README.md | 24 ++ ...ithub-actions-oidc-federation-and-role.yml | 92 +++++ .github/workflows/deploy.yml | 190 +++++++++ README.md | 35 +- assets/SantiagoGarciaArangoCDK.png | Bin 0 -> 160729 bytes cdk.context.json | 8 + cdk.json | 3 + cdk/.gitignore | 10 + cdk/app.py | 47 +++ cdk/helpers/add_tags.py | 22 ++ cdk/requirements.txt | 3 + cdk/stacks/__init__.py | 0 cdk/stacks/cdk_organization.py | 225 +++++++++++ cdk/stacks/scp_allow_specific_regions.json | 64 +++ cdk/stacks/scp_prevent_leaving_org.json | 10 + important_commands.sh | 60 +++ poetry.lock | 365 +++++++----------- pyproject.toml | 8 +- tests/unit/test_synth_success.py | 29 ++ 19 files changed, 960 insertions(+), 235 deletions(-) create mode 100644 .github/prerequisites/README.md create mode 100644 .github/prerequisites/github-actions-oidc-federation-and-role.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 assets/SantiagoGarciaArangoCDK.png create mode 100644 cdk.context.json create mode 100644 cdk.json create mode 100644 cdk/.gitignore create mode 100644 cdk/app.py create mode 100644 cdk/helpers/add_tags.py create mode 100644 cdk/requirements.txt create mode 100644 cdk/stacks/__init__.py create mode 100644 cdk/stacks/cdk_organization.py create mode 100644 cdk/stacks/scp_allow_specific_regions.json create mode 100644 cdk/stacks/scp_prevent_leaving_org.json create mode 100644 important_commands.sh create mode 100644 tests/unit/test_synth_success.py diff --git a/.github/prerequisites/README.md b/.github/prerequisites/README.md new file mode 100644 index 0000000..c77ade8 --- /dev/null +++ b/.github/prerequisites/README.md @@ -0,0 +1,24 @@ +# AWS PREREQUISITES FOR THE GITHUB ACTIONS CI/CD PIPELINE + +Inspired on: + +- https://github.com/aws-actions/configure-aws-credentials/tree/main/examples + +## Part 1 (CDK Bootstrap) + +Make sure that the target account (on the needed regions) have CDK Bootstrapped already. If not, please follow these steps to have CDK init stack already in place: + +- [AWS CDK Bootstrapping Guide](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) + +## Part 2 (GitHub OIDC Federation and Role) + +The CI/CD uses aws-action `configure-aws-credentials` with OIDC federation. Prior to using this project, we need to deploy the [github-actions-oidc-federation-and-role](github-actions-oidc-federation-and-role.yml) CloudFormation template in the AWS account(s) that we need to deploy the solution. Specify the GitHub Organization Name, Repository Name, and the specific branch you want to deploy on. + +> Note: In this case, "GitHub Organization Name" is "san99tiago" (my GitHub account). + +To use the example you will need to set the following GitHub Action Secrets: + +| Secret Key | Used With | Description | +| --------------- | ------------------------- | ------------------------ | +| AWS_ACCOUNT_ID | configure-aws-credentials | The AWS account ID | +| AWS_DEPLOY_ROLE | configure-aws-credentials | The name of the IAM role | diff --git a/.github/prerequisites/github-actions-oidc-federation-and-role.yml b/.github/prerequisites/github-actions-oidc-federation-and-role.yml new file mode 100644 index 0000000..cc8cdc9 --- /dev/null +++ b/.github/prerequisites/github-actions-oidc-federation-and-role.yml @@ -0,0 +1,92 @@ +--- +AWSTemplateFormatVersion: "2010-09-09" +Description: Github Actions configuration - OIDC IAM IdP and associated role CI/CD + +Parameters: + + GitHubOrganization: + Type: String + Description: This is the root organization or personal account where repos are stored (Case Sensitive) + + RepositoryName: + Type: String + Description: The repo(s) these roles will have access to. (Use * for all org or personal repos) + Default: "*" + + BranchName: + Type: String + Description: Name of the git branch to to trust. (Use * for all branches) + Default: "*" + + RoleName: + Type: String + Description: Name the Role + + UseExistingProvider: + Type: String + Description: "Only one GitHub Provider can exists. Choose yes if one is already present in account" + Default: "no" + AllowedValues: + - "yes" + - "no" + +Conditions: + + CreateProvider: !Equals ["no", !Ref UseExistingProvider] + +Resources: + + IdpGitHubOidc: + Type: AWS::IAM::OIDCProvider + Condition: CreateProvider + Properties: + Url: https://token.actions.githubusercontent.com + ClientIdList: + - sts.amazonaws.com + - !Sub https://github.com/${GitHubOrganization}/${RepositoryName} + ThumbprintList: + - 6938fd4d98bab03faadb97b34396831e3780aea1 + Tags: + - Key: Name + Value: !Sub ${RoleName}-OIDC-Provider + + RoleGithubActions: + Type: AWS::IAM::Role + Properties: + RoleName: !Ref RoleName + AssumeRolePolicyDocument: + Statement: + - Effect: Allow + Action: sts:AssumeRoleWithWebIdentity + Principal: + Federated: !If + - CreateProvider + - !Ref IdpGitHubOidc + - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:oidc-provider/token.actions.githubusercontent.com + Condition: + StringLike: + token.actions.githubusercontent.com:sub: !Sub repo:${GitHubOrganization}/${RepositoryName}:ref:refs/heads/${BranchName} + + RoleGithubActionsPolicies: + Type: "AWS::IAM::Policy" + Properties: + PolicyName: !Sub ${RoleName}-Policy + PolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: "Allow" + Action: "sts:AssumeRole" + Resource: "arn:aws:iam::*:role/cdk-*" + Roles: + - !Ref RoleGithubActions + +Outputs: + + IdpGitHubOidc: + Condition: CreateProvider + Description: "ARN of Github OIDC Provider" + Value: !GetAtt IdpGitHubOidc.Arn + + RoleGithubActionsARN: + Description: "CICD Role for GitHub Actions" + Value: !GetAtt RoleGithubActions.Arn \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..72d38c8 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,190 @@ +name: deploy + +on: + push: + branches: [ 'main', 'feature/**'] + tags: [ 'v*'] +env: + AWS_DEFAULT_REGION: us-east-1 + AWS_DEFAULT_OUTPUT: json + +jobs: + code-quality: + name: Check coding standards + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: echo "Job triggered by ${{ github.event_name }} event." + - run: echo "Job running on a ${{ runner.os }} server hosted by GitHub." + - run: echo "Branch name is ${{ github.ref }} and repository is ${{ github.repository }}." + - uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + installer-parallel: true + - name: Install Poetry dependencies + run: poetry install --no-interaction + - name: Check code formatting + run: poetry run poe black-check + + test: + name: Run tests + needs: code-quality + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + installer-parallel: true + + - name: Run tests + run: poetry run poe test-unit + + - name: Archive code coverage results + uses: actions/upload-artifact@v3 + with: + name: code-coverage-report + path: htmlcov + + cdk-synth: + name: CDK Synth + runs-on: ubuntu-latest + needs: code-quality + permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + installer-parallel: true + + - name: Install Poetry dependencies + run: poetry install --no-interaction + + - name: Set up NodeJs + uses: actions/setup-node@v3 + with: + node-version: "20" + + - name: Install CDK + run: | + npm install -g aws-cdk + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: ${{ env.AWS_DEFAULT_REGION }} + role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }} + role-session-name: myGitHubActions + + # Sample STS get caller identity for tests + - name: sts get-caller-identity + run: | + aws sts get-caller-identity + + - name: Synth CDK to CloudFormation Template + run: | + source .venv/bin/activate + cdk synth + + - name: CDK Diff + run: | + source .venv/bin/activate + cdk diff + + - name: Archive CDK Synth results (no assets) + uses: actions/upload-artifact@v3 + with: + name: cdk-synth-folder + path: | + ./cdk.out + !./cdk.out/asset.* + retention-days: 1 + + iac-checkov: + name: IaC Checkov Validations + runs-on: ubuntu-latest + needs: cdk-synth + steps: + - uses: actions/checkout@v3 + + - name: Dowload CDK Synth results + uses: actions/download-artifact@v3 + with: + name: cdk-synth-folder + path: ./cdk-synth-output-folder + + - name: Display files in the output folder + run: ls -lrta + working-directory: ./cdk-synth-output-folder + + - name: Run Checkov action + id: checkov + uses: bridgecrewio/checkov-action@v12 + with: + directory: cdk-synth-output-folder/ + framework: cloudformation + soft_fail: true # optional: do not return an error code if there are failed checks + skip_check: CKV_AWS_2 # optional: skip a specific check_id. can be comma separated list + quiet: true # optional: display only failed checks + + cdk-deploy: + name: Deploy CDK + runs-on: ubuntu-latest + needs: iac-checkov + if: github.ref == 'refs/heads/main' + permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: true + virtualenvs-in-project: true + installer-parallel: true + + - name: Install Poetry dependencies + run: poetry install --no-interaction + + - name: Set up NodeJs + uses: actions/setup-node@v3 + with: + node-version: "20" + + - name: Install CDK + run: npm install -g aws-cdk + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: ${{ env.AWS_DEFAULT_REGION }} + role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }} + role-session-name: myGitHubActions + + # NOTE: for now no manual approvals are required + - name: Deploy to AWS + run: | + source .venv/bin/activate + cdk deploy --require-approval=never diff --git a/README.md b/README.md index c14d861..51cd155 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,42 @@ # :bank: AWS-CDK-ORGANIZATIONS-DEMO :bank: +![Badge Workflow](https://github.com/san99tiago/aws-cdk-organizations-demo/actions/workflows/deploy.yml/badge.svg) + DEMO for the best practices of AWS Organizations with Infrastructure as Code on CDK-Python. ## TODO: -Add a detailed README with diagram, explanation and examples of usage. +Add a detailed README with diagrams, explanations and examples of usage. + +## CI/CD and Deployment 🚀 + +The deployment process is intended to run with GitHub Actions Workflows. + +- On `feature/****` branches commits, the CDK project gets **synthesized** and it shows the **state diff** between the current AWS resources and the expected ones. + +- When merged to `main` branch, it will get deployed to the AWS Account automatically. + +To understand the AWS Credentials usage, please refer to the [`prerequisites/README.md`](.github/prerequisites/README.md). + +## Special thanks :gift: + +- Thanks to all contributors of the great OpenSource projects that I am using.
+ +## Author :musical_keyboard: + +### Santiago Garcia Arango + + + + + + +
+

Curious DevOps Engineer passionate about advanced cloud-based solutions and deployments in AWS. I am convinced that today's greatest challenges must be solved by people that love what they do.

+
+

+
## LICENSE -Copyright 2023 Santiago Garcia Arango +Copyright 2023 Santiago Garcia Arango. diff --git a/assets/SantiagoGarciaArangoCDK.png b/assets/SantiagoGarciaArangoCDK.png new file mode 100644 index 0000000000000000000000000000000000000000..507b49c33ee7e4703cd922cb598be5abc7644ab7 GIT binary patch literal 160729 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 z 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 z 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%0Aw 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 PLEASE SEE NOTES ON "stacks/cdk_organization.py" file. (IMPORTANT) +################################################################################ + +# Built-in imports +import os + +# External imports +import aws_cdk as cdk + +# Own imports +from helpers.add_tags import add_tags_to_app +from stacks.cdk_organization import OrganizationStack + + +print("--> Deployment AWS configuration (safety first):") +print("CDK_DEFAULT_ACCOUNT", os.getenv("CDK_DEFAULT_ACCOUNT")) +print("CDK_DEFAULT_REGION", os.getenv("CDK_DEFAULT_REGION")) + +app = cdk.App() + +# Configurations for the deployment (obtained from env vars and CDK context) +DEPLOYMENT_ENVIRONMENT = os.environ.get("DEPLOYMENT_ENVIRONMENT", "prod") +MAIN_RESOURCES_NAME = app.node.try_get_context("main_resources_name") + + +org_stack = OrganizationStack( + app, + MAIN_RESOURCES_NAME, + DEPLOYMENT_ENVIRONMENT, + env={ + "account": os.getenv("CDK_DEFAULT_ACCOUNT"), + "region": os.getenv("CDK_DEFAULT_REGION"), + }, + description="Stack for {} infrastructure in {} environment".format( + MAIN_RESOURCES_NAME, DEPLOYMENT_ENVIRONMENT + ), +) + +add_tags_to_app( + app, + MAIN_RESOURCES_NAME, + DEPLOYMENT_ENVIRONMENT, +) + +app.synth() diff --git a/cdk/helpers/add_tags.py b/cdk/helpers/add_tags.py new file mode 100644 index 0000000..9d2fe74 --- /dev/null +++ b/cdk/helpers/add_tags.py @@ -0,0 +1,22 @@ +import aws_cdk as cdk + + +def add_tags_to_app( + app: cdk.App, main_resources_name: str, deployment_environment: str +) -> None: + """ + Function to add custom tags to app in a centralized fashion. + + :param app: (aws_cdk.App) to apply tags to. + :param main_resources_name: (str) the main solution name being deployed. + :param deployment_environment: (str) value of the tag "environment". + """ + + app_tags = cdk.Tags.of(app) + app_tags.add("MainResourcesName", main_resources_name) + app_tags.add("Environment", deployment_environment) + + # Add tags from CDK context + context_tags = app.node.try_get_context("tags") + for key in context_tags: + app_tags.add(key, context_tags[key]) diff --git a/cdk/requirements.txt b/cdk/requirements.txt new file mode 100644 index 0000000..5ccefb1 --- /dev/null +++ b/cdk/requirements.txt @@ -0,0 +1,3 @@ +aws-cdk-lib==2.87.0 +constructs>=10.0.0,<11.0.0 +pepperize.cdk-organizations==0.7.577 diff --git a/cdk/stacks/__init__.py b/cdk/stacks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cdk/stacks/cdk_organization.py b/cdk/stacks/cdk_organization.py new file mode 100644 index 0000000..c71ee3c --- /dev/null +++ b/cdk/stacks/cdk_organization.py @@ -0,0 +1,225 @@ +################################################################################ +# SAN99TIAGODEMO AWS ORGANIZATION (INFRASTRUCTURE AS CODE CDK SOLUTION) +# NOTE 1: I am using a CDK-based approach that is not maintained by AWS (yet): +# --> https://github.com/pepperize/cdk-organizations +# NOTE 2: As multiple accounts are being created, there are some "CDK" node +# ... dependencies. See example at the end on the source repo (link above) +################################################################################ + +# Built-in imports +import os +import json + +# External imports +from aws_cdk import ( + Stack, + CfnOutput, +) +from constructs import Construct +from pepperize_cdk_organizations import ( + Account, + FeatureSet, + Organization, + OrganizationalUnit, + Policy, + PolicyType, +) + + +class OrganizationStack(Stack): + """ + Class to create the infrastructure of the AWS Organizations. + """ + + def __init__( + self, scope: Construct, construct_id: str, deployment_environment: str, **kwargs + ) -> None: + super().__init__(scope, construct_id, **kwargs) + + self.construct_id = construct_id + self.deployment_environment = deployment_environment + + # Organization creation, services configuration and SCPs + self.create_root_organization() + self.configure_organization_services() + self.configure_service_control_policies() + + # Create "sandbox" OU with inner OUs and accounts inside + self.create_ou_sandbox() + self.create_accounts_inside_ou_sandbox() + + # !IMPORTANT: this is mandatory for adding CDK dependencies for each account + self.add_cdk_accounts_dependencies() # DO NOT REMOVE! + + # Create CloudFormation outputs + self.generate_cloudformation_outputs() + + def create_root_organization(self): + """ + Method that creates the AWS Organization (root). + """ + self.organization = Organization( + self, + id="RootOrganization", + feature_set=FeatureSet.ALL, + ) + + def configure_organization_services(self): + """ + Method that configures the AWS Organization with the desired enabled + services and policies (enable the desired ones). + """ + # Note 1: for more details on services, see full list at: + # --> https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html + # Note 2: for more details on policies, see full list at: + # --> https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies.html + + # Enable service for AWS IAM Identity Center (AWS Single Sign-On Dashboard) + self.organization.enable_aws_service_access("sso.amazonaws.com") + + # Enable service for Resource Access Manager (RAM) + self.organization.enable_aws_service_access("ram.amazonaws.com") + + # Enable Service Control Policies (SCPs) + self.organization.enable_policy_type(PolicyType.SERVICE_CONTROL_POLICY) + + def configure_service_control_policies(self): + """ + Method that configures the AWS Organization with the desired Service + Control Policies (SCPs) at organization level. + """ + + # Get OS path to SCPs files and load them (for easier read/write of SCPs) + path_scp_prevent_leaving_org = os.path.join( + os.path.dirname(__file__), + "scp_prevent_leaving_org.json", + ) + with open(path_scp_prevent_leaving_org, "r") as file: + scp_prevent_leaving_org = json.load(file) + + path_scp_allow_specific_regions = os.path.join( + os.path.dirname(__file__), + "scp_allow_specific_regions.json", + ) + with open(path_scp_allow_specific_regions, "r") as file: + scp_allow_specific_regions = json.load(file) + + # SCP for preventing accounts of leaving organization + self.policy_deny_leave_org = Policy( + self, + id="PolicyDenyLeave", + content=json.dumps(scp_prevent_leaving_org), + policy_name="PreventLeavingOrganization", + policy_type=PolicyType.SERVICE_CONTROL_POLICY, + description="SCP to prevent accounts from leaving the organization", + ) + self.organization.attach_policy(self.policy_deny_leave_org) + + # SCP for only allow access to specific regions in AWS (deny others) + self.policy_allow_specific_regions = Policy( + self, + id="PolicyAllowSpecificRegions", + content=json.dumps(scp_allow_specific_regions), + policy_name="AllowSpecificRegions", + policy_type=PolicyType.SERVICE_CONTROL_POLICY, + description="SCP to only allow access to specific AWS Regions", + ) + self.organization.attach_policy(self.policy_allow_specific_regions) + + def create_ou_sandbox(self): + """ + Method that creates inner Organizational Units (OUs) inside organization. + """ + self.top_level_ou_sandbox = OrganizationalUnit( + self, + id="SandboxOU", + parent=self.organization.root, + organizational_unit_name="sandbox", + ) + + def create_accounts_inside_ou_sandbox(self): + """ + Method that creates AWS Accounts inside the required Organizational + Units (OUs). + """ + self.account_sandbox_1 = Account( + self, + id="SandboxAccount1", + account_name="san99tiago-sandbox-1", + email="san99tiagodemo+san99tiago-sandbox-1@gmail.com", + parent=self.top_level_ou_sandbox, + role_name="OrganizationAccountAccessRole", + ) + self.account_sandbox_2 = Account( + self, + id="SandboxAccount2", + account_name="san99tiago-sandbox-2", + email="san99tiagodemo+san99tiago-sandbox-2@gmail.com", + parent=self.top_level_ou_sandbox, + role_name="OrganizationAccountAccessRole", + ) + + def add_cdk_accounts_dependencies(self): + """ + ULTRA IMPORTANT METHOD to add CDK dependencies for the AWS Accounts that + are being created (to avoid 2 accounts creation simultaneously, which is + not supported by AWS). This is because of AWS Organizations limitation. + """ + # ! IMPORTANT: We MUST add these dependencies, as AWS Organizations only support + # ... one account creation "IN_PROGRESS". We add CDK dependency to solve issue + # ... and wait for the previous one to finish, to continue with the next... + self.account_sandbox_2.node.add_dependency(self.account_sandbox_1) + + def generate_cloudformation_outputs(self): + """ + Method to add the relevant CloudFormation outputs. + """ + + CfnOutput( + self, + "DeploymentEnvironment", + value=self.deployment_environment, + description="Deployment environment", + ) + + CfnOutput( + self, + "OrganizationId", + value=self.organization.organization_id, + description="ID of the Organization", + ) + + CfnOutput( + self, + "RootId", + value=self.organization.root.identifier(), + description="ID of the Root OU", + ) + + CfnOutput( + self, + "ManagementAccountId", + value=self.organization.management_account_id, + description="ID of the Management Account", + ) + + CfnOutput( + self, + "ManagementAccountEmail", + value=self.organization.management_account_email, + description="Email of the Management Account", + ) + + CfnOutput( + self, + "AccountSandbox1Id", + value=self.account_sandbox_1.account_id, + description="ID of the SandboxAccount1", + ) + + CfnOutput( + self, + "AccountSandbox2Id", + value=self.account_sandbox_2.account_id, + description="ID of the SandboxAccount2", + ) diff --git a/cdk/stacks/scp_allow_specific_regions.json b/cdk/stacks/scp_allow_specific_regions.json new file mode 100644 index 0000000..378147f --- /dev/null +++ b/cdk/stacks/scp_allow_specific_regions.json @@ -0,0 +1,64 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "DenyAllOutsideUS", + "Effect": "Deny", + "NotAction": [ + "a4b:*", + "acm:*", + "aws-marketplace-management:*", + "aws-marketplace:*", + "aws-portal:*", + "budgets:*", + "ce:*", + "chime:*", + "cloudfront:*", + "config:*", + "cur:*", + "directconnect:*", + "ec2:DescribeRegions", + "ec2:DescribeTransitGateways", + "ec2:DescribeVpnGateways", + "fms:*", + "globalaccelerator:*", + "health:*", + "iam:*", + "importexport:*", + "kms:*", + "mobileanalytics:*", + "networkmanager:*", + "organizations:*", + "pricing:*", + "route53:*", + "route53domains:*", + "route53-recovery-cluster:*", + "route53-recovery-control-config:*", + "route53-recovery-readiness:*", + "s3:GetAccountPublic*", + "s3:ListAllMyBuckets", + "s3:ListMultiRegionAccessPoints", + "s3:PutAccountPublic*", + "shield:*", + "sts:*", + "support:*", + "trustedadvisor:*", + "waf-regional:*", + "waf:*", + "wafv2:*", + "wellarchitected:*" + ], + "Resource": "*", + "Condition": { + "StringNotEquals": { + "aws:RequestedRegion": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2" + ] + } + } + } + ] +} diff --git a/cdk/stacks/scp_prevent_leaving_org.json b/cdk/stacks/scp_prevent_leaving_org.json new file mode 100644 index 0000000..7245daa --- /dev/null +++ b/cdk/stacks/scp_prevent_leaving_org.json @@ -0,0 +1,10 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Deny", + "Action": ["organizations:LeaveOrganization"], + "Resource": ["*"] + } + ] +} diff --git a/important_commands.sh b/important_commands.sh new file mode 100644 index 0000000..15fe790 --- /dev/null +++ b/important_commands.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +################################################################################ +# PART 1: Configure NodeJs, Python and CDK libraries +################################################################################ + +# Install NodeJs and Python +# --> https://nodejs.org/en/download/ +# --> https://www.python.org/downloads/ + +# Verify that NodeJs/npm is installed correctly +node --version +npm --version + +# Verify that Python/pip is installed correctly +python --version || python3 --version +pip --version || pip3 --version + +# Install AWS-CDK (on NodeJs) +sudo npm install -g aws-cdk + +# Verify correct install of AWS-CDK +npm list --global | grep aws-cdk + + +################################################################################ +# PART 2: Initial Project Setup (Only run these at the beginning) +################################################################################ + +# Configure AWS credentials (follow steps) +aws configure +# --> Alternative 1: Environment variables added to terminal session +# --> Alternative 2: AWS Cloud9 with the right permissions +# --> Alternative 3: AWS SSO login + +# Bootstrap CDK (provision initial resources to work with CDK.. S3, roles, etc) +#! Change "ACCOUNT-NUMBER" and "REGION" to your needed values +cdk bootstrap aws://ACCOUNT-NUMBER/REGION + +# Install poetry (for managing Python dependencies) +pip install poetry + +# Install poetry dependencies for the virtual environment +poetry install + + +################################################################################ +# PART 3: Main CDK and Python commands (most used) +################################################################################ + +# Activate Python virtual environment with Poetry tool +poetry shell + +# Run unit tests +poe test-unit + +# Deploy commands (NOTE: prefered method is with the CI/CD Pipeline) +export DEPLOYMENT_ENVIRONMENT=dev +cdk synth +cdk deploy # I recommend to use GitHub Actions Pipeline instead diff --git a/poetry.lock b/poetry.lock index 95ef3e5..20b9729 100644 --- a/poetry.lock +++ b/poetry.lock @@ -92,61 +92,66 @@ publication = ">=0.0.3" typeguard = ">=2.13.3,<2.14.0" [[package]] -name = "aws-lambda-powertools" -version = "2.25.0" -description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." +name = "black" +version = "23.9.1" +description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.7.4,<4.0.0" +python-versions = ">=3.8" files = [ - {file = "aws_lambda_powertools-2.25.0-py3-none-any.whl", hash = "sha256:4abdef017650db820fc9c39d3a31e8f51be5ddb338b63741e5ea6c0966291b0e"}, - {file = "aws_lambda_powertools-2.25.0.tar.gz", hash = "sha256:29470dccd8bd8125aa5faa6f131f3b3d5641f4b8b505a8ea5fc70e082eacdade"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, + {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, + {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, + {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, + {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, + {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, + {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, + {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, + {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, + {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, + {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, ] [package.dependencies] -aws-xray-sdk = {version = ">=2.8.0,<3.0.0", optional = true, markers = "extra == \"tracer\" or extra == \"all\""} -fastjsonschema = {version = ">=2.14.5,<3.0.0", optional = true, markers = "extra == \"validation\" or extra == \"all\""} -pydantic = {version = ">=1.8.2,<2.0.0", optional = true, markers = "extra == \"parser\" or extra == \"all\""} -typing-extensions = ">=4.6.2,<5.0.0" +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] -all = ["aws-xray-sdk (>=2.8.0,<3.0.0)", "fastjsonschema (>=2.14.5,<3.0.0)", "pydantic (>=1.8.2,<2.0.0)"] -aws-sdk = ["boto3 (>=1.20.32,<2.0.0)"] -datadog = ["datadog-lambda (>=4.77.0,<5.0.0)"] -parser = ["pydantic (>=1.8.2,<2.0.0)"] -tracer = ["aws-xray-sdk (>=2.8.0,<3.0.0)"] -validation = ["fastjsonschema (>=2.14.5,<3.0.0)"] - -[[package]] -name = "aws-xray-sdk" -version = "2.12.0" -description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "aws-xray-sdk-2.12.0.tar.gz", hash = "sha256:295afc237073a80956d7d4f27c31830edcb9a8ccca9ef8aa44990badef15e5b7"}, - {file = "aws_xray_sdk-2.12.0-py2.py3-none-any.whl", hash = "sha256:30886e23cc2daadc1c06a76f25b071205e84848419d1ddf097b62a565e156542"}, -] - -[package.dependencies] -botocore = ">=1.11.3" -wrapt = "*" +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.28.50" +version = "1.28.52" description = "The AWS SDK for Python" category = "dev" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.50-py3-none-any.whl", hash = "sha256:cda98a2952cccb1db4208c53a1bba6585620fffa0ca05244827ca65884856d1f"}, - {file = "boto3-1.28.50.tar.gz", hash = "sha256:33062ab3801029ab7b2cb35b6bf4768715d13c5f9ea7d5dce22ace6219c1dc7a"}, + {file = "boto3-1.28.52-py3-none-any.whl", hash = "sha256:1d36db102517d62c6968b3b0636303241f56859d12dd071def4882fc6e030b20"}, + {file = "boto3-1.28.52.tar.gz", hash = "sha256:a34fc153cb2f6fb2f79a764286c967392e8aae9412381d943bddc576c4f7631a"}, ] [package.dependencies] -botocore = ">=1.31.50,<1.32.0" +botocore = ">=1.31.52,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -155,14 +160,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.31.50" +version = "1.31.52" description = "Low-level, data-driven core of boto 3." category = "dev" optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.50-py3-none-any.whl", hash = "sha256:5038a407783ea394aaf0671d1086cf55cc1e7c303e1fac244b76adc78cc7ef07"}, - {file = "botocore-1.31.50.tar.gz", hash = "sha256:a1343f2e38ea86e11247d61bd37a9d5656c16186f4a21b482c713589a054c605"}, + {file = "botocore-1.31.52-py3-none-any.whl", hash = "sha256:46b0a75a38521aa6a75fddccb1542e002930e609d4e13516f40fef170d32e515"}, + {file = "botocore-1.31.52.tar.gz", hash = "sha256:6d09881c5a8be34b497872ca3936f8757d886a6f42f2a8703411928189cfedc0"}, ] [package.dependencies] @@ -373,6 +378,21 @@ files = [ {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.6" @@ -469,35 +489,35 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.3" +version = "41.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, - {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, - {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, - {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, ] [package.dependencies] @@ -528,21 +548,6 @@ files = [ [package.extras] test = ["pytest (>=6)"] -[[package]] -name = "fastjsonschema" -version = "2.18.0" -description = "Fastest Python implementation of JSON schema" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - [[package]] name = "idna" version = "3.4" @@ -557,22 +562,22 @@ files = [ [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -618,14 +623,14 @@ files = [ [[package]] name = "jsii" -version = "1.88.0" +version = "1.89.0" description = "Python client for jsii runtime" category = "main" optional = false python-versions = "~=3.7" files = [ - {file = "jsii-1.88.0-py3-none-any.whl", hash = "sha256:b3888141c30b83a30bfbe03a877bbf8ae42f957b6ccca02bae448853debffaf8"}, - {file = "jsii-1.88.0.tar.gz", hash = "sha256:a59e0f962589dcc741d2bcf2a7b4c4a927a29d3f9a2804a192c734e2e3275018"}, + {file = "jsii-1.89.0-py3-none-any.whl", hash = "sha256:20a463e8533eded656b285f532e5468a414c48ab083cf0cf93a86d593f0c36b8"}, + {file = "jsii-1.89.0.tar.gz", hash = "sha256:6edbb79afc0b7407cb64e9dd0f27b512279201307c16dd9ae72462b3cbd09970"}, ] [package.dependencies] @@ -746,6 +751,18 @@ server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0) ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "packaging" version = "23.1" @@ -770,25 +787,53 @@ files = [ {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, ] +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + [[package]] name = "pepperize-cdk-organizations" -version = "0.7.680" +version = "0.7.687" description = "Manage AWS organizations, organizational units (OU), accounts and service control policies (SCP)." category = "main" optional = false python-versions = "~=3.7" files = [ - {file = "pepperize.cdk-organizations-0.7.680.tar.gz", hash = "sha256:d975d957b1149c00038eecfedff334c5fd406ebc60b0657ba6a212068fc3f01b"}, - {file = "pepperize.cdk_organizations-0.7.680-py3-none-any.whl", hash = "sha256:94404b108726533e07cdd0577d7d97116e2a526eacf79ac020d731acbc527aa3"}, + {file = "pepperize.cdk-organizations-0.7.687.tar.gz", hash = "sha256:f3cce8add55c84a5ef6afb2ed5b61f0cca8f014708c1b63c6c3f348bc9dacd58"}, + {file = "pepperize.cdk_organizations-0.7.687-py3-none-any.whl", hash = "sha256:200ce977fe178c844b4ac1fdffdac2f32ca88be1f0e71eec103011ed33c7125f"}, ] [package.dependencies] aws-cdk-lib = ">=2.37.1,<3.0.0" constructs = ">=10.0.5,<11.0.0" -jsii = ">=1.88.0,<2.0.0" +jsii = ">=1.89.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<2.14.0" +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + [[package]] name = "pluggy" version = "1.3.0" @@ -848,59 +893,6 @@ files = [ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -[[package]] -name = "pydantic" -version = "1.10.12" -description = "Data validation and settings management using python type hints" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - [[package]] name = "pytest" version = "7.4.2" @@ -1177,91 +1169,6 @@ MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] -[[package]] -name = "wrapt" -version = "1.15.0" -description = "Module for decorators, wrappers and monkey patching." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, -] - [[package]] name = "xmltodict" version = "0.13.0" @@ -1293,4 +1200,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "865881a9886b3af42b10e3f8da3059301d63e2e24b84937ea4bc1204314c304c" +content-hash = "3f12c87063ebe3f7c8e2b1f4c5ab3fb67b0449dd0e88d3fdf8583f2295950512" diff --git a/pyproject.toml b/pyproject.toml index 122af40..18b48ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,13 +13,13 @@ constructs = ">=10.0.0,<11.0.0" pepperize-cdk-organizations = "^0.7.680" [tool.poetry.group.dev.dependencies] -aws-lambda-powertools = {extras = ["all"], version = "^2.16.2"} -boto3 = "^1.26.153" poethepoet = "^0.20.0" +black = "^23.9.1" pytest = "^7.3.2" pytest-mock = "^3.11.1" coverage = "^7.2.7" moto = "^4.1.11" +boto3 = "^1.26.153" [tool.pytest.ini_options] minversion = "6.0" @@ -33,9 +33,9 @@ build-backend = "poetry.core.masonry.api" [tool.poe.tasks] test-unit = ["_test_unit", "_coverage_html"] -test-unit-cdk = ["_test_unit_cdk", "_coverage_html"] +black-format = "black ." +black-check = "black . --check --diff -v" _test_unit = "coverage run -m pytest tests/unit" -_test_unit_cdk = "coverage run -m pytest tests/unit/cdk" _coverage_html = "coverage html" [tool.coverage.run] diff --git a/tests/unit/test_synth_success.py b/tests/unit/test_synth_success.py new file mode 100644 index 0000000..cb2af79 --- /dev/null +++ b/tests/unit/test_synth_success.py @@ -0,0 +1,29 @@ +from aws_cdk import aws_sns as sns +import aws_cdk as cdk +from aws_cdk.assertions import Template + +from cdk.stacks.cdk_organization import OrganizationStack + + +def test_synthesizes_properly(): + app = cdk.App() + + # Create the TestOrganizationStack with sample params + deployment_env = "prod" + main_resources_name = "test-organization" + state_machine_stack = OrganizationStack( + app, + main_resources_name, + deployment_env, + ) + + # Prepare the stack for assertions. + template = Template.from_stack(state_machine_stack) + + template.has_output( + "DeploymentEnvironment", + { + "Description": "Deployment environment", + "Value": deployment_env, + }, + ) From c638e7a2546afa8a088090c7dbbc7f29b2d0153b Mon Sep 17 00:00:00 2001 From: Santiago Garcia Arango Date: Thu, 21 Sep 2023 23:40:29 -0500 Subject: [PATCH 2/4] Fix CI/CD unit tests and stages dependencies --- .github/workflows/deploy.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 72d38c8..5f3ce3d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -31,13 +31,16 @@ jobs: - name: Check code formatting run: poetry run poe black-check - test: + tests: name: Run tests needs: code-quality runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.11 - name: Install Poetry uses: snok/install-poetry@v1 with: @@ -147,7 +150,9 @@ jobs: cdk-deploy: name: Deploy CDK runs-on: ubuntu-latest - needs: iac-checkov + needs: + - iac-checkov + - tests if: github.ref == 'refs/heads/main' permissions: id-token: write # This is required for requesting the JWT From 7f89182e25876929abfd601f39d1510b3c5651d9 Mon Sep 17 00:00:00 2001 From: Santiago Garcia Arango Date: Thu, 21 Sep 2023 23:45:13 -0500 Subject: [PATCH 3/4] Fix CI/CD unit tests and stages dependencies --- .github/workflows/deploy.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5f3ce3d..cf8a065 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -48,6 +48,9 @@ jobs: virtualenvs-in-project: true installer-parallel: true + - name: Install Poetry dependencies + run: poetry install --no-interaction + - name: Run tests run: poetry run poe test-unit From f068c3437889fb7b2635bf7137a364cb683f3167 Mon Sep 17 00:00:00 2001 From: Santiago Garcia Arango Date: Thu, 21 Sep 2023 23:49:10 -0500 Subject: [PATCH 4/4] Minor updates on CI/CD names --- .github/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cf8a065..e2c639d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -60,8 +60,8 @@ jobs: name: code-coverage-report path: htmlcov - cdk-synth: - name: CDK Synth + cdk-synth-diff: + name: CDK Synth & Diff runs-on: ubuntu-latest needs: code-quality permissions: @@ -104,7 +104,7 @@ jobs: run: | aws sts get-caller-identity - - name: Synth CDK to CloudFormation Template + - name: CDK Synth run: | source .venv/bin/activate cdk synth @@ -126,7 +126,7 @@ jobs: iac-checkov: name: IaC Checkov Validations runs-on: ubuntu-latest - needs: cdk-synth + needs: cdk-synth-diff steps: - uses: actions/checkout@v3