Slide 1

Slide 1 text

@juliaferraioli ‹#› Julia Ferraioli Senior Fungi Advocate @juliaferraioli, google.com/+JuliaFerraioli 1-Up Your DevOps Workflow With Google Cloud Platform and Atlas

Slide 2

Slide 2 text

@juliaferraioli ‹#› Sneak peek 0 1 2 3 Demo Toolbox Cycle: Create, Build, Deploy Success! And Coping

Slide 3

Slide 3 text

@juliaferraioli ‹#› Demo? Demo. Demo!

Slide 4

Slide 4 text

@juliaferraioli ‹#›

Slide 5

Slide 5 text

@juliaferraioli ‹#› ‹#› Hyperspace

Slide 6

Slide 6 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub Hyperspace

Slide 7

Slide 7 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub ● Written by @ken_pratt and @icco Hyperspace

Slide 8

Slide 8 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub ● Written by @ken_pratt and @icco ● Javascript frontend, Go backend Hyperspace

Slide 9

Slide 9 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub ● Written by @ken_pratt and @icco ● Javascript frontend, Go backend ● Multiplayer game Hyperspace

Slide 10

Slide 10 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub ● Written by @ken_pratt and @icco ● Javascript frontend, Go backend ● Multiplayer game ● Unlimited bounds Hyperspace

Slide 11

Slide 11 text

@juliaferraioli ‹#› ‹#› ● Open source on GitHub ● Written by @ken_pratt and @icco ● Javascript frontend, Go backend ● Multiplayer game ● Unlimited bounds ● Pretty fun Hyperspace

Slide 12

Slide 12 text

@juliaferraioli ‹#› What’s in my toolbox?

Slide 13

Slide 13 text

@juliaferraioli ‹#› Performance The Google Toolbox

Slide 14

Slide 14 text

@juliaferraioli ‹#› Performance The Google Toolbox

Slide 15

Slide 15 text

@juliaferraioli ‹#› Performance The Google & HashiCorp Toolbox

Slide 16

Slide 16 text

@juliaferraioli ‹#› Create

Slide 17

Slide 17 text

@juliaferraioli ‹#› Decisions, decisions...

Slide 18

Slide 18 text

@juliaferraioli ‹#› Decisions, decisions...

Slide 19

Slide 19 text

@juliaferraioli ‹#› Decisions, decisions...

Slide 20

Slide 20 text

@juliaferraioli ‹#› Decisions, decisions...

Slide 21

Slide 21 text

@juliaferraioli ‹#› A little Vagrant here, a little Vagrant there

Slide 22

Slide 22 text

@juliaferraioli ‹#› A little Vagrant here, a little Vagrant there

Slide 23

Slide 23 text

@juliaferraioli ‹#› The simplest of Vagrantfiles Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.network "forwarded_port", guest: 9393, host: 9393 config.vm.provision "shell", path: "bootstrap.sh" config.vm.provision "shell", path: "hyperspace-be.sh" config.vm.provision "shell", path: "hyperspace-fe.sh" end

Slide 24

Slide 24 text

@juliaferraioli ‹#› A little Vagrant here, a little Vagrant there

Slide 25

Slide 25 text

@juliaferraioli ‹#› A little Vagrant here, a little Vagrant there

Slide 26

Slide 26 text

@juliaferraioli ‹#› A little Vagrant here, a little Vagrant there

Slide 27

Slide 27 text

@juliaferraioli ‹#› Continuum of Computing

Slide 28

Slide 28 text

@juliaferraioli ‹#› Continuum of Computing Virtualized hardware Abstracted computing power

Slide 29

Slide 29 text

@juliaferraioli ‹#› Continuum of Computing Virtualized hardware Abstracted computing power Compute Engine Infrastructure 
 at Google speed

Slide 30

Slide 30 text

@juliaferraioli ‹#› Continuum of Computing Virtualized hardware Abstracted computing power Compute Engine Infrastructure 
 at Google speed App Engine Build your scalable app 
 faster

Slide 31

Slide 31 text

@juliaferraioli ‹#› Continuum of Computing Virtualized hardware Abstracted computing power Container Engine Manages your container cluster and actively schedules your containers Compute Engine Infrastructure 
 at Google speed App Engine Build your scalable app 
 faster

Slide 32

Slide 32 text

