{"id":19748714,"url":"https://github.com/doitintl/tf-fundamentals-workshop-101","last_synced_at":"2026-03-19T11:28:18.585Z","repository":{"id":86290516,"uuid":"438211405","full_name":"doitintl/tf-fundamentals-workshop-101","owner":"doitintl","description":"Basic workshop on the topic of Terraform in the context of AWS","archived":false,"fork":false,"pushed_at":"2024-03-07T23:41:11.000Z","size":141,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-01T08:23:15.685Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doitintl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-14T10:32:52.000Z","updated_at":"2024-02-28T02:51:56.000Z","dependencies_parsed_at":"2025-09-01T14:43:18.347Z","dependency_job_id":"d4d0dac4-e0e9-4ed3-9155-369041ca2239","html_url":"https://github.com/doitintl/tf-fundamentals-workshop-101","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/doitintl/tf-fundamentals-workshop-101","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Ftf-fundamentals-workshop-101","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Ftf-fundamentals-workshop-101/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Ftf-fundamentals-workshop-101/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Ftf-fundamentals-workshop-101/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doitintl","download_url":"https://codeload.github.com/doitintl/tf-fundamentals-workshop-101/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Ftf-fundamentals-workshop-101/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29694094,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T18:18:25.093Z","status":"ssl_error","status_checked_at":"2026-02-21T18:18:22.435Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T02:23:09.989Z","updated_at":"2026-02-21T21:04:10.685Z","avatar_url":"https://github.com/doitintl.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform Fundamentals 101\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Lab-Version](https://img.shields.io/badge/Labs%20core%20version-1.0.1-0098B7.svg)](#)\n[![Terraform/Core Version](https://img.shields.io/badge/TF%20version-1.0.11-844fba.svg)](#)\n[![AWS CLI/SDK Version](https://img.shields.io/badge/awscli%20version-2.0.27-ff9900.svg)](#)\n\n\n## Introduction\n\nIn this full-day workshop we will look at some core mechanisms of Terraform. This beginner course will mainly deal with AWS resources in the context of VPC/Networking, Scalable EC2 Instances and relational databases. The present topics are not yet fully formulated - therefore, changes within the respective labs may occur or new labs may be added in the future. The labs assume functional access to an AWS account and a consistent toolset in the local development environment). The introduction to each topic will take about 5-10 minutes, the exercises about 30-45 minutes each.\n\n## Repository Structure\n\n``` \n[root]\n  |\n  └ 01-aws-vpc-and-networking-v1   | 1st terraform lab, handling vpc/sn/ssm/sg resources with local state\n  └ 02-aws-compute-bastion-host-v1 | 2nd terraform lab, handling ec2 compute resources with local state\n  └ 03-aws-compute-backend-host-v1 | 3rd terraform lab, handling scalable ec2 compute resources with local state\n  └ 04-aws-rds-mysql57-single-zone | 4th terraform lab, handling rds/mysql resources with local state (single-zone)\n  └ 05-aws-rds-pgsql11-multi-zone  | 5th terraform lab, handling rds/pgsql resources with local state (multi-zone)\n  |--------------------------------|-----------------------------------------------------------------------------------\n  └ logs                           | target for upcoming logs (mostly terratest/api-call result related) \n  |--------------------------------|-----------------------------------------------------------------------------------\n  └ scripts                        | target for upcoming helper scripts for all of our labs + tf init \n  |--------------------------------|-----------------------------------------------------------------------------------\n```\n\n## Available Labs\n\n| Lab/Folder                                        | Description                                                                         |\n| ------------------------------------------------- | ----------------------------------------------------------------------------------- |\n| [tf-aws-lab-01](./01-aws-vpc-and-security-groups)   | simple aws vpc/networking example using native terraform hcl                        |\n| [tf-aws-lab-02](./02-aws-compute-ha-bastion-host) | advanced ec2 compute bastion-host example using ubuntu ec2 with user data           |\n| [tf-aws-lab-03](./03-aws-compute-ha-backend-host) | auto scaling group example for centos ec2 backend host(s) with additional user data |\n| [tf-aws-lab-04](./04-aws-rds-mysql57-single-zone)   | single zone aws rds example using mysql                                             |\n| [tf-aws-lab-05](./05-aws-rds-pgsql11-multi-zone) | multi-zone aws rds example using postgresql                                         |\n\n\n## Available Terraform Workspaces\n\n| Workspace | Description       | CIDR            | region       |\n| --------- | ----------------- | --------------- | ------------ |\n| `prod`    | primary workspace | `10.96.0.0/20`  | eu-central-1 |\n| `stage`   | staging workspace | `10.96.16.0/20` | eu-central-1 |\n| `test`    | testing workspace | `10.96.32.0/20` | us-east-1    |\n\n\n## Core Requirements\n\nFor the use of the local terminal environment for all terraform relevant CLI/API calls a certain tool set is required and Linux or macOS as operating system is recommended. If it is not possible to install our stack due to limitations in terms of feasibility/availability in the preparation, you can alternatively use the browser-internal [cloud shell](https://aws.amazon.com/cloudshell/) of your aws management console. You can find a good (free) cloud-guru web-tutorial using cloud-shell [here](https://acloudguru.com/videos/acg-fundamentals/how-to-use-aws-cloudshell?utm_campaign=11244863417\u0026utm_source=google\u0026utm_medium=cpc\u0026utm_content=469352928666\u0026utm_term=_\u0026adgroupid=115625160932\u0026gclid=Cj0KCQiAnuGNBhCPARIsACbnLzpVzQFqkkt2qx9rggGk0YW6VSZL0v56J6JYIyKcLoNONCM_1WPF5DQaAhBiEALw_wcB).\n\n### Required Tools/Packages\n\n- `aws sdk` [installation](https://aws.amazon.com/cli/) tutorial\n- `terraform` [installation](https://www.terraform.io/downloads.html) tutorial\n\n### Optional Tools/Packages\n\n- `vscode` [installation](https://code.visualstudio.com/download) tutorial\n- `tfswitch` [installation](https://tfswitch.warrensbox.com/Install/) tutorial\n- `curl` [installation](https://curl.se/download.html) tutorial\n\n\n## Terraform Terminal Preparation\n\nThe preparation of your local shell/terminal environment is one of the first steps to handle all of our labs and is the basis for all our further activity using the local development environment of all participants. We will pave the way to our first terraform aws resource deployment step by step in the following section and learning some basics of using terraform providers, configs, outputs and state.\n\n1. **Clone Repository**\n\n   Please make sure that work with the latest main-branch version of our labs-repository. If there are changes to the kernel repository during the workshop, you can save the current local change state with `git stash` and get the new state with `git pull`.\n\n   ```bash\n   $ # sudo mkdir -p /opt/workshop ; cd /opt/workshop\n   $ git clone https://github.com/doitintl/tf-fundamentals-workshop-101.git \n   $ cd tf-fundamentals-workshop-101 ;\n   ```\n\n2. **AWS Credential Configuration**\n\n   Please make sure that there is an appropriate aws profile in your aws-cli/sdk configuration, which must be stored in the respective `\u003clab-path\u003e/env/\u003cworkspace\u003e.tfvars.json`. Below you can find an _example_ for an aws-profile named `terraform`.\n\n   ```ini\n   $ # $HOME/.aws/config\n   [terraform]\n   region = eu-central-1\n   output = json\n   ```\n\n   ```ini\n   $ # $HOME/.aws/credentials\n   [terraform]\n   aws_access_key_id = AKIA0000000000000000\n   aws_secret_access_key = 0000000000000000000000000000000000000000\n   ```\n\n3. **Terraform Installation**\n\n   Make sure you have installed the terraform-setup tool [tfswitch](https://tfswitch.warrensbox.com/Install/) and select the version supported by our labs `1.0.11`. You can of course also install Terraform manually, just follow the [official](https://learn.hashicorp.com/tutorials/terraform/install-cli) instructions of the vendor.\n\n   ```bash\n   $ curl -L https://raw.githubusercontent.com/warrensbox/terraform-switcher/release/install.sh | sudo bash \n   $ tfswitch\n   ```\n\n4. **INIT/RUN** Lab\n\n   _Go to the corresponding labs sub-directory and follow the corresponding instructions in the documentation stored there!s_\n\n\n## Terraform Debugging\n\nTerraform has detailed logs which can be enabled by setting the `TF_LOG` environment variable to any value. This will cause detailed logs to appear on stderr. You can set `TF_LOG` to one of the log levels `TRACE`, `DEBUG`, `INFO`, `WARN` or `ERROR` to change the verbosity of terraform logs.\n\n\n## Links\n\n- https://www.terraform.io/docs/language/functions/index.html\n- https://www.terraform.io/docs/language/expressions/index.html\n- https://www.terraform.io/docs/language/settings/backends/index.html\n- https://gruntwork.io/infrastructure-as-code-library/\n- https://github.com/gruntwork-io/cloud-nuke\n- https://github.com/cloudposse\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nSee [LICENSE](LICENSE) for full details.\n\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the NOTICE file\n    distributed with this work for additional information\n    regarding copyright ownership.  The ASF licenses this file\n    to you under the Apache License, Version 2.0 (the\n    \"License\"); you may not use this file except in compliance\n    with the License.  You may obtain a copy of the License at\n\n      https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing,\n    software distributed under the License is distributed on an\n    \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n    KIND, either express or implied.  See the License for the\n    specific language governing permissions and limitations\n    under the License.\n\n## Copyright\n\nCopyright © 2021 DoiT International","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoitintl%2Ftf-fundamentals-workshop-101","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoitintl%2Ftf-fundamentals-workshop-101","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoitintl%2Ftf-fundamentals-workshop-101/lists"}