$30 off During Our Annual Pro Sale. View Details »

Simultaneously Deploying Infrastructure across the Globe

Simultaneously Deploying Infrastructure across the Globe

In this demo, I show how to deploy a single code-base across all available AWS Regions using HashiCorp Terraform Cloud and the AWS and AWSCC Providers for Terraform.

---

Companion Code: github.com/ksatirli/deploying-across-the-globe

Kerim Satirli
PRO

December 01, 2022
Tweet

More Decks by Kerim Satirli

Other Decks in Technology

Transcript

  1. re:Invent 2022
    Simultaneously
    Deploying Infrastructure
    across the Globe.

    View Slide

  2. View Slide

  3. Provision multiple regions
    without region-specific code.

    View Slide

  4. 01
    All Availability Zones,
    None of the paper-cuts
    Geography

    View Slide

  5. AWS Regions

    View Slide

  6. Terraform Concepts
    CODE EDITOR
    # EC2 Instance for order processing
    resource "aws_instance" "order_processing" {
    ami = var.ami_ids["orders"]
    instance_type = "m5.large"
    !!"
    }

    View Slide

  7. Terraform Concepts
    CODE EDITOR
    # get list of all opted-in AWS Regions
    data "aws_regions" "available" {
    all_regions = true
    filter {
    name = "opt-in-status"
    values = ["opted-in"]
    }
    }

    View Slide

  8. Terraform Concepts
    TERMINAL
    ~ >_ echo "data.aws_regions.available" | terraform console
    {
    "all_regions" = tobool(null)
    "filter" = toset([])
    "id" = "aws"
    "names" = toset([
    "eu-central-1",
    "eu-central-2",
    "us-east-1",
    "us-east-2",
    "us-west-1",
    "us-west-2",
    ])
    }

    View Slide

  9. 02
    Global Infrastructure,
    Local Isolation
    Workspace Seeding

    View Slide

  10. Terraform Cloud Workspaces
    CODE EDITOR
    # create a Terraform Cloud Workspace for each AWS Region
    resource "tfe_workspace" "regions" {
    for_each = toset(data.aws_regions.available.names)
    name = each.key
    description = "Regional Workspace for `${each.key}`."
    tag_names = [
    "regional",
    ]
    vcs_repo {
    identifier = "ksatirli/regional-deployment-example"
    branch = "main"
    oauth_token_id = data.tfe_oauth_client.client.oauth_token_id
    }
    }

    View Slide

  11. Terraform Cloud Workspaces
    CODE EDITOR
    # create a Terraform Cloud Workspace for each AWS Region
    resource "tfe_workspace" "regions" {
    for_each = toset(data.aws_regions.available.names)
    !!"
    terraform_version = var.terraform_version
    !!"
    }

    View Slide

  12. Regional Terraform Cloud Workspaces
    app.terraform.io/app/ksatirli/workspaces

    View Slide

  13. Regional Terraform Cloud Workspaces
    app.terraform.io/app/ksatirli/workspaces

    View Slide

  14. Regional Terraform Cloud Workspaces
    app.terraform.io/app/ksatirli/workspaces

    View Slide

  15. 03
    Single Code-base,
    Regional Impact.
    Single

    View Slide

  16. Regional Terraform Cloud Workspace
    app.terraform.io/app/ksatirli/workspaces/aws-ap-northeast-1

    View Slide

  17. Regional Terraform Cloud Workspace
    app.terraform.io/app/ksatirli/workspaces/aws-ap-northeast-1

    View Slide

  18. Regional Terraform Cloud Workspace
    app.terraform.io/app/ksatirli/workspaces/aws-ap-northeast-1

    View Slide

  19. Regional Terraform Cloud Workspace
    app.terraform.io/app/ksatirli/workspaces/aws-ap-northeast-1

    View Slide

  20. Regional Terraform Cloud Workspace
    app.terraform.io/app/ksatirli/workspaces/aws-ap-northeast-1

    View Slide

  21. Regional Terraform Cloud Workspace
    aws-ap-northeast-1-ueco.s3.amazonaws.com/index.html

    View Slide

  22. Sr. Developer Advocate II at HashiCorp
    he / him
    @ksatirli
    Kerim
    Satirli

    View Slide

  23. Thank You

    View Slide