Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Challenge: Build Collaboratively

Slide 4

Slide 4 text

conversational interface Laws of Robotics (sort of) observability

Slide 5

Slide 5 text

FROM !"platform=linux/amd64 node:18-alpine3.17 LABEL org.opencontainers.image.authors='ksatirli' LABEL org.opencontainers.image.url='github.com/workloads/minecraft-bot' LABEL org.opencontainers.image.description='Excavation Assistant' LABEL org.opencontainers.image.licenses='Apache-2.0' LABEL org.opencontainers.image.source='github.com/workloads/minecraft-bot' COPY ./ / WORKDIR / RUN npm install CMD [ "node", "dist/index.js" ] Dockerfile Container Image

Slide 6

Slide 6 text

AWS: us-west-2

Slide 7

Slide 7 text

job "minecraft_server" { datacenters = ["aws"] type = "service" namespace = "default" priority = 99 group "minecraft" { count = 1 ephemeral_disk { migrate = true size = 1024 sticky = true } network { mode = "host" Minecraft Server server.nomad.hcl

Slide 8

Slide 8 text

nomad run server.nomad.hcl Terminal Minecraft Server ==> Monitoring evaluation "e614d2f7" Evaluation triggered by job "minecraft_server" Allocation "82aa9f54" created Evaluation status: "complete" ==> Evaluation "e614d2f7" finished.

Slide 9

Slide 9 text

nomad-leader.svcs.dev:4646/ui/jobs Minecraft Server

Slide 10

Slide 10 text

nomad-leader.svcs.dev:4646/ui/jobs/minecraft_server@default Minecraft Server

Slide 11

Slide 11 text

Demo

Slide 12

Slide 12 text

nomad run bot.nomad.hcl Terminal Multi-Region Deployment ==> Monitoring evaluation "c6118496" Evaluation triggered by job "minecraft_bot" Allocation "8862fb0e" created Allocation "cae76d09" created Allocation "ff1f1972" created Evaluation status: "complete" ==> Evaluation "c6118496" finished.

Slide 13

Slide 13 text

nomad-leader.svcs.dev:4646/ui/jobs/minecraft_bot@default Minecraft Bot and Server

Slide 14

Slide 14 text

AWS: us-* AZ: *eu GCP: asia-* Multi-Cloud Deployment

Slide 15

Slide 15 text

aws_regions = toset([ "af-south-1", "ap-east-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ap-southeast-3", "ca-central-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-south-2", "eu-west-1", "eu-west-2", "eu-west-3", "me-south-1", "sa-east-1", Terraform Console Multi-Region Deployment

Slide 16

Slide 16 text

module "regional_aws_workspaces" { for_each = toset(data.aws_regions.main.names) source = "ksatirli/regional-workspace/tfe" version = "1.2.0" region = { category = "terraform" identifier = each.key prefix = "aws" variable = "aws_region" } vcs_repo = { identifier = "workloads/regional-aws-deployment" branch = "main" } } regional_deployments.tf Multi-Region Deployment

Slide 17

Slide 17 text

module "regional_aws_workspaces" { for_each = toset(data.aws_regions.main.names) source = "ksatirli/regional-workspace/tfe" version = "1.2.0" region = { category = "terraform" identifier = each.key prefix = "aws" variable = "aws_region" } vcs_repo = { identifier = "workloads/regional-aws-deployment" branch = "inactive" } } regional_deployments.tf Multi-Region Deployment

Slide 18

Slide 18 text

variable "cidr_map" { type = object({ geo = map(number) cardinality = map(number) }) description = "Mapping of CIDR data by AWS Region." default = { geo = { # Asia Central ac = 22 # Africa af = 23 # Asia Pacific ap = 27 Multi-Region Networking regional_cidrs.tf

Slide 19

Slide 19 text

app.terraform.io/app/workloads/workspaces Multi-Region Deployment

Slide 20

Slide 20 text

Demo

Slide 21

Slide 21 text

This talk wasn't about Minecraft.

Slide 22

Slide 22 text

This talk was about fault tolerance.

Slide 23

Slide 23 text

Take-aways ▪ train like you play - no manual ! ▪ codify infrastructure and processes ▪ architect for awareness, don't depend on it

Slide 24

Slide 24 text

Demo Code github.com/workloads/

Slide 25

Slide 25 text

speakerdeck.com/ksatirli