SlideShare a Scribd company logo
5
Most read
10
Most read
15
Most read
Building infrastructure as
code using Terraform (Q&P)
DevOps Krakow meetup
17.1.2018
Agenda
1. Terraform basics
2. Frequent Terraform Questions
3. Frequent Terraform Problems
4. Your turn
Any questions?
I read all emails - anton@antonbabenko.com
Follow me on twitter and github -
@antonbabenko
Anton Babenko
I enjoy:
● DevOps, AWS, Terraform (since 2015)
● Open-source:
○ https://github.com/terraform-aws-modules
○ https://modules.tf (work in progress)
○ https://github.com/antonbabenko - more projects
● Organise events (AWS User Group Norway, HashiCorp User Group Oslo,
DevOpsDays Oslo)
● Solving problems
PS: I am looking for Terraform companions to join me!
Some facts about terraform-aws-modules
● Terraform AWS modules have 450K+ downloads per month (Dec 2017) from the
Terraform Registry
● Terraform AWS security group module was mostly written offline
Building infrastructure as code using Terraform - DevOps Krakow
Featuring...
Write, Plan, and Create Infrastructure as Code
Terraform 101 (main.tf)
provider "aws" { region = "eu-west-1" }
resource "random_pet" "bucket" {}
resource "aws_s3_bucket" "app" {
bucket = "hi-${random_pet .bucket. id}"
website {
index_document = "index.html"
}
}
data "template_file" "index" {
template = "${file("index.html")}"
vars {
BUCKET = "${aws_s3_bucket .app.website_endpoint }"
}
}
resource "aws_s3_bucket_object" "object" {
bucket = "${aws_s3_bucket .app.id}"
key = "index.html"
content = "${data. template_file .index.rendered }"
etag = "${md5(data. template_file .index.rendered )}"
content_type = "text/html"
acl = "public-read"
}
output "app_website_endpoint" {
value = "${aws_s3_bucket .app.website_endpoint }"
}
index.html can access:
${BUCKET}
$ terraform init
$ terraform plan
$ terraform apply
Apply complete! Resources: 3 added, 0
changed, 0 destroyed.
Outputs:
app_website_endpoint =
hi-feasible-basilisk.s3-website-eu-west-1.a
mazonaws.com
Terraform training material
https://www.slideshare.net/AntonBabenko/continuously-delivering-infrastructure-using-terrafo
rm-and-packer-training-material
Frequent Terraform Questions (FTQ)
So, how to get started with Terraform?
1. https://www.terraform.io/intro/getting-started/install.html
2. Get infrastructure modules from Terraform Registry. For example, AWS modules -
https://registry.terraform.io/modules/terraform-aws-modules
3. Follow instructions in README.md, check examples, open issues and pull requests
4. Read a book (Getting Started with Terraform or Terraform Up & Running)
Why Terraform and not AWS CloudFormation/Azure
ARM templates/Google Cloud Deployment
Manager?
Terraform manages 70+ providers, has easier syntax (HCL), has native support for modules
and remote states, has teamwork related features. Terraform is an open-source project (670
stars on AWS provider, 10K stars on Terraform core).
https://medium.com/@piotrgospodarek/cloudformation-vs-terraform-990318d6a7de
https://cloudonaut.io/cloudformation-vs-terraform/
https://www.slideshare.net/AntonBabenko/continuously-delivering-infrastructure-using-terrafo
rm-and-packer-training-material
What is the point of using Terraform if you’re running
AWS only? Isn’t Terraform just an unnecessary
abstraction, why not stick to CloudFormation?
● Terraform has easier syntax (HCL)
● Native support for modules and remote states
● Teamwork related features (eg, lock, plan to file)
● Abstractions (primitives and modules) are necessary for anything good
● Terraform Registry (check verified modules)
● Terraform is an open-source project!
What are the tools/solutions out there?
● Terraform Registry (https://registry.terraform.io/) - collection of public Terraform modules for
common infrastructure configurations for any provider. I maintain verified AWS modules there.
● Thin wrapper for Terraform that provides extra tools for working with multiple Terraform modules -
https://github.com/gruntwork-io/terragrunt
● Terraform linter to detect errors that can not be detected by `terraform plan` -
https://github.com/wata727/tflint
● Terraform version manager - https://github.com/kamatama41/tfenv
● A web dashboard to inspect Terraform States - https://github.com/camptocamp/terraboard
● Jsonnet - The data templating language - http://jsonnet.org
● A unified workflow for collaborating on Terraform through GitHub and GitLab - https://atlantis.run/
This list is much longer, really…
How to handle secrets in Terraform?
1. Can you accept secrets to be saved in state file in plaintext? Probably not.
a. AWS IAM password & access secret keys - use PGP as keybase.io
b. AWS RDS - set dummy password and change after DB is created
c. AWS RDS - use iam_database_authentication_enabled = true
d. EC2 instance user-data + AWS KMS
e. EC2 instance user-data + AWS System Manager’s Parameter Store
2. Other options:
a. Secure remote state location (S3 bucket policy, KMS key)
How to integrate Terraform with ...?
● Use outputs (human-friendly)
● Use null_resource + local-provisioner for WAF associations
resource "null_resource" "auto_instructions" {
triggers = {
waf_acl_id = "${aws_waf_web_acl .this.id}"
}
provisioner "local-exec" {
command = "aws waf-regional associate-web-acl --web-acl-id ${ aws_waf_web_acl .this.id}
--resource-arn ${data. terraform_remote_state .alb_public.this_alb_arn }"
}
}
Frequent Terraform Problems (FTP)
Upgraded Terraform version, and there is a breaking
bug, so I want to rollback, but I can’t because state
file has been upgraded already.
● State file should be versioned (!), download previous version of state file, run “terraform
state push old_version.tfstate”
● Lock terraform version, lock module and providers version (available in Terraform 0.11)
● Read upgrade guides and CHANGELOG.md files:
○ https://www.terraform.io/upgrade-guides/0-11.html
○ https://github.com/hashicorp/terraform/blob/master/CHANGELOG.md
○ https://github.com/terraform-providers/terraform-provider-aws/blob/master/CHANG
ELOG.md
What is your Terraform question or problem?
Hints: Testing? Versioning? Code structure? Working as a team? CI/CD?
Automation? Integration with other tools? modules.tf ? Code generation? Missing
tools/features? Syntax sugar (features and types of variables)? How to contribute?
Thanks!
Any questions?
anton@antonbabenko.com
twitter.com/antonbabenko
linkedin.com/in/antonbabenko

More Related Content

PPTX
Terraform on Azure
PPTX
Terraform
PDF
PPTX
Infrastructure-as-Code (IaC) using Terraform
PPTX
Terraform Basics
PDF
Terraform
PDF
Best Practices of Infrastructure as Code with Terraform
PPTX
Terraform
Terraform on Azure
Terraform
Infrastructure-as-Code (IaC) using Terraform
Terraform Basics
Terraform
Best Practices of Infrastructure as Code with Terraform
Terraform

What's hot (20)

PDF
Terraform Introduction
PDF
Terraform: An Overview & Introduction
PDF
Terraform -- Infrastructure as Code
PPTX
Terraform modules restructured
PDF
Terraform introduction
PPTX
Introduction To Terraform
PPTX
Comprehensive Terraform Training
PPTX
Terraform on Azure
PDF
Introduce to Terraform
PDF
Terraform
PPTX
Terraform
PPTX
Terraform training 🎒 - Basic
PDF
Terraform in deployment pipeline
PPTX
Effective terraform
PDF
Introduction to IAC and Terraform
PDF
Advanced Terraform
PPTX
PPTX
Infrastructure-as-Code (IaC) Using Terraform (Advanced Edition)
PDF
Terraform modules and best-practices - September 2018
PPTX
Final terraform
Terraform Introduction
Terraform: An Overview & Introduction
Terraform -- Infrastructure as Code
Terraform modules restructured
Terraform introduction
Introduction To Terraform
Comprehensive Terraform Training
Terraform on Azure
Introduce to Terraform
Terraform
Terraform
Terraform training 🎒 - Basic
Terraform in deployment pipeline
Effective terraform
Introduction to IAC and Terraform
Advanced Terraform
Infrastructure-as-Code (IaC) Using Terraform (Advanced Edition)
Terraform modules and best-practices - September 2018
Final terraform
Ad

Similar to Building infrastructure as code using Terraform - DevOps Krakow (20)

PDF
Terraform Q&A - HashiCorp User Group Oslo
PDF
Terraform modules and some of best-practices - March 2019
PDF
Terraform modules and (some of) best practices
PDF
Terraform modules and (some of) best practices
PPTX
Terraform Abstractions for Safety and Power
PPTX
Reusable, composable, battle-tested Terraform modules
PDF
Manage any AWS resources with Terraform 0.12 - April 2020
PPTX
Infrastructure as code, using Terraform
PDF
DevOps in Droplr
PDF
Terraform - Taming Modern Clouds
PPTX
Deploying Azure DevOps using Terraform
PPTX
[AWSKRUG 아키텍처 모임] 세일즈부스트 인프라스트럭처 사례 공유
PDF
AWS DevOps - Terraform, Docker, HashiCorp Vault
PPTX
Terraform in production - experiences, best practices and deep dive- Piotr Ki...
PPTX
Terraform for azure: the good, the bad and the ugly -
PDF
Oracle Cloud - Infrastruktura jako kód
PDF
Terraform 0.12 + Terragrunt
PDF
Case Study: Using Terraform and Packer to deploy go applications to AWS
PDF
Collaborative Terraform with Atlantis
PDF
Terraform vs Pulumi
Terraform Q&A - HashiCorp User Group Oslo
Terraform modules and some of best-practices - March 2019
Terraform modules and (some of) best practices
Terraform modules and (some of) best practices
Terraform Abstractions for Safety and Power
Reusable, composable, battle-tested Terraform modules
Manage any AWS resources with Terraform 0.12 - April 2020
Infrastructure as code, using Terraform
DevOps in Droplr
Terraform - Taming Modern Clouds
Deploying Azure DevOps using Terraform
[AWSKRUG 아키텍처 모임] 세일즈부스트 인프라스트럭처 사례 공유
AWS DevOps - Terraform, Docker, HashiCorp Vault
Terraform in production - experiences, best practices and deep dive- Piotr Ki...
Terraform for azure: the good, the bad and the ugly -
Oracle Cloud - Infrastruktura jako kód
Terraform 0.12 + Terragrunt
Case Study: Using Terraform and Packer to deploy go applications to AWS
Collaborative Terraform with Atlantis
Terraform vs Pulumi
Ad

More from Anton Babenko (18)

PDF
Terraform Best Practices - DevOps Unicorns 2019
PDF
Terraform AWS modules and some best practices - September 2019
PDF
What you see is what you get for AWS infrastructure
PDF
Terraform AWS modules and some best-practices - May 2019
PDF
What you see is what you get for AWS infrastructure
PDF
Gotchas using Terraform in a secure delivery pipeline
PDF
Описание инфраструктуры с Terraform на будущее
PDF
Preview of Terraform 0.12 + modules.tf - Kiev HUG meetup
PDF
"I’ve heard you know infrastructure"
PPTX
"Continuously delivering infrastructure using Terraform and Packer" training ...
PDF
Continuous delivery in AWS
PDF
Tools exist for a reason
PPTX
AWS CodeDeploy - basic intro
PPTX
Managing AWS infrastructure using CloudFormation
PPTX
Designing for elasticity on AWS - 9.11.2015
PPTX
Recap of AWS re:invent 2015
PPTX
Designing for elasticity on AWS
PDF
Build & deploy PHP application (intro level)
Terraform Best Practices - DevOps Unicorns 2019
Terraform AWS modules and some best practices - September 2019
What you see is what you get for AWS infrastructure
Terraform AWS modules and some best-practices - May 2019
What you see is what you get for AWS infrastructure
Gotchas using Terraform in a secure delivery pipeline
Описание инфраструктуры с Terraform на будущее
Preview of Terraform 0.12 + modules.tf - Kiev HUG meetup
"I’ve heard you know infrastructure"
"Continuously delivering infrastructure using Terraform and Packer" training ...
Continuous delivery in AWS
Tools exist for a reason
AWS CodeDeploy - basic intro
Managing AWS infrastructure using CloudFormation
Designing for elasticity on AWS - 9.11.2015
Recap of AWS re:invent 2015
Designing for elasticity on AWS
Build & deploy PHP application (intro level)

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Approach and Philosophy of On baking technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
KodekX | Application Modernization Development
PPTX
Cloud computing and distributed systems.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Machine learning based COVID-19 study performance prediction
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
cuic standard and advanced reporting.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPT
Teaching material agriculture food technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
sap open course for s4hana steps from ECC to s4
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Approach and Philosophy of On baking technology
MIND Revenue Release Quarter 2 2025 Press Release
KodekX | Application Modernization Development
Cloud computing and distributed systems.
NewMind AI Weekly Chronicles - August'25 Week I
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Machine learning based COVID-19 study performance prediction
The AUB Centre for AI in Media Proposal.docx
cuic standard and advanced reporting.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Electronic commerce courselecture one. Pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Building Integrated photovoltaic BIPV_UPV.pdf
Teaching material agriculture food technology
Encapsulation_ Review paper, used for researhc scholars
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
sap open course for s4hana steps from ECC to s4

Building infrastructure as code using Terraform - DevOps Krakow

  • 1. Building infrastructure as code using Terraform (Q&P) DevOps Krakow meetup 17.1.2018
  • 2. Agenda 1. Terraform basics 2. Frequent Terraform Questions 3. Frequent Terraform Problems 4. Your turn Any questions? I read all emails - [email protected] Follow me on twitter and github - @antonbabenko
  • 3. Anton Babenko I enjoy: ● DevOps, AWS, Terraform (since 2015) ● Open-source: ○ https://github.com/terraform-aws-modules ○ https://modules.tf (work in progress) ○ https://github.com/antonbabenko - more projects ● Organise events (AWS User Group Norway, HashiCorp User Group Oslo, DevOpsDays Oslo) ● Solving problems PS: I am looking for Terraform companions to join me!
  • 4. Some facts about terraform-aws-modules ● Terraform AWS modules have 450K+ downloads per month (Dec 2017) from the Terraform Registry ● Terraform AWS security group module was mostly written offline
  • 6. Featuring... Write, Plan, and Create Infrastructure as Code
  • 7. Terraform 101 (main.tf) provider "aws" { region = "eu-west-1" } resource "random_pet" "bucket" {} resource "aws_s3_bucket" "app" { bucket = "hi-${random_pet .bucket. id}" website { index_document = "index.html" } } data "template_file" "index" { template = "${file("index.html")}" vars { BUCKET = "${aws_s3_bucket .app.website_endpoint }" } } resource "aws_s3_bucket_object" "object" { bucket = "${aws_s3_bucket .app.id}" key = "index.html" content = "${data. template_file .index.rendered }" etag = "${md5(data. template_file .index.rendered )}" content_type = "text/html" acl = "public-read" } output "app_website_endpoint" { value = "${aws_s3_bucket .app.website_endpoint }" } index.html can access: ${BUCKET} $ terraform init $ terraform plan $ terraform apply Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: app_website_endpoint = hi-feasible-basilisk.s3-website-eu-west-1.a mazonaws.com
  • 10. So, how to get started with Terraform? 1. https://www.terraform.io/intro/getting-started/install.html 2. Get infrastructure modules from Terraform Registry. For example, AWS modules - https://registry.terraform.io/modules/terraform-aws-modules 3. Follow instructions in README.md, check examples, open issues and pull requests 4. Read a book (Getting Started with Terraform or Terraform Up & Running)
  • 11. Why Terraform and not AWS CloudFormation/Azure ARM templates/Google Cloud Deployment Manager? Terraform manages 70+ providers, has easier syntax (HCL), has native support for modules and remote states, has teamwork related features. Terraform is an open-source project (670 stars on AWS provider, 10K stars on Terraform core). https://medium.com/@piotrgospodarek/cloudformation-vs-terraform-990318d6a7de https://cloudonaut.io/cloudformation-vs-terraform/ https://www.slideshare.net/AntonBabenko/continuously-delivering-infrastructure-using-terrafo rm-and-packer-training-material
  • 12. What is the point of using Terraform if you’re running AWS only? Isn’t Terraform just an unnecessary abstraction, why not stick to CloudFormation? ● Terraform has easier syntax (HCL) ● Native support for modules and remote states ● Teamwork related features (eg, lock, plan to file) ● Abstractions (primitives and modules) are necessary for anything good ● Terraform Registry (check verified modules) ● Terraform is an open-source project!
  • 13. What are the tools/solutions out there? ● Terraform Registry (https://registry.terraform.io/) - collection of public Terraform modules for common infrastructure configurations for any provider. I maintain verified AWS modules there. ● Thin wrapper for Terraform that provides extra tools for working with multiple Terraform modules - https://github.com/gruntwork-io/terragrunt ● Terraform linter to detect errors that can not be detected by `terraform plan` - https://github.com/wata727/tflint ● Terraform version manager - https://github.com/kamatama41/tfenv ● A web dashboard to inspect Terraform States - https://github.com/camptocamp/terraboard ● Jsonnet - The data templating language - http://jsonnet.org ● A unified workflow for collaborating on Terraform through GitHub and GitLab - https://atlantis.run/ This list is much longer, really…
  • 14. How to handle secrets in Terraform? 1. Can you accept secrets to be saved in state file in plaintext? Probably not. a. AWS IAM password & access secret keys - use PGP as keybase.io b. AWS RDS - set dummy password and change after DB is created c. AWS RDS - use iam_database_authentication_enabled = true d. EC2 instance user-data + AWS KMS e. EC2 instance user-data + AWS System Manager’s Parameter Store 2. Other options: a. Secure remote state location (S3 bucket policy, KMS key)
  • 15. How to integrate Terraform with ...? ● Use outputs (human-friendly) ● Use null_resource + local-provisioner for WAF associations resource "null_resource" "auto_instructions" { triggers = { waf_acl_id = "${aws_waf_web_acl .this.id}" } provisioner "local-exec" { command = "aws waf-regional associate-web-acl --web-acl-id ${ aws_waf_web_acl .this.id} --resource-arn ${data. terraform_remote_state .alb_public.this_alb_arn }" } }
  • 17. Upgraded Terraform version, and there is a breaking bug, so I want to rollback, but I can’t because state file has been upgraded already. ● State file should be versioned (!), download previous version of state file, run “terraform state push old_version.tfstate” ● Lock terraform version, lock module and providers version (available in Terraform 0.11) ● Read upgrade guides and CHANGELOG.md files: ○ https://www.terraform.io/upgrade-guides/0-11.html ○ https://github.com/hashicorp/terraform/blob/master/CHANGELOG.md ○ https://github.com/terraform-providers/terraform-provider-aws/blob/master/CHANG ELOG.md
  • 18. What is your Terraform question or problem? Hints: Testing? Versioning? Code structure? Working as a team? CI/CD? Automation? Integration with other tools? modules.tf ? Code generation? Missing tools/features? Syntax sugar (features and types of variables)? How to contribute?