tonystrawberry / life.tonystrawberry.codes

๐Ÿ“š Life blog hosted in AWS (EC2) and managed with Terraform

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

life.tonystrawberry.codes

๐Ÿ“š Wordpress hosted on AWS EC2 & managed via IaC

  • ๐Ÿ›  Built with Terraform
  • ๐Ÿ“š Project for consolidating my knowledge in Terraform after getting the Hashicorp Certified: Terraform Associate certification [2023 August]
  • ๐Ÿ“„ Uses terraform-docs for automated documentation generation
  • ๐Ÿ‘ฎโ€โ™‚๏ธ Uses terraform fmt -check -recursive in Github Actions for checking format errors
  • ๐Ÿ”– All AWS resources are tagged with the following attributes for better management
      Project   = var.project
      ManagedBy = "Terraform"
    

โšœ๏ธ Architecture

๐Ÿƒ๐Ÿป Usage

  1. Authenticate on AWS with Terraform using one of the supported authentication methods.
  2. Create a terraform.tfvars file at the root of the project that define the following variables.
project = "life-tonystrawberry-codes"
region  = "ap-northeast-1"
domain  = "tonystrawberry.codes"
  1. Run terraform init to initialize the project (download the providers).
  2. Run terraform plan to check and validate the infrastucture changes.
  3. Run terraform apply for provisioning the resources.
  4. Login into AWS. Connect to your provisioned EC2 using Session Manager. Follow the steps below.
# Edit the following lines in the wp-config.php file
# using `sudo nano wordpress/wp-config.php`
#   define('DB_NAME', 'wordpress-db');
#   define('DB_USER', 'wordpress-user');
#   define('DB_PASSWORD', 'wordpress');
#
# In the same file, find the section called `Authentication Unique Keys and Salts`
# Replace the values in that section with the output from the following command
# curl -s https://api.wordpress.org/secret-key/1.1/salt/
#   define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
#   define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
#   define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
#   define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
#   define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
#   define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
#   define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
#   define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');


# Allow Wordpress to use permalinks
# using `sudo vim /etc/httpd/conf/httpd.conf` and modify the AllowOverride directive
#   <Directory "/var/www/html">
#       AllowOverride All
#   </Directory>

  1. As an output, you will get an IP address which allows you to access the website using HTTP (HTTPs is not supported).
  2. After testing, run terraform destroy to destroy all provisioned resources using Terraform.

Requirements

Name Version
terraform 1.5.5
aws 5.13.1

Providers

Name Version
aws 5.13.1

Modules

Name Source Version
dns ./modules/dns n/a
ec2 ./modules/ec2 n/a
identity ./modules/identity n/a
network ./modules/network n/a

Resources

Name Type
aws_region.tf-docs-provider-workaround data source

Inputs

Name Description Type Default Required
domain The domain to use for the DNS zone string "tonystrawberry.codes" no
project The name of the project string "life-tonystrawberry-codes" no
region The AWS region to launch in string "ap-northeast-1" no

Outputs

Name Description
wordpress_public_ip The public IP address of the EC2 instance

About

๐Ÿ“š Life blog hosted in AWS (EC2) and managed with Terraform


Languages

Language:HCL 71.1%Language:Shell 28.9%