diff --git a/.github/workflows/pull-request-ephemeral-deploy.yml b/.github/workflows/pull-request-ephemeral-deploy.yml new file mode 100644 index 0000000..164e567 --- /dev/null +++ b/.github/workflows/pull-request-ephemeral-deploy.yml @@ -0,0 +1,38 @@ +name: Deploy Sandbox Environment + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: [ "**" ] + +jobs: + get-tg-versions: + permissions: + contents: read + uses: launchbynttdata/launch-workflows/.github/workflows/reusable-terragrunt-versions.yml@0.1.7 + + build-matrix: + permissions: + contents: read + uses: launchbynttdata/launch-workflows/.github/workflows/reusable-github-matrix-tg.yml@0.1.7 + with: + platform_environment: sandbox + + call-terragrunt-deploy: + needs: [get-tg-versions, build-matrix] + permissions: + contents: read + id-token: write + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} + + uses: launchbynttdata/launch-workflows/.github/workflows/reusable-terragrunt-deploy-ephemeral.yml@feature/tg-deploy-without-gh-environment + with: + git_branch: ${{ github.head_ref }} + assume_role_arn: "arn:aws:iam::020127659860:role/github-actions-deploy-role" + tf_version: ${{ needs.get-tg-versions.outputs.tf_version }} + tg_version: ${{ needs.get-tg-versions.outputs.tg_version }} + region: ${{ matrix.terragrunt_environment.region }} + env_id: ${{ matrix.terragrunt_environment.instance }} + secrets: inherit diff --git a/.github/workflows/deploy-sandbox.yml b/.github/workflows/pull-request-ephemeral-destroy.yml similarity index 81% rename from .github/workflows/deploy-sandbox.yml rename to .github/workflows/pull-request-ephemeral-destroy.yml index a57f25d..0e2d062 100644 --- a/.github/workflows/deploy-sandbox.yml +++ b/.github/workflows/pull-request-ephemeral-destroy.yml @@ -2,6 +2,7 @@ name: Deploy Sandbox Environment on: pull_request: + types: [closed] branches: [ "**" ] jobs: @@ -26,11 +27,12 @@ jobs: fail-fast: false matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} - uses: launchbynttdata/launch-workflows/.github/workflows/reusable-terragrunt-deploy.yml@0.1.7 + uses: launchbynttdata/launch-workflows/.github/workflows/reusable-terragrunt-destroy-ephemeral.yml@feature/tg-deploy-without-gh-environment with: + git_branch: ${{ github.head_ref }} + assume_role_arn: "arn:aws:iam::020127659860:role/github-actions-deploy-role" tf_version: ${{ needs.get-tg-versions.outputs.tf_version }} tg_version: ${{ needs.get-tg-versions.outputs.tg_version }} - environment: ${{ matrix.terragrunt_environment.environment }} region: ${{ matrix.terragrunt_environment.region }} env_id: ${{ matrix.terragrunt_environment.instance }} secrets: inherit diff --git a/platform/production/us-east-1/000/terraform.tfvars b/platform/production/us-east-1/000/terraform.tfvars index db8aaa6..7016139 100644 --- a/platform/production/us-east-1/000/terraform.tfvars +++ b/platform/production/us-east-1/000/terraform.tfvars @@ -1,10 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-useast1-production-000-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Primary" } - diff --git a/platform/production/us-east-1/000/terragrunt.hcl b/platform/production/us-east-1/000/terragrunt.hcl index e874185..4473241 100644 --- a/platform/production/us-east-1/000/terragrunt.hcl +++ b/platform/production/us-east-1/000/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/platform/production/us-east-2/000/terraform.tfvars b/platform/production/us-east-2/000/terraform.tfvars index 8955673..d6f23b2 100644 --- a/platform/production/us-east-2/000/terraform.tfvars +++ b/platform/production/us-east-2/000/terraform.tfvars @@ -1,9 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-useast2-production-000-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Failover" } diff --git a/platform/production/us-east-2/000/terragrunt.hcl b/platform/production/us-east-2/000/terragrunt.hcl index e874185..4473241 100644 --- a/platform/production/us-east-2/000/terragrunt.hcl +++ b/platform/production/us-east-2/000/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/platform/sandbox/us-east-2/000/terraform.tfvars b/platform/sandbox/us-east-2/000/terraform.tfvars index 8bde537..2c56d2e 100644 --- a/platform/sandbox/us-east-2/000/terraform.tfvars +++ b/platform/sandbox/us-east-2/000/terraform.tfvars @@ -1,9 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-useast2-sandbox-000-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Primary-East" } diff --git a/platform/sandbox/us-east-2/000/terragrunt.hcl b/platform/sandbox/us-east-2/000/terragrunt.hcl index e874185..4473241 100644 --- a/platform/sandbox/us-east-2/000/terragrunt.hcl +++ b/platform/sandbox/us-east-2/000/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/platform/sandbox/us-east-2/001/terraform.tfvars b/platform/sandbox/us-east-2/001/terraform.tfvars index 1738c6f..a139886 100644 --- a/platform/sandbox/us-east-2/001/terraform.tfvars +++ b/platform/sandbox/us-east-2/001/terraform.tfvars @@ -1,9 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-useast2-sandbox-001-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Failover-East" } diff --git a/platform/sandbox/us-east-2/001/terragrunt.hcl b/platform/sandbox/us-east-2/001/terragrunt.hcl index e874185..4473241 100644 --- a/platform/sandbox/us-east-2/001/terragrunt.hcl +++ b/platform/sandbox/us-east-2/001/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/platform/sandbox/us-west-2/000/terraform.tfvars b/platform/sandbox/us-west-2/000/terraform.tfvars index 6405163..3d773cd 100644 --- a/platform/sandbox/us-west-2/000/terraform.tfvars +++ b/platform/sandbox/us-west-2/000/terraform.tfvars @@ -1,9 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-uswest2-sandbox-000-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Primary-West" } diff --git a/platform/sandbox/us-west-2/000/terragrunt.hcl b/platform/sandbox/us-west-2/000/terragrunt.hcl index e874185..4473241 100644 --- a/platform/sandbox/us-west-2/000/terragrunt.hcl +++ b/platform/sandbox/us-west-2/000/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/platform/sandbox/us-west-2/001/terraform.tfvars b/platform/sandbox/us-west-2/001/terraform.tfvars index 52932fb..959f12a 100644 --- a/platform/sandbox/us-west-2/001/terraform.tfvars +++ b/platform/sandbox/us-west-2/001/terraform.tfvars @@ -1,9 +1,8 @@ -create_package = true -create = true -handler = "app.lambda_handler" -cors = { allow_origins = ["*"] } -source_path = "../../../../../../../src/function/" -name = "platform_sample-uswest2-sandbox-001-fn-000" -environment_variables = { +create_package = true +create = true +handler = "app.lambda_handler" +cors = { allow_origins = ["*"] } +source_path = "../../../../../../../src/function/" +environment_variables = { PAYLOAD = "Failover-West" } diff --git a/platform/sandbox/us-west-2/001/terragrunt.hcl b/platform/sandbox/us-west-2/001/terragrunt.hcl index e874185..4473241 100644 --- a/platform/sandbox/us-west-2/001/terragrunt.hcl +++ b/platform/sandbox/us-west-2/001/terragrunt.hcl @@ -3,9 +3,9 @@ include "root" { } locals { - git_tag = "1.0.3" + git_tag = "1.0.0" } terraform { - source = "tfr://terraform.registry.launch.nttdata.com/module_primitive/lambda_function/aws?version=${local.git_tag}" + source = "tfr://terraform.registry.launch.nttdata.com/module_reference/lambda_function/aws?version=${local.git_tag}" } diff --git a/terragrunt.hcl b/terragrunt.hcl index 51a78cb..346401b 100644 --- a/terragrunt.hcl +++ b/terragrunt.hcl @@ -1,13 +1,25 @@ locals { - naming_prefix = "sample_lambda" - relative_path = path_relative_to_include() - path_parts = split("/", local.relative_path) - account_name = local.path_parts[1] - region = local.path_parts[2] - environment_instance = basename(local.relative_path) - bucket = "${replace(local.naming_prefix, "_", "-")}-${local.region}-${local.account_name}-${local.environment_instance}-tfstate" - dynamodb_table = "${local.naming_prefix}-${local.region}-${local.account_name}-${local.environment_instance}-tflocks" + # After initial apply, changes to these naming values will result in the creation of new state bucket(s) and dynamodb table(s)! + logical_product_family = "sample" + logical_product_service = "lambda" + + # Don't modify the locals below this line. + name_dash = replace("${trimspace(local.logical_product_family)}_${trimspace(local.logical_product_service)}", "_", "-") + name_hash = substr(sha256(local.name_dash), 0, 8) + resource_names_strategy = local.account_name == "sandbox" ? "minimal_random_suffix" : "standard" + relative_path = path_relative_to_include() + path_parts = split("/", local.relative_path) + account_name = local.path_parts[1] + region = local.path_parts[2] + environment_instance = basename(local.relative_path) + git_branch = get_env("GIT_BRANCH", "") + current_user = get_env("USER", "") + bucket = "${local.name_dash}-${local.region}-${local.name_hash}-tfstate" + dynamodb_table = "${local.name_dash}-${local.region}-${local.name_hash}-tflocks" + repo_name = basename(abspath("${get_path_to_repo_root()}")) + state_filename_ephemeral = "${local.account_name}/${coalesce(local.git_branch, local.current_user)}/${local.environment_instance}/terraform.tfstate" + state_filename_persist = "${local.account_name}/${coalesce(local.git_branch, local.current_user)}/${local.environment_instance}/terraform.tfstate" } # Generate the AWS provider settings @@ -21,7 +33,7 @@ provider "aws" { default_tags { tags = { Organization = var.organization_tag - Repository = var.repository_tag + Repository = coalesce(var.repository_tag, "${basename(abspath(dirname(find_in_parent_folders("terragrunt.hcl"))))}") CommitHash = var.commit_hash_tag } } @@ -34,7 +46,7 @@ provider "aws" { default_tags { tags = { Organization = var.organization_tag - Repository = var.repository_tag + Repository = coalesce(var.repository_tag, "${basename(abspath(dirname(find_in_parent_folders("terragrunt.hcl"))))}") CommitHash = var.commit_hash_tag } } @@ -42,14 +54,17 @@ provider "aws" { variable "organization_tag" { type = string + default = "launchbynttdata" } variable "repository_tag" { type = string + default = "" } variable "commit_hash_tag" { type = string + default = "RUN OUTSIDE PIPELINE" } EOF @@ -64,7 +79,7 @@ remote_state { } config = { bucket = "${local.bucket}" - key = "terraform.tfstate" + key = local.account_name == "sandbox" ? local.state_filename_ephemeral : local.state_filename_persist region = "${local.region}" encrypt = true dynamodb_table = "${local.dynamodb_table}" @@ -72,7 +87,9 @@ remote_state { } inputs = { - naming_prefix = local.naming_prefix - environment = local.account_name - region = local.region -} \ No newline at end of file + logical_product_family = local.logical_product_family + logical_product_service = local.logical_product_service + class_env = local.account_name + region = local.region + resource_names_strategy = local.resource_names_strategy +}