Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---------------------------- Ec2-instance module --------------------------------------------------------
- -------------------- Userdata.sh -------------------
- #!/bin/bash
- echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
- echo "LANG=en_US.utf-8" >> /etc/environment
- echo "LC_ALL=en_US.utf-8" >> /etc/environment
- service sshd restart
- yum install docker -y
- systemctl restart docker.service
- systemctl enable docker.service
- usermod -aG docker ec2-user
- su - ec2-user
- docker network create wp-net
- docker volume create mysql-vol
- docker volume create wp-vol
- docker image pull mysql:8-debian
- docker image pull wordpress:latest
- docker container run \
- -d \
- --name mysql-server \
- --restart always \
- --network wp-net \
- -v mysql-vol:/var/lib/mysql/ \
- -e MYSQL_ROOT_PASSWORD="root@123" \
- -e MYSQL_DATABASE="wordpress" \
- -e MYSQL_USER="wpuser" \
- -e MYSQL_PASSWORD="wpuser@123" \
- mysql:8-debian
- docker container run \
- --name wordpress \
- --restart always \
- --network wp-net \
- -d \
- -v wp-vol:/var/www/html/ \
- -p 80:80 \
- -e WORDPRESS_DB_HOST="mysql-server" \
- -e WORDPRESS_DB_USER="wpuser" \
- -e WORDPRESS_DB_PASSWORD="wpuser@123" \
- -e WORDPRESS_DB_NAME="wordpress" \
- wordpress:latest
- -------------------------------------------- Module --------------------------------------------------------------
- provider "aws" {
- region = var.region
- default_tags {
- tags = {
- "Name" = "${var.project_name}-${var.project_env}"
- project_name = var.project_name
- project_env = var.project_env
- }
- }
- }
- resource "aws_security_group" "sg" {
- name_prefix = "${var.project_name}-${var.project_env}-"
- description = "Allow ssh"
- ingress {
- from_port = 22
- to_port = 22
- protocol = "tcp"
- cidr_blocks = ["0.0.0.0/0"]
- ipv6_cidr_blocks = ["::/0"]
- }
- egress {
- from_port = 0
- to_port = 0
- protocol = "-1"
- cidr_blocks = ["0.0.0.0/0"]
- ipv6_cidr_blocks = ["::/0"]
- }
- lifecycle {
- create_before_destroy = true
- }
- }
- resource "aws_security_group_rule" "attach" {
- for_each = toset(var.sg)
- type = "ingress"
- from_port = each.key
- to_port = each.key
- protocol = "tcp"
- cidr_blocks = ["0.0.0.0/0"]
- ipv6_cidr_blocks = ["::/0"]
- security_group_id = aws_security_group.sg.id
- }
- resource "aws_instance" "project" {
- ami = var.ami_id
- instance_type = var.instance_type
- key_name = var.key_name
- vpc_security_group_ids = [aws_security_group.sg.id]
- user_data = file("userdata.sh")
- depends_on = [aws_security_group_rule.attach]
- }
- --------------------------------- Calling from module -----------------------------------------------------
- module "ec2_instance" {
- source = "/home/ec2-user/project/ec2-instance"
- project_name = var.project_name
- project_env = var.project_env
- }
- data "aws_route53_zone" "fetch" {
- name = "chrisich.fun"
- }
- resource "aws_route53_record" "www" {
- zone_id = data.aws_route53_zone.fetch.id
- name = var.domain_name
- type = "A"
- ttl = 5
- records = [module.ec2_instance.public_ip]
- }
Advertisement
Add Comment
Please, Sign In to add comment