@juliaferraioli ‹#› Continuum of Computing Virtualized hardware Abstracted computing power Container Engine Manages your container cluster and actively schedules your containers Compute Engine Infrastructure 
 at Google speed App Engine Build your scalable app 
 faster

Slide 33

Slide 33 text

@juliaferraioli ‹#› [In a parallel universe…] $ vagrant plugin install vagrant-google

Slide 34

Slide 34 text

@juliaferraioli ‹#› [In a parallel universe…] Vagrant.configure("2") do |config| config.vm.box = "gce" config.vm.provider :google do |google, override| google.google_project_id = "" google.google_client_email = "" google.google_json_key_location = "" override.ssh.username = "" override.ssh.private_key_path = "/.ssh/google_compute_engine" google.machine_type = "n1-standard-1" google.image = "ubuntu-1404-trusty-v20150909a" google.zone = "us-central1-f" google.name = "hashiconf-gce-#{Time.now.to_i}" {...omitted script files for screen…} end end

Slide 35

Slide 35 text

@juliaferraioli ‹#› [In a parallel universe…] Vagrant.configure("2") do |config| config.vm.box = "gce" config.vm.provider :google do |google, override| google.google_project_id = "" google.google_client_email = "" google.google_json_key_location = "" override.ssh.username = "" override.ssh.private_key_path = "/.ssh/google_compute_engine" google.machine_type = "n1-standard-1" google.image = "ubuntu-1404-trusty-v20150909a" google.zone = "us-central1-f" google.name = "hashiconf-gce-#{Time.now.to_i}" {...omitted script files for screen…} end end

Slide 36

Slide 36 text

@juliaferraioli ‹#› [In a parallel universe…] Vagrant.configure("2") do |config| config.vm.box = "gce" config.vm.provider :google do |google, override| google.google_project_id = "" google.google_client_email = "" google.google_json_key_location = "" override.ssh.username = "" override.ssh.private_key_path = "/.ssh/google_compute_engine" google.machine_type = "n1-standard-1" google.image = "ubuntu-1404-trusty-v20150909a" google.zone = "us-central1-f" google.name = "hashiconf-gce-#{Time.now.to_i}" {...omitted script files for screen…} end end

Slide 37

Slide 37 text

@juliaferraioli ‹#› [In a parallel universe…] $ vagrant up --provider=google

Slide 38

Slide 38 text

@juliaferraioli ‹#›

Slide 39

Slide 39 text

@juliaferraioli ‹#› Build

Slide 40

Slide 40 text

@juliaferraioli ‹#› Creating a Compute Engine image with Packer hyperspace-[be/fe].json "builders": [ { "type": "googlecompute", "project_id": "{{user `project_id`}}", "account_file": "pkey.json", "zone": "us-central1-f", "source_image": "ubuntu-1404-trusty-v20150909a", "image_name": "hyperspace-[be/fe]-{{timestamp}}" } ], "provisioners": [... { "type": "shell", "script": "scripts/hyperspace-[be/fe].sh" }, ...]

Slide 41

Slide 41 text

@juliaferraioli ‹#› Creating a Compute Engine image with Packer hyperspace-[be/fe].json "builders": [ { "type": "googlecompute", "project_id": "{{user `project_id`}}", "account_file": "pkey.json", "zone": "us-central1-f", "source_image": "ubuntu-1404-trusty-v20150909a", "image_name": "hyperspace-[be/fe]-{{timestamp}}" } ], "provisioners": [... { "type": "shell", "script": "scripts/hyperspace-[be/fe].sh" }, ...]

Slide 42

Slide 42 text

@juliaferraioli ‹#› ‹#› hyperspace-[be/fe].sh

Slide 43

Slide 43 text

@juliaferraioli ‹#› ‹#› ● Installs Go, NGINX ● Clones & builds hyperspace ● Adds hyperspace to NGINX config ● Makes hyperspace start upon reboot ● Restarts the NGINX server hyperspace-[be/fe].sh

Slide 44

Slide 44 text

@juliaferraioli ‹#› Creating a Compute Engine image with Packer hyperspace-[be/fe].json "post-processors": [ [ { "type": "atlas", "token": "{{user `atlas_token`}}", "artifact": "{{user `atlas_username`}}/hyperspace-[be/fe]", "artifact_type": "google.image", "metadata": { "created_at": "{{timestamp}}" } } ] ]

Slide 45

Slide 45 text

@juliaferraioli ‹#› Creating a Compute Engine image with Packer hyperspace-[be/fe].json "post-processors": [ [ { "type": "atlas", "token": "{{user `atlas_token`}}", "artifact": "{{user `atlas_username`}}/hyperspace-[be/fe]", "artifact_type": "google.image", "metadata": { "created_at": "{{timestamp}}" } } ] ]

Slide 46

Slide 46 text

@juliaferraioli ‹#› Building with Packer $ packer push -name /hyperspace-fe hyperspace-fe.json $ packer push -name /hyperspace-be hyperspace-be.json

Slide 47

Slide 47 text

@juliaferraioli ‹#› Deploy

Slide 48

Slide 48 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf provider "google" { account_file = "${file("pkey.json")}" project = "hashiconf-demo" region = "us-central1" } resource "atlas_artifact" "hyperspace-[be/fe]" { name = "${var.ATLAS_USERNAME}/hyperspace-[be/fe]" type = "google.image" }

Slide 49

Slide 49 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf provider "google" { account_file = "${file("pkey.json")}" project = "hashiconf-demo" region = "us-central1" } resource "atlas_artifact" "hyperspace-[be/fe]" { name = "${var.ATLAS_USERNAME}/hyperspace-[be/fe]" type = "google.image" }

Slide 50

Slide 50 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf provider "google" { account_file = "${file("pkey.json")}" project = "hashiconf-demo" region = "us-central1" } resource "atlas_artifact" "hyperspace-[be/fe]" { name = "${var.ATLAS_USERNAME}/hyperspace-[be/fe]" type = "google.image" }

Slide 51

Slide 51 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf provider "google" { account_file = "${file("pkey.json")}" project = "hashiconf-demo" region = "us-central1" } resource "atlas_artifact" "hyperspace-[be/fe]" { name = "${var.ATLAS_USERNAME}/hyperspace-[be/fe]" type = "google.image" }

Slide 52

Slide 52 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf resource "google_compute_instance" "hyperspace-be" { name = "hyperspace-be" machine_type = "n1-standard-1" zone = "us-central1-f" disk { image = "${atlas_artifact.hyperspace-be.id}" } ...

Slide 53

Slide 53 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf resource "google_compute_instance" "hyperspace-be" { name = "hyperspace-be" machine_type = "n1-standard-1" zone = "us-central1-f" disk { image = "${atlas_artifact.hyperspace-be.id}" } ...

Slide 54

Slide 54 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf resource "google_compute_instance" "hyperspace-be" { name = "hyperspace-be" machine_type = "n1-standard-1" zone = "us-central1-f" disk { image = "${atlas_artifact.hyperspace-be.id}" } ...

Slide 55

Slide 55 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf ... network_interface { network = "default" access_config { // Ephemeral IP } } count = 1 lifecycle = { create_before_destroy = true } }

Slide 56

Slide 56 text

@juliaferraioli ‹#› Deploy and configure with Terraform main.tf ... network_interface { network = "default" access_config { // Ephemeral IP } } count = 1 lifecycle = { create_before_destroy = true } }

Slide 57

Slide 57 text

@juliaferraioli ‹#› Deploy and configure with Terraform $ terraform apply

Slide 58

Slide 58 text

@juliaferraioli ‹#› Success! And Coping

Slide 59

Slide 59 text

@juliaferraioli ‹#› Using Terraform to adapt and update $ terraform apply

Slide 60

Slide 60 text

@juliaferraioli ‹#› HashiCorp + Google Cloud Platform = a great way to develop, deploy, & manage

Slide 61

Slide 61 text

@juliaferraioli ‹#› Resources 0 1 2 3 4 5 Google Cloud Platform: https://cloud.google.com/docs/ Code from the presentation: https://goo.gl/mqrw62 Consul & Google Cloud Platform: http://goo.gl/tC2KP1 Slides: https://speakerdeck.com/juliaferraioli/1-up-your-devops-workflow-1 Spaaaaaace: https://github.com/kenpratt/hyperspace Vagrant & GCE: https://github.com/mitchellh/vagrant-google

Slide 62

Slide 62 text

@juliaferraioli ‹#› https://cloud.google.com/free-trial/

Slide 63

Slide 63 text

@juliaferraioli ‹#› Creative Commons image by Feans