Terratest & Jenkins CI/CD with Terraform, Modern ... · terraform init $ cd tf $ terraform init...

Post on 22-May-2020

64 views 3 download

Transcript of Terratest & Jenkins CI/CD with Terraform, Modern ... · terraform init $ cd tf $ terraform init...

Modern Provisioning andCICD with Terraform

Terratest amp JenkinsDuncan Hutty

Overview

1 Introduction Context Philosophy

2 Provisioning Exercises

1 MVP

2 Testing

3 CICD

4 Refactoring

3 Coping with complexity amp scale

httpgitlabcomdhuttymodern-provisioning_code

IntroductionContext

Philosophy

ContextInfrastructure

Conguration [Management]

Orchestration

Provisioning

CICD

Pipelines

Philosophy

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Overview

1 Introduction Context Philosophy

2 Provisioning Exercises

1 MVP

2 Testing

3 CICD

4 Refactoring

3 Coping with complexity amp scale

httpgitlabcomdhuttymodern-provisioning_code

IntroductionContext

Philosophy

ContextInfrastructure

Conguration [Management]

Orchestration

Provisioning

CICD

Pipelines

Philosophy

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

IntroductionContext

Philosophy

ContextInfrastructure

Conguration [Management]

Orchestration

Provisioning

CICD

Pipelines

Philosophy

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

ContextInfrastructure

Conguration [Management]

Orchestration

Provisioning

CICD

Pipelines

Philosophy

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Philosophy

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Everything As CodeUse Code for Everything

Test

Review

Lifecycle

Engineer All The Code

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Infrastructure As CodeTreating the tooling that provisions and manages your infrastructure with the same respect as other

code

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Engineering ServicesEngineering Engineering

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Benets of As CodeEasier to

Consistently regenerate

Test

Review

Grok

Audit

Iteratively improve

Reuse compose and hide complexity

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

TechVCS git+ github

Scheduler Jenkins

PaaS IaaS AWS

Provisioning making somewhere to deploy to Terraform

Testing Jenkinsles simple scripts Terratest

And with all that said letrsquos get on to making things happen showing some code

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Provisioning Exercises1 MVP

2 Terratest

3 Containerization

4 CICD

5 Refactoring

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Setup

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Clone the Repository$ git clone httpsgitlabcomdhuttymodern-provisioning_code

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Terraform installationHashicorp provides for Terraform

install the binary as terraform-ltversiongt

Install

installation instructions

ln -s ~binterraform-ltversiongt ~binterraform alias tf=terraform

jq

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

TerratestInstall terratest

for M in $(cat terratest_modulestxt) do go get githubcomgruntwork-ioterratestmodules$M done for P in $(cat go_packagestxt) do go get $P done

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

AWS

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Install CLI tooling$ virtualenv -p python3 --no-site-packages venv $ source venvbinactivate $ pip install awscli

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

AWS provider for TerraformTerraform ships a provider for AWS all you need is to congure

provider aws region = us-east-1 the only required argument version = ~gt 136

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

terraform init$ cd tf $ terraform init Initializing provider plugins Terraform has been successfully initialized You may now begin working with Terraform Try running terraform plan to see any changes that are required for your infrastructure All Terraform commands should now work If you ever set or change modules or backend configuration for Terraform rerun this command to reinitialize your working directory If you forget other commands will detect it and remind you to do so if necessary

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

AWS accountCreate a API key to interact with AWS itself

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Environment variables$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-east-1

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Conguration les~awsconfig

~awscredentials

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Proofaws --output table ec2 describe-regions ---------------------------------------------------------- | DescribeRegions | +--------------------------------------------------------+ || Regions || |+-----------------------------------+------------------+| || Endpoint | RegionName || |+-----------------------------------+------------------+| || ec2ap-south-1amazonawscom | ap-south-1 || || ec2eu-west-3amazonawscom | eu-west-3 || || ec2eu-west-2amazonawscom | eu-west-2 || || ec2eu-west-1amazonawscom | eu-west-1 || || ec2ap-northeast-2amazonawscom | ap-northeast-2 || || ec2ap-northeast-1amazonawscom | ap-northeast-1 || || ec2sa-east-1amazonawscom | sa-east-1 || || ec2 ca-central-1 amazonaws com | ca-central-1 ||

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

MVPan instance

a security group

a key_pair so it can be reached

lots of that can be ignored if you have a Default VPCnetworking-fu

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Provider Conguration

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Variables

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Outputs

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Proofsource localshexample tf plan ssh ec2-user$PUBLIC_IP echo $(hostname --fqdn)

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Provisioning

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Congure with user_dataPass a shell script and it will be run upon launch

Proof curl -v httpltpublic_ip_of_new_instancegt8080

EC2 Docs on user_data

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Conguring with Ansibleresource null_resource install-python provisioner remote-exec inline = [ sudo yum install -y python-virtualenv ] connection type = ssh private_key = $file(varssh_private_key_path) user = $varssh_user host = $aws_instancemvppublic_ip

provisioner local-exec command = ansible-playbook -vD -i ansiblehosts playbookyml

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Templated output for Ansible Inventory

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Proofcurl -v -F= ansible_host print $2 ansiblehosts)8080

curl -v -F= ansible_host print $2 ansiblehosts)8081

http$(awk

http$(awk

ansible -i ansiblehosts -m shell -a hostname --fqdn ampamp uptime all ansible-playbook -vD -i ansiblehosts playbookyml

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

TerratestGo testing write les _testgo run go test

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Containers

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Containerize pythonhttp

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Containerize Jenkins

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

CICD

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Refactoring

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Terraform ModulesModules are encapsulated Terraform conguration that are used to

better organize TF code

make TF code more easily resuable

httpswwwterraformiodocsmodulescreatehtmlstandard-module-structure

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Terraform State

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

The End

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Repositorieshttpgitlabcomdhuttymodern-provisioning_code

httpgitlabcomdhuttypythonhttp

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Extrashttpsregistryterraformio

httpsgithubcomsegmentioterraform-docs

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Further WorkPort to OCI Azure GCP

Add support for other infrastructure resource types including non-IaaS

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

ColophonThis repository contains both the class (presentation) and the demonstration code

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

The Presentationwritten in

uses and for slideshow functionality

needs to run a local server for speaker notes

asciidoc

asciidoctor revealjs

nodejsnpm

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

Software SetupInstall I used rvm and

Clone this repository From the root of this repo clone revealjs repository with

Point revealjs app at this presentation with

Install all the node-fu and start the webserver with

asciidoctor-revealjs $ rm -f Gemfilelock bundle config --local githubhttps true bundle --path=bundlegems --binstubs=bundlebin

git clone httpsgithubcomhakimelrevealjsgit

ln -sf indexhtml indexhtml

npm install ampamp npm start -- --port=5000

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf

UsageFrom the top repo generate the presentation with

Visit

Exporting Slides to PDF

$ bundle exec asciidoctor-revealjs -a revealjsdir= presentationindexadoc

httplocalhost5000

$ docker run --rm -v `pwd`homeuser astefanuttidecktape homeuserindexhtml homeuserslidespdf