diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58a3064 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.terraform/ +code.desktop +terraform/info.txt +*.tfstate* diff --git a/scripts/push.sh b/scripts/push.sh index 1a04a89..a24fce2 100644 --- a/scripts/push.sh +++ b/scripts/push.sh @@ -6,6 +6,6 @@ eval $(aws ecr get-login --no-include-email --profile default --region ap-southe docker build -t wpimage:$SHA . -docker tag wpimage:$SHA 672269152614.dkr.ecr.ap-southeast-2.amazonaws.com/wp-image:$SHA +docker tag wpimage:$SHA 595875296375.dkr.ecr.ap-southeast-2.amazonaws.com/wp-image:$SHA -docker push 672269152614.dkr.ecr.ap-southeast-2.amazonaws.com/wp-image:$SHA +docker push 595875296375.dkr.ecr.ap-southeast-2.amazonaws.com/wp-image:$SHA diff --git a/terraform/ecs.tf b/terraform/ecs.tf index 0f8f089..fff46d6 100644 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -1,3 +1,13 @@ +# Key-Name +data "template_file" "ecs_public_key" { + template = "${file("~/.ssh/id_rsa.pub")}" +} + +resource "aws_key_pair" "ecs_key_pair" { + key_name = "ecs-key" + public_key = "${data.template_file.ecs_public_key.rendered}" +} + # ECS resource "aws_ecs_cluster" "ecs-da-wordpress" { name = "${var.project_name}-ecs" @@ -5,37 +15,49 @@ resource "aws_ecs_cluster" "ecs-da-wordpress" { # LC resource "aws_launch_configuration" "instance-ecs-da" { - name = "${var.project_name}-lc" - security_groups = ["${aws_security_group.ecs.id}"] - - image_id = "${var.image_id}" - instance_type = "${var.instance_type}" - iam_instance_profile = "${aws_iam_instance_profile.ecs-instance-role.id}" - user_data = <> /etc/ecs/ecs.config - EFS_DIR=/mnt/efs - EFS_ID=${aws_efs_file_system.da-wordpress-efs.id} - mkdir -p $${EFS_DIR} - echo "$${EFS_ID}:/ $${EFS_DIR} efs tls,_netdev" >> /etc/fstab - for i in $(seq 1 20); do mount -a -t efs defaults && break || sleep 60; done - EOF + name_prefix = "${var.project_name}-lc" + image_id = "${var.image_id}" + instance_type = "${var.instance_type}" associate_public_ip_address = true + security_groups = ["${aws_security_group.ecs.id}"] + key_name = "sydney-key-pair" + + iam_instance_profile = "${aws_iam_instance_profile.ecs-instance-role.arn}" + user_data = <> /etc/ecs/ecs.config + mkdir -p /mnt/efs + mount -t efs ${aws_efs_file_system.da-wordpress-efs.id}:/ /mnt/efs + EOF + lifecycle { create_before_destroy = true } } +/* + #!/bin/bash + cloud-init-per once install_amazon-efs-utils yum install -y amazon-efs-utils + cloud-init-per once mkdir_efs mkdir /efs + EFS_DIR=/mnt/efs + EFS_ID=${aws_efs_file_system.da-wordpress-efs.id} + + cloud-init-per once mount_efs echo -e "$${EFS_ID}:/ $${EFS_DIR} efs tls,_netdev" >> /etc/fstab + echo ECS_CLUSTER=${aws_ecs_cluster.ecs-da-wordpress.name} >> /etc/ecs/ecs.config +*/ + + # ASG resource "aws_autoscaling_group" "cluster-asg-da" { - name = "${var.project_name}-asg" - vpc_zone_identifier = ["${aws_subnet.private-wp-a.id}", "${aws_subnet.private-wp-b.id}"] - min_size = 1 - max_size = 4 - desired_capacity = 2 - launch_configuration = "${aws_launch_configuration.instance-ecs-da.name}" + name = "${var.project_name}-asg" + vpc_zone_identifier = ["${aws_subnet.public-wp-a.id}", "${aws_subnet.public-wp-b.id}"] + min_size = 2 + max_size = 4 + desired_capacity = 2 + launch_configuration = "${aws_launch_configuration.instance-ecs-da.name}" + health_check_type = "EC2" health_check_grace_period = 0 default_cooldown = 300 termination_policies = ["OldestInstance"] @@ -47,7 +69,7 @@ resource "aws_autoscaling_group" "cluster-asg-da" { } # ASP -/*resource "aws_autoscaling_policy" "cluster-asg-da-policy" { +resource "aws_autoscaling_policy" "cluster-asg-da-policy" { name = "${var.project_name}-asg-policy" policy_type = "TargetTrackingScaling" estimated_instance_warmup = "90" @@ -56,43 +78,43 @@ resource "aws_autoscaling_group" "cluster-asg-da" { target_tracking_configuration { predefined_metric_specification { - predefined_metric_type = "ASGAverageCPUUtilization" + predefined_metric_type = "ASGAverageCPUUtilization" } target_value = 40 } -}*/ - +} +/* # TD resource "aws_ecs_task_definition" "da-ecs-task" { family = var.project_name - execution_role_arn = aws_iam_role.ecs-instance-role.arn + execution_role_arn = aws_iam_role.ecs-instance-role.arn container_definitions = file("tasks/wp_task_definition.json") volume { name = "service-storage-wp" #host_path = "/mnt/efs/wordpress" - + efs_volume_configuration { file_system_id = aws_efs_file_system.fs.id root_directory = "/mnt/efs/wordpress" } - } + } } # SV resource "aws_ecs_service" "da-ecs-service" { - name = "${var.project_name}-sv" - cluster = aws_ecs_cluster.ecs-da-wordpress.id + name = "${var.project_name}-sv" + cluster = aws_ecs_cluster.ecs-da-wordpress.id task_definition = aws_ecs_task_definition.da-ecs-task.family - desired_count = 2 + desired_count = 2 load_balancer { - target_group_arn = "${aws_alb_target_group.target-group-alb.arn}" - container_name = "da-wp-task" - container_port = 80 + target_group_arn = "${aws_alb_target_group.target-group-alb.arn}" + container_name = "da-wp-task" + container_port = 80 } } - +*/ /*<> /etc/ecs/ecs.config @@ -101,4 +123,5 @@ resource "aws_ecs_service" "da-ecs-service" { echo mkdir -p $${EFS_DIR} echo "$${EFS_ID}:/ $${EFS_DIR} efs tls,_netdev" >> /etc/fstab for i in $(seq 1 20); do mount -a -t efs defaults && break || sleep 60; done - EOF*/ \ No newline at end of file + EOF*/ + diff --git a/terraform/iam.tf b/terraform/iam.tf index fda9acf..a053ee8 100644 --- a/terraform/iam.tf +++ b/terraform/iam.tf @@ -22,7 +22,55 @@ resource "aws_iam_instance_profile" "ecs-instance-role" { role = "${aws_iam_role.ecs-instance-role.name}" } -resource "aws_iam_role_policy_attachment" "ecs-service-attach" { +resource "aws_iam_role_policy_attachment" "ecs-service-attach-a" { role = "${aws_iam_role.ecs-instance-role.name}" policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role" } + +resource "aws_iam_role_policy_attachment" "ecs-service-attach-b" { + role = "${aws_iam_role.ecs-instance-role.name}" + policy_arn = "arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess" +} +resource "aws_iam_role_policy_attachment" "ecs-service-attach-c" { + role = "${aws_iam_role.ecs-instance-role.name}" + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy" +} + + + + +resource "aws_iam_role" "ecs-role" { + name = "${var.project_name}-ecs" + assume_role_policy = <