Reading material and code examples
As part of this workshop, you will be using HashiCorp Terraform and Amazon Web Services.
For instructions on how to install Terraform. please see our Learn Guide.
On that page, you will find instructions for macOS (using brew
), Windows (using choco
) as well as a manual installation path.
This section is a collection of links that will help you make the most of today's session.
- repository: hashicorp/hcl
- intermediate HCL: Configuration Languages in HCL2
- CLI commands terraform.io/docs/commands/index.html
- variables and type constraints: terraform.io/docs/configuration/variables.html
- variable definition files: terraform.io/docs/configuration/variables.html
- information about Terraform State: terraform.io/docs/state/index.html
We used the following Providers for this workshop:
tls
Provider: terraform.io/docs/providers/tlslocal
Provider: terraform.io/docs/providers/localhttp
Provider: terraform.io/docs/providers/httpaws
Provider: terraform.io/docs/providers/aws
We used the following AWS-specific Data Sources and Resources for this workshop:
- Data Source
aws_vpc
: terraform.io/docs/providers/aws/d/vpc.html - Resource
aws_security_group
: terraform.io/docs/providers/aws/r/security_group.html - Resource
aws_security_group_rule
: terraform.io/docs/providers/aws/r/security_group_rule.html - Resource
aws_key_pair
: terraform.io/docs/providers/aws/r/key_pair.html - Resource
aws_instance
: terraform.io/docs/providers/aws/r/instance.html - Resource
aws_ebs_volume
: terraform.io/docs/providers/aws/r/ebs_volume.html - Resource
aws_volume_attachment
: terraform.io/docs/providers/aws/r/volume_attachment.html - Resource
aws_s3_bucket
terraform.io/docs/providers/aws/r/s3_bucket.html
We used the following Data Sources and Resources for this workshop:
- Resource
tls_private_key
: terraform.io/docs/providers/tls/r/private_key.html - Resource
local_file
: terraform.io/docs/providers/local/r/file.html - Data Source
http
: terraform.io/docs/providers/http/data_source.html
After running terraform plan -out=aws.tfplan
and terraform apply aws.tfplan
, you will have two resources:
- an EC2 Instance (see AWS Console)
- an S3 Bucket with Website Hosting (see AWS Console)
For both of these, we have created Terraform Outputs that can be retrevied using the output Command:
# show all outputs
terraform output
# show SSH connection string for EC2 Instance
terraform output ssh_connection_string
# show Website Endpoint for S3 Bucket
terraform output website_url
- The SSH Connection String can be used to connect to your EC2 Instance. This uses the
ec2-ssh-key.pem
file. - The Website Endpoint can be used to view S3-Bucket hosted website files for static websites.=
- Learn Guide: Build infrastructure learn.hashicorp.com/terraform/getting-started/build
- Build your own AMIs with Packer: packer.io/docs/builders/amazon/
Before plan
and apply
, always clean up your code:
- use terraform fmt to rewrite Terraform configuration files to a canonical format and style.
- use terraform validate to validate the configuration syntax and internal consistency
- use pre-commit to run more checks
- community member @antonbabenko built and maintains pre-commit-terraform
- use modules as building blocks
- module documentation: terraform.io/docs/configuration/modules.html
- module registry: registry.terraform.io
- Learn Guide: Modules on learn.hashicorp.com/terraform/modules/modules-overview
This repository is maintained by Taylor Dolezal .
Licensed under the Apache License, Version 2.0 (the "License").
You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, without WARRANTIES or conditions of any kind, either express or implied.
See the License for the specific language governing permissions and limitations under the License.