From 2c0bd7b0b7afbc9f02e9c97f56aec7ab05b63840 Mon Sep 17 00:00:00 2001 From: Titan Date: Thu, 23 Mar 2017 23:20:55 +0800 Subject: [PATCH 01/19] update ansible to 2.2.1.0 --- Dockerfile | 13 +++++++++++++ packer/ansible/roles/wordpress/tasks/main.yml | 1 + packer/wp-packer.json | 9 ++++----- terraform/task-definitions/wordpress.json | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..259d107 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM alpine:3.3 +MAINTAINER "Titan Lien" + +ENV ANSIBLE_VERSION=2.2.1.0 + +RUN set -ex && \ + buildDeps="python-dev build-base libffi-dev openssl-dev" && \ + apk add --no-cache $buildDeps python py-pip ca-certificates bash tar && \ + pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir ansible==${ANSIBLE_VERSION} && \ + apk del --purge $buildDeps + +CMD ["ansible"] diff --git a/packer/ansible/roles/wordpress/tasks/main.yml b/packer/ansible/roles/wordpress/tasks/main.yml index 8bb8540..e75668b 100644 --- a/packer/ansible/roles/wordpress/tasks/main.yml +++ b/packer/ansible/roles/wordpress/tasks/main.yml @@ -10,6 +10,7 @@ unarchive: src=/wordpress.tar.gz dest=/usr/share/nginx/html + remote_src=yes - name: Wordpress | Set permissions file: diff --git a/packer/wp-packer.json b/packer/wp-packer.json index f46a78a..3d78374 100644 --- a/packer/wp-packer.json +++ b/packer/wp-packer.json @@ -2,7 +2,7 @@ "builders": [ { "type": "docker", - "image": "jfusterm/ansible", + "image": "titanlien/ansible", "commit": true } ], @@ -17,15 +17,14 @@ [ { "type": "docker-tag", - "repository": "jfusterm/wp-packer", + "repository": "titanlien/wp-packer", "tag": "4.5" }, { "type": "docker-push", "login": "true", - "login_username": "jfusterm", - "login_password": "", - "login_email": "joan.fuster@gmail.com" + "login_username": "titanlien", + "login_password": "" } ] ] diff --git a/terraform/task-definitions/wordpress.json b/terraform/task-definitions/wordpress.json index 37976cf..7e01b69 100755 --- a/terraform/task-definitions/wordpress.json +++ b/terraform/task-definitions/wordpress.json @@ -1,7 +1,7 @@ [ { "name": "wordpress", - "image": "jfusterm/wp-packer:4.5", + "image": "titanlien/wp-packer:4.5", "cpu": 10, "memory": 300, "essential": true, From 864cb2a804d7e6ad1bdbefd739d155a3fd10a689 Mon Sep 17 00:00:00 2001 From: Titan Date: Thu, 23 Mar 2017 23:32:40 +0800 Subject: [PATCH 02/19] update version in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 286b0d3..27e9430 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ To use this example you will need an [AWS](https://aws.amazon.com/es/) account a 1. Build the Wordpress container. -Packer will use a [base Docker image with Ansible](https://github.com/jfusterm/dockerfiles/blob/master/ansible/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `jfusterm/wp-packer` with a version tag `4.4.2`. +Packer will use a [base Docker image with Ansible](https://github.com/titanlien/dockerfiles/blob/master/ansible/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.5`. **Note**: If you want to change the image tag you have to change it in `wp-packer.json` and `wordpress.json`. @@ -41,14 +41,14 @@ Check that the image is ready. # docker images REPOSITORY TAG IMAGE ID CREATED SIZE -jfusterm/wp-packer 4.4.2 60bfb4ef7e9d 3 hours ago 138.2 MB +titanlien/wp-packer 4.5 b269eb1b9dd9 3 hours ago 135 MB ``` Then you can push it to Dockerhub. ``` # docker login -# docker push jfusterm/wp-packer:4.4.2 +# docker push titanlien/wp-packer:4.5 ``` 3. Deploy all the infrastructure needed on AWS using Terraform. From 4293c500249111961f633db80034868e9ebb0603 Mon Sep 17 00:00:00 2001 From: "Titan @github" Date: Thu, 23 Mar 2017 23:35:36 +0800 Subject: [PATCH 03/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 27e9430..f60fa33 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ To use this example you will need an [AWS](https://aws.amazon.com/es/) account a 1. Build the Wordpress container. -Packer will use a [base Docker image with Ansible](https://github.com/titanlien/dockerfiles/blob/master/ansible/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.5`. +Packer will use a [base Docker image with Ansible](https://github.com/titanlien/wordpress-ecs/blob/master/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.5`. **Note**: If you want to change the image tag you have to change it in `wp-packer.json` and `wordpress.json`. From cbc215eca8fe78ae6c64b1cd41a1a009d3ab364d Mon Sep 17 00:00:00 2001 From: Titan Date: Sun, 26 Mar 2017 23:15:45 +0800 Subject: [PATCH 04/19] export AWS access key to environment variable. --- README.md | 7 ++++--- terraform/rds.tf | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f60fa33..4ccb0bb 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,10 @@ Then you can push it to Dockerhub. ``` 3. Deploy all the infrastructure needed on AWS using Terraform. - -``` -# terraform apply + 1. Create a amazon role, *ecsInstanceRole*, to handle the EC2 resource. + 2. Launching stack by following command. +```bash +# env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply ``` Once deployed, Terraform will display the ECS Container Instances public IPs and the [ELB](https://aws.amazon.com/es/elasticloadbalancing/) URL that will distribute the traffic across the different Wordpress container instances. diff --git a/terraform/rds.tf b/terraform/rds.tf index a3a1b7b..90312f2 100755 --- a/terraform/rds.tf +++ b/terraform/rds.tf @@ -20,4 +20,5 @@ resource "aws_db_instance" "wordpress" { db_subnet_group_name = "${aws_db_subnet_group.default.id}" parameter_group_name = "default.mysql5.7" publicly_accessible = false + skip_final_snapshot = true } From ab8a614503e55f96d27886495a16ebf3ad0f77ee Mon Sep 17 00:00:00 2001 From: Titan Date: Sun, 26 Mar 2017 23:53:28 +0800 Subject: [PATCH 05/19] fix "Unable to assume role and validate the listeners configured on your load balancer" issue. https://aws.amazon.com/premiumsupport/knowledge-center/assume-role-validate-listeners/ --- README.md | 7 ++--- terraform/ec2.tf | 28 +++++++++---------- terraform/ecs.tf | 64 +++++++++++++++++++++++++++++++++++++++++--- terraform/outputs.tf | 6 ++--- 4 files changed, 82 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4ccb0bb..da69f66 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,10 @@ Then you can push it to Dockerhub. ``` 3. Deploy all the infrastructure needed on AWS using Terraform. - 1. Create a amazon role, *ecsInstanceRole*, to handle the EC2 resource. - 2. Launching stack by following command. -```bash +3.1. Create a amazon role, **ecsInstanceRole**, to handle the EC2 resource. +3.2. Launching stack by following command. + +``` # env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply ``` diff --git a/terraform/ec2.tf b/terraform/ec2.tf index d5967c1..a765fd7 100755 --- a/terraform/ec2.tf +++ b/terraform/ec2.tf @@ -15,17 +15,17 @@ resource "aws_instance" "ecs-instance01" { } } -resource "aws_instance" "ecs-instance02" { - ami = "${lookup(var.amis, var.region)}" - instance_type = "${var.instance_type}" - availability_zone = "us-west-2a" - subnet_id = "${aws_subnet.wp-public-tf.id}" - key_name = "${var.key_name}" - associate_public_ip_address = true - iam_instance_profile = "ecsInstanceRole" - security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] - user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" - tags { - Name = "ecs-instance02" - } -} +#resource "aws_instance" "ecs-instance02" { +# ami = "${lookup(var.amis, var.region)}" +# instance_type = "${var.instance_type}" +# availability_zone = "us-west-2a" +# subnet_id = "${aws_subnet.wp-public-tf.id}" +# key_name = "${var.key_name}" +# associate_public_ip_address = true +# iam_instance_profile = "ecsInstanceRole" +# security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] +# user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" +# tags { +# Name = "ecs-instance02" +# } +#} diff --git a/terraform/ecs.tf b/terraform/ecs.tf index 6bfc52e..501ddc4 100755 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -11,13 +11,71 @@ resource "aws_ecs_service" "wp-ecs-svc" { name = "wp-ecs-svc-tf" cluster = "${aws_ecs_cluster.default.id}" task_definition = "${aws_ecs_task_definition.wordpress.arn}" - desired_count = 2 + desired_count = 1 - iam_role = "ecsServiceRole" + iam_role = "${aws_iam_role.qq-ecs-role.id}" load_balancer { elb_name = "${aws_elb.default.id}" container_name = "wordpress" container_port = 80 } -} \ No newline at end of file + depends_on = ["aws_iam_role.qq-ecs-role","aws_instance.ecs-instance01"] +} + +resource "aws_iam_role_policy" "qq-ecs-policy" { + name = "qq-ecs-policy" + role = "${aws_iam_role.qq-ecs-role.id}" + policy = < Date: Thu, 30 Mar 2017 22:07:46 +0800 Subject: [PATCH 06/19] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ccb0bb..bb193f8 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ REPOSITORY TAG IMAGE ID CREATED titanlien/wp-packer 4.5 b269eb1b9dd9 3 hours ago 135 MB ``` -Then you can push it to Dockerhub. +Then you also can push it to Dockerhub manually. ``` # docker login @@ -73,8 +73,8 @@ The RDS connection parameters will be passed on runtime to the Wordpress contain This example uses a basic and simple approach to get a ready to use Wordpress using different technology. Further modifications will be done to get a fully automated, scalable and high available Wordpress. Some thoughts: +* Sending log to * Wrap all the steps in a single script: build the container, push the container to Dockerhub or a private registry and finally deploy all the infrastructure on AWS. -* ~~Automate Wordpress installation when the first instance is launched. **Note**: Currently the ELB won't work properly due to the health-checks configuration until Wordpress is installed from one of the Worpress instances.~~ * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. * Use a shared or distributed storage system to persist Wordpress' data. Examples: From c262a13d4d60d75ea43eac4d1421349868498a5e Mon Sep 17 00:00:00 2001 From: "Titan @github" Date: Thu, 30 Mar 2017 22:16:03 +0800 Subject: [PATCH 07/19] Update README.md --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bb193f8..c60218e 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,8 @@ Then you also can push it to Dockerhub manually. ``` 3. Deploy all the infrastructure needed on AWS using Terraform. - 1. Create a amazon role, *ecsInstanceRole*, to handle the EC2 resource. - 2. Launching stack by following command. +4. Create a amazon role, *qq-ecs-role*, to handle the EC2 resource. +5. Launching stack by following command. ```bash # env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply ``` @@ -62,7 +62,7 @@ Once deployed, Terraform will display the ECS Container Instances public IPs and The RDS connection parameters will be passed on runtime to the Wordpress containers via environment variables. -4. Once not needed, we can remove all the AWS infrastructure: +6. Once not needed, we can remove all the AWS infrastructure: ``` @@ -73,10 +73,13 @@ The RDS connection parameters will be passed on runtime to the Wordpress contain This example uses a basic and simple approach to get a ready to use Wordpress using different technology. Further modifications will be done to get a fully automated, scalable and high available Wordpress. Some thoughts: -* Sending log to * Wrap all the steps in a single script: build the container, push the container to Dockerhub or a private registry and finally deploy all the infrastructure on AWS. * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. + +## Todo: +* Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). +* Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. * Use a shared or distributed storage system to persist Wordpress' data. Examples: * [Amazon EFS](https://aws.amazon.com/efs/) * [GlusterFS](https://www.gluster.org/) From 421f73514f2bebd58dd48519d8249df83603eff5 Mon Sep 17 00:00:00 2001 From: "Titan @github" Date: Thu, 30 Mar 2017 22:25:51 +0800 Subject: [PATCH 08/19] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c60218e..0589449 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,8 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. -## Todo: +## Todo +* Need fixing the launching php-fpm error. * Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). * Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. * Use a shared or distributed storage system to persist Wordpress' data. Examples: From 77418153fa555cae05b9c7b9e76c8572895259a5 Mon Sep 17 00:00:00 2001 From: "Titan @github" Date: Fri, 31 Mar 2017 14:13:28 +0800 Subject: [PATCH 09/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0589449..cd5f87f 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. ## Todo -* Need fixing the launching php-fpm error. +* Need fixing the launching php-fpm error, *php-fpm entered FATAL state, too many start retries too quickly.* * Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). * Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. * Use a shared or distributed storage system to persist Wordpress' data. Examples: From b9041bcf6b04e9afcae6bf021eb9f6f444a6efee Mon Sep 17 00:00:00 2001 From: Titan Date: Sat, 1 Apr 2017 11:25:18 +0800 Subject: [PATCH 10/19] fix get ec2 public ip, get docker hub password from environment --- README.md | 26 +++++++------------ .../roles/wordpress/files/install-wp.sh | 2 +- packer/wp-packer.json | 7 +++-- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index cd5f87f..2c55b97 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,15 @@ To use this example you will need an [AWS](https://aws.amazon.com/es/) account a Packer will use a [base Docker image with Ansible](https://github.com/titanlien/wordpress-ecs/blob/master/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.5`. -**Note**: If you want to change the image tag you have to change it in `wp-packer.json` and `wordpress.json`. +**Note 1**: If you want to change the image tag you have to change it in `wp-packer.json` and `wordpress.json`. + +**Note 2**: Packer will push the image to [Dockerhub](https://hub.docker.com/) automatically. + ``` -# packer build wp-packer.json +# packer build -var 'DOCKER_PASSWD=[SECURITY]' wp-packer.json ``` -2. Push the container to [Dockerhub](https://hub.docker.com/) - Check that the image is ready. ``` @@ -44,16 +45,9 @@ REPOSITORY TAG IMAGE ID CREATED titanlien/wp-packer 4.5 b269eb1b9dd9 3 hours ago 135 MB ``` -Then you also can push it to Dockerhub manually. - -``` -# docker login -# docker push titanlien/wp-packer:4.5 -``` - -3. Deploy all the infrastructure needed on AWS using Terraform. -4. Create a amazon role, *qq-ecs-role*, to handle the EC2 resource. -5. Launching stack by following command. +2. Deploy all the infrastructure needed on AWS using Terraform. +3. Create a amazon role, *qq-ecs-role*, to handle the EC2 resource. +4. Launching stack by following command. ```bash # env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply ``` @@ -62,7 +56,7 @@ Once deployed, Terraform will display the ECS Container Instances public IPs and The RDS connection parameters will be passed on runtime to the Wordpress containers via environment variables. -6. Once not needed, we can remove all the AWS infrastructure: +5. Once not needed, we can remove all the AWS infrastructure: ``` @@ -76,8 +70,6 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Wrap all the steps in a single script: build the container, push the container to Dockerhub or a private registry and finally deploy all the infrastructure on AWS. * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. - -## Todo * Need fixing the launching php-fpm error, *php-fpm entered FATAL state, too many start retries too quickly.* * Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). * Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. diff --git a/packer/ansible/roles/wordpress/files/install-wp.sh b/packer/ansible/roles/wordpress/files/install-wp.sh index 2a15b9f..1feb26c 100644 --- a/packer/ansible/roles/wordpress/files/install-wp.sh +++ b/packer/ansible/roles/wordpress/files/install-wp.sh @@ -2,7 +2,7 @@ set -e -EC2_PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) +EC2_PUBLIC_IP=$(curl -s http://whatismyip.akamai.com/) WP_INSTALL_URL="http://$EC2_PUBLIC_IP/wp-admin/install.php?step=2" # Wait random time between 1s and 15s so the container with the lowest wait installs Wordpress, not all at once. diff --git a/packer/wp-packer.json b/packer/wp-packer.json index 3d78374..93eea37 100644 --- a/packer/wp-packer.json +++ b/packer/wp-packer.json @@ -1,5 +1,8 @@ { - "builders": [ + "variables": { + "docker_passwd": "{{env `DOCKER_PASSWD`}}" + }, + "builders": [ { "type": "docker", "image": "titanlien/ansible", @@ -24,7 +27,7 @@ "type": "docker-push", "login": "true", "login_username": "titanlien", - "login_password": "" + "login_password": "{{user docker_passwd`}}" } ] ] From e25b3c45004f16eb62b40530d884239ac236af17 Mon Sep 17 00:00:00 2001 From: Titan Date: Sat, 1 Apr 2017 12:04:32 +0800 Subject: [PATCH 11/19] update ecs ami image and wordpress email --- terraform/variables.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/terraform/variables.tf b/terraform/variables.tf index 54a32c4..f999f9c 100755 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -47,7 +47,7 @@ variable "amis" { eu-west-1 = "ami-9c9819ef" us-east-1 = "ami-67a3a90d" us-west-1 = "ami-b7d5a8d7" - us-west-2 = "ami-c7a451a7" + us-west-2 = "ami-62d35c02" } } @@ -97,5 +97,5 @@ variable "wp_password" { variable "wp_mail" { description = "Wordpress email" - default = "joan.fuster@gmail.com" -} \ No newline at end of file + default = "titan.lien@gmail.com" +} From 3a7da0ed38671c429869a298dcdac1c63d6379d0 Mon Sep 17 00:00:00 2001 From: Titan Date: Sat, 1 Apr 2017 12:07:34 +0800 Subject: [PATCH 12/19] update container error log --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c55b97..911c992 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Wrap all the steps in a single script: build the container, push the container to Dockerhub or a private registry and finally deploy all the infrastructure on AWS. * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. -* Need fixing the launching php-fpm error, *php-fpm entered FATAL state, too many start retries too quickly.* + * Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). * Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. * Use a shared or distributed storage system to persist Wordpress' data. Examples: @@ -80,3 +80,24 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Remove the RDS single point of failure. Examples: * Deploy RDS on [Multi-AZ](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) * Use [Percona XtraDB Cluster](https://www.percona.com/software/mysql-database/percona-xtradb-cluster) + +## TODO + +* Need fixing the launching php-fpm error, *php-fpm entered FATAL state, too many start retries too quickly.* + +```bash +[ec2-user@ip-10-1-1-32 ~]$ docker logs ecs-agent +2017-04-01T04:03:48Z [INFO] Starting Agent: Amazon ECS Agent - v1.14.1 (467c3d7) +2017-04-01T04:03:48Z [INFO] Loading configuration +2017-04-01T04:03:48Z [INFO] Checkpointing is enabled. Attempting to load state +2017-04-01T04:03:48Z [INFO] Loading state! module="statemanager" +2017-04-01T04:03:48Z [INFO] Event stream ContainerChange start listening... +2017-04-01T04:03:48Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22 1.23] +2017-04-01T04:03:48Z [WARN] Error getting valid credentials (AKID ): NoCredentialProviders: no valid providers in chain. Deprecated. + For verbose messaging see aws.Config.CredentialsChainVerboseErrors +2017-04-01T04:03:48Z [INFO] Registering Instance with ECS +2017-04-01T04:03:48Z [ERROR] Could not register: NoCredentialProviders: no valid providers in chain. Deprecated. + For verbose messaging see aws.Config.CredentialsChainVerboseErrors +2017-04-01T04:03:48Z [ERROR] Error registering: NoCredentialProviders: no valid providers in chain. Deprecated. + For verbose messaging see aws.Config.CredentialsChainVerboseErrors +``` \ No newline at end of file From 371d05915b55f4b2812faebe371b5338fce92e1c Mon Sep 17 00:00:00 2001 From: Titan Date: Sat, 1 Apr 2017 14:42:58 +0800 Subject: [PATCH 13/19] add ecs an ec2 svc into iam role --- packer/wp-packer.json | 4 ++-- terraform/ecs.tf | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packer/wp-packer.json b/packer/wp-packer.json index 93eea37..bd94622 100644 --- a/packer/wp-packer.json +++ b/packer/wp-packer.json @@ -1,6 +1,6 @@ { "variables": { - "docker_passwd": "{{env `DOCKER_PASSWD`}}" + "docker_passwd": "" }, "builders": [ { @@ -27,7 +27,7 @@ "type": "docker-push", "login": "true", "login_username": "titanlien", - "login_password": "{{user docker_passwd`}}" + "login_password": "{{user `docker_passwd`}}" } ] ] diff --git a/terraform/ecs.tf b/terraform/ecs.tf index 501ddc4..700e047 100755 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -68,7 +68,10 @@ resource "aws_iam_role" "qq-ecs-role" { { "Action": "sts:AssumeRole", "Principal": { - "Service": "ecs.amazonaws.com" + "Service": [ + "ecs.amazonaws.com", + "ec2.amazonaws.com" + ] }, "Effect": "Allow", "Sid": "" From 6dd9354408c00ef744d4f29b6c3cbe2995a7ca05 Mon Sep 17 00:00:00 2001 From: Titan Date: Thu, 6 Apr 2017 07:38:19 +0800 Subject: [PATCH 14/19] working in adding awslogs --- terraform/ec2.tf | 3 ++- terraform/ecs.tf | 11 ++++++----- terraform/task-definitions/wordpress.json | 9 ++++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/terraform/ec2.tf b/terraform/ec2.tf index a765fd7..34826e6 100755 --- a/terraform/ec2.tf +++ b/terraform/ec2.tf @@ -7,12 +7,13 @@ resource "aws_instance" "ecs-instance01" { subnet_id = "${aws_subnet.wp-public-tf.id}" key_name = "${var.key_name}" associate_public_ip_address = true - iam_instance_profile = "ecsInstanceRole" + iam_instance_profile = "${aws_iam_role.qq-ecs-role.id}" security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" tags { Name = "ecs-instance01" } + depends_on = ["aws_iam_role.qq-ecs-role"] } #resource "aws_instance" "ecs-instance02" { diff --git a/terraform/ecs.tf b/terraform/ecs.tf index 700e047..ba22cc8 100755 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -48,7 +48,11 @@ resource "aws_iam_role_policy" "qq-ecs-policy" { "ec2:Describe*", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:Describe*", - "elasticloadbalancing:RegisterInstancesWithLoadBalancer" + "elasticloadbalancing:RegisterInstancesWithLoadBalancer", + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents", + "logs:DescribeLogStreams" ], "Resource": "*" } @@ -68,10 +72,7 @@ resource "aws_iam_role" "qq-ecs-role" { { "Action": "sts:AssumeRole", "Principal": { - "Service": [ - "ecs.amazonaws.com", - "ec2.amazonaws.com" - ] + "Service": "ec2.amazonaws.com" }, "Effect": "Allow", "Sid": "" diff --git a/terraform/task-definitions/wordpress.json b/terraform/task-definitions/wordpress.json index 7e01b69..5b9c577 100755 --- a/terraform/task-definitions/wordpress.json +++ b/terraform/task-definitions/wordpress.json @@ -56,7 +56,14 @@ "mountPoints": null, "volumesFrom": null, "extraHosts": null, - "logConfiguration": null, + "logConfiguration": { + "logDriver": "awslogs", + "options": { + "awslogs-group": "ecs-log-streaming", + "awslogs-region": "us-west-2", + "awslogs-stream-prefix": "wp-packer" + } + }, "ulimits": null, "dockerLabels": null } From ab4bf868684b5c25cfa5eb23b3590c488ce0227f Mon Sep 17 00:00:00 2001 From: Titan Date: Thu, 6 Apr 2017 21:37:41 +0800 Subject: [PATCH 15/19] update ansible to 2.2.2.0, alpine to 3.5, wordpress to 4.7.3 --- Dockerfile | 4 +- packer/ansible/roles/php-fpm/tasks/main.yml | 2 +- .../roles/wordpress/files/entrypoint.sh | 4 +- packer/ansible/roles/wordpress/tasks/main.yml | 6 +-- packer/ansible/roles/wordpress/vars/main.yml | 4 +- packer/wp-packer.json | 46 +++++++++---------- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Dockerfile b/Dockerfile index 259d107..63fec30 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.3 +FROM alpine:3.5 MAINTAINER "Titan Lien" -ENV ANSIBLE_VERSION=2.2.1.0 +ENV ANSIBLE_VERSION=2.2.2.0 RUN set -ex && \ buildDeps="python-dev build-base libffi-dev openssl-dev" && \ diff --git a/packer/ansible/roles/php-fpm/tasks/main.yml b/packer/ansible/roles/php-fpm/tasks/main.yml index 8b4e127..6a8ae9e 100644 --- a/packer/ansible/roles/php-fpm/tasks/main.yml +++ b/packer/ansible/roles/php-fpm/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: PHP-FPM | Installation apk: - name=php-fpm,php-mysql,php-opcache + name=php5-fpm,php5-mysql,php5-opcache state=present update_cache=yes diff --git a/packer/ansible/roles/wordpress/files/entrypoint.sh b/packer/ansible/roles/wordpress/files/entrypoint.sh index b3d6c16..b001520 100644 --- a/packer/ansible/roles/wordpress/files/entrypoint.sh +++ b/packer/ansible/roles/wordpress/files/entrypoint.sh @@ -2,7 +2,7 @@ set -e -cd /usr/share/nginx/html/wordpress +cd /var/lib/nginx/html/wordpress if ! [ -e wp-config.php ] && [ -e wp-config-sample.php ]; then @@ -33,4 +33,4 @@ mv wp-config-sample.php wp-config.php cd / -exec "$@" \ No newline at end of file +exec "$@" diff --git a/packer/ansible/roles/wordpress/tasks/main.yml b/packer/ansible/roles/wordpress/tasks/main.yml index e75668b..d15bb7b 100644 --- a/packer/ansible/roles/wordpress/tasks/main.yml +++ b/packer/ansible/roles/wordpress/tasks/main.yml @@ -4,17 +4,17 @@ url=https://wordpress.org/wordpress-{{ wordpress_version }}.tar.gz dest=/wordpress.tar.gz checksum=md5:{{ wordpress_md5 }} - validate_certs=no # Alpine 3.3 doesn't recognize Godaddy's CA. + validate_certs=yes - name: Wordpress | Unarchive unarchive: src=/wordpress.tar.gz - dest=/usr/share/nginx/html + dest=/var/lib/nginx/html remote_src=yes - name: Wordpress | Set permissions file: - path=/usr/share/nginx/html/wordpress + path=/var/lib/nginx/html/wordpress owner=nginx group=nginx state=directory diff --git a/packer/ansible/roles/wordpress/vars/main.yml b/packer/ansible/roles/wordpress/vars/main.yml index 7ecca83..d2ee705 100644 --- a/packer/ansible/roles/wordpress/vars/main.yml +++ b/packer/ansible/roles/wordpress/vars/main.yml @@ -1,3 +1,3 @@ --- -wordpress_version: "4.5" -wordpress_md5: "6beda5bee679ddff61cb8e2e163f23bf" +wordpress_version: "4.7.3" +wordpress_md5: "044729d30b720809f19e14ece49e119b" diff --git a/packer/wp-packer.json b/packer/wp-packer.json index bd94622..7bf21fe 100644 --- a/packer/wp-packer.json +++ b/packer/wp-packer.json @@ -5,30 +5,30 @@ "builders": [ { "type": "docker", - "image": "titanlien/ansible", + "image": "titanlien/ansible:3.5", "commit": true } ], - "provisioners": [ - { - "type": "ansible-local", - "playbook_dir": "ansible", - "playbook_file": "ansible/wordpress.yml" - } - ], - "post-processors": [ - [ - { - "type": "docker-tag", - "repository": "titanlien/wp-packer", - "tag": "4.5" - }, - { - "type": "docker-push", - "login": "true", - "login_username": "titanlien", - "login_password": "{{user `docker_passwd`}}" - } - ] - ] + "provisioners": [ + { + "type": "ansible-local", + "playbook_dir": "ansible", + "playbook_file": "ansible/wordpress.yml" + } + ], + "post-processors": [ + [ + { + "type": "docker-tag", + "repository": "titanlien/wp-packer", + "tag": "4.7.3" + }, + { + "type": "docker-push", + "login": "true", + "login_username": "titanlien", + "login_password": "{{user `docker_passwd`}}" + } + ] + ] } From 160ecc2ef8de37e30b6434bdc38b1fc2b95be72f Mon Sep 17 00:00:00 2001 From: Titan Date: Thu, 6 Apr 2017 22:33:48 +0800 Subject: [PATCH 16/19] Need fix the launching container permission issue. --- .gitignore | 1 + README.md | 29 ++++++++++++++--------------- terraform/ec2.tf | 4 ++-- terraform/ecs.tf | 31 ++++++++++++++++++++++++++++--- 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 3167cd9..37451da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ terraform.* .DS_Store +*.log diff --git a/README.md b/README.md index 911c992..e7b236a 100644 --- a/README.md +++ b/README.md @@ -83,21 +83,20 @@ This example uses a basic and simple approach to get a ready to use Wordpress us ## TODO -* Need fixing the launching php-fpm error, *php-fpm entered FATAL state, too many start retries too quickly.* +* Need fix the launching container permission issue. ```bash -[ec2-user@ip-10-1-1-32 ~]$ docker logs ecs-agent -2017-04-01T04:03:48Z [INFO] Starting Agent: Amazon ECS Agent - v1.14.1 (467c3d7) -2017-04-01T04:03:48Z [INFO] Loading configuration -2017-04-01T04:03:48Z [INFO] Checkpointing is enabled. Attempting to load state -2017-04-01T04:03:48Z [INFO] Loading state! module="statemanager" -2017-04-01T04:03:48Z [INFO] Event stream ContainerChange start listening... -2017-04-01T04:03:48Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22 1.23] -2017-04-01T04:03:48Z [WARN] Error getting valid credentials (AKID ): NoCredentialProviders: no valid providers in chain. Deprecated. - For verbose messaging see aws.Config.CredentialsChainVerboseErrors -2017-04-01T04:03:48Z [INFO] Registering Instance with ECS -2017-04-01T04:03:48Z [ERROR] Could not register: NoCredentialProviders: no valid providers in chain. Deprecated. - For verbose messaging see aws.Config.CredentialsChainVerboseErrors -2017-04-01T04:03:48Z [ERROR] Error registering: NoCredentialProviders: no valid providers in chain. Deprecated. - For verbose messaging see aws.Config.CredentialsChainVerboseErrors +[ec2-user@ip-10-1-1-94 ~]$ docker logs ecs-agent +2017-04-06T14:49:49Z [INFO] Starting Agent: Amazon ECS Agent - v1.14.1 (467c3d7) +2017-04-06T14:49:49Z [INFO] Loading configuration +2017-04-06T14:49:49Z [INFO] Checkpointing is enabled. Attempting to load state +2017-04-06T14:49:49Z [INFO] Loading state! module="statemanager" +2017-04-06T14:49:49Z [INFO] Event stream ContainerChange start listening... +2017-04-06T14:49:49Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22 1.23] +2017-04-06T14:49:49Z [INFO] Registering Instance with ECS +2017-04-06T14:49:49Z [ERROR] Could not register: AccessDeniedException: User: arn:aws:sts::333179329614:assumed-role/qq-ec2-role/i-0d647cc24ac374671 is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:333179329614:cluster/ecs-tf + status code: 400, request id: 48dab45b-1ad8-11e7-a4c4-3f4fae5e2b29 +2017-04-06T14:49:49Z [ERROR] Error registering: AccessDeniedException: User: arn:aws:sts::333179329614:assumed-role/qq-ec2-role/i-0d647cc24ac374671 is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:333179329614:cluster/ecs-tf + status code: 400, request id: 48dab45b-1ad8-11e7-a4c4-3f4fae5e2b29 +[ec2-user@ip-10-1-1-94 ~]$ ``` \ No newline at end of file diff --git a/terraform/ec2.tf b/terraform/ec2.tf index 34826e6..3549beb 100755 --- a/terraform/ec2.tf +++ b/terraform/ec2.tf @@ -7,13 +7,13 @@ resource "aws_instance" "ecs-instance01" { subnet_id = "${aws_subnet.wp-public-tf.id}" key_name = "${var.key_name}" associate_public_ip_address = true - iam_instance_profile = "${aws_iam_role.qq-ecs-role.id}" + iam_instance_profile = "${aws_iam_instance_profile.web_instance_profile.id}" security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" tags { Name = "ecs-instance01" } - depends_on = ["aws_iam_role.qq-ecs-role"] + depends_on = ["aws_iam_instance_profile.web_instance_profile"] } #resource "aws_instance" "ecs-instance02" { diff --git a/terraform/ecs.tf b/terraform/ecs.tf index ba22cc8..569723b 100755 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -63,9 +63,14 @@ EOF depends_on = ["aws_iam_role.qq-ecs-role"] } -resource "aws_iam_role" "qq-ecs-role" { - name = "qq-ecs-role" - assume_role_policy = < Date: Fri, 7 Apr 2017 00:26:55 +0800 Subject: [PATCH 17/19] grant the correct policy to aws_iam_instance_profile --- README.md | 21 ++------------ raw/images/wp-demo.png | Bin 0 -> 111126 bytes terraform/ecs.tf | 63 ++++++++++++++++++++++++++++++++++------- 3 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 raw/images/wp-demo.png diff --git a/README.md b/README.md index e7b236a..15a46cf 100644 --- a/README.md +++ b/README.md @@ -81,22 +81,7 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Deploy RDS on [Multi-AZ](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) * Use [Percona XtraDB Cluster](https://www.percona.com/software/mysql-database/percona-xtradb-cluster) -## TODO +## Sample ELB page +![alt text][demo] -* Need fix the launching container permission issue. - -```bash -[ec2-user@ip-10-1-1-94 ~]$ docker logs ecs-agent -2017-04-06T14:49:49Z [INFO] Starting Agent: Amazon ECS Agent - v1.14.1 (467c3d7) -2017-04-06T14:49:49Z [INFO] Loading configuration -2017-04-06T14:49:49Z [INFO] Checkpointing is enabled. Attempting to load state -2017-04-06T14:49:49Z [INFO] Loading state! module="statemanager" -2017-04-06T14:49:49Z [INFO] Event stream ContainerChange start listening... -2017-04-06T14:49:49Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22 1.23] -2017-04-06T14:49:49Z [INFO] Registering Instance with ECS -2017-04-06T14:49:49Z [ERROR] Could not register: AccessDeniedException: User: arn:aws:sts::333179329614:assumed-role/qq-ec2-role/i-0d647cc24ac374671 is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:333179329614:cluster/ecs-tf - status code: 400, request id: 48dab45b-1ad8-11e7-a4c4-3f4fae5e2b29 -2017-04-06T14:49:49Z [ERROR] Error registering: AccessDeniedException: User: arn:aws:sts::333179329614:assumed-role/qq-ec2-role/i-0d647cc24ac374671 is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:333179329614:cluster/ecs-tf - status code: 400, request id: 48dab45b-1ad8-11e7-a4c4-3f4fae5e2b29 -[ec2-user@ip-10-1-1-94 ~]$ -``` \ No newline at end of file +[demo]: https://github.com/titanlien/wordpress-ecs/raw/master/raw/images/wp-demo.png "Wordpress Title Text 2" \ No newline at end of file diff --git a/raw/images/wp-demo.png b/raw/images/wp-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..41c1d3769661c026b1b3d973aa884a0d546e2165 GIT binary patch literal 111126 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%0D(frF*=xI}Gd@AQYbc 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

3&sFNwih%Qi=PF5)=0)MG%84>-D>Rl7;B;TggLF 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

VM{x3Z`_JPr`#5ZIg8qASpG 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%0AOr{;QRf$6cN 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 Date: Fri, 7 Apr 2017 13:54:29 +0800 Subject: [PATCH 18/19] Update README.md --- README.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 15a46cf..897ff00 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Practical example on how to get a Wordpress running under an Amazon ECS Cluster * [Terraform](https://www.terraform.io/) * [Amazon ECS](https://aws.amazon.com/ecs/) * [Amazon RDS](https://aws.amazon.com/es/rds/) +* [Amazon ELB](https://aws.amazon.com/elasticloadbalancing/) ## Requirements @@ -25,7 +26,7 @@ To use this example you will need an [AWS](https://aws.amazon.com/es/) account a 1. Build the Wordpress container. -Packer will use a [base Docker image with Ansible](https://github.com/titanlien/wordpress-ecs/blob/master/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.5`. +Packer will use a [base Docker image with Ansible](https://github.com/titanlien/wordpress-ecs/blob/master/Dockerfile) to provision all the applications needed to run a Wordpress. The result will be saved into a container named `titanlien/wp-packer` with a version tag `4.7.3`. **Note 1**: If you want to change the image tag you have to change it in `wp-packer.json` and `wordpress.json`. @@ -41,26 +42,28 @@ Check that the image is ready. ``` # docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -titanlien/wp-packer 4.5 b269eb1b9dd9 3 hours ago 135 MB +REPOSITORY TAG IMAGE ID CREATED SIZE +titanlien/wp-packer 4.7.3 334cf6396987 16 hours ago 155 MB ``` 2. Deploy all the infrastructure needed on AWS using Terraform. -3. Create a amazon role, *qq-ecs-role*, to handle the EC2 resource. +3. Create two amazon roles, *qq-ecs-role* and *qq-ec2-role*, to handle the EC2 resource. 4. Launching stack by following command. ```bash -# env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply +$ env TF_VAR_aws_access_key=$AWS_ACCESS_KEY TF_VAR_aws_secret_key=$AWS_SCERET_KEY TF_VAR_key_name=titan@MBA terraform apply ``` -Once deployed, Terraform will display the ECS Container Instances public IPs and the [ELB](https://aws.amazon.com/es/elasticloadbalancing/) URL that will distribute the traffic across the different Wordpress container instances. +Once deployed, Terraform will print out the ECS Container Instances public IPs and the [ELB](https://aws.amazon.com/es/elasticloadbalancing/) URL that will distribute the traffic across the different Wordpress container instances. The RDS connection parameters will be passed on runtime to the Wordpress containers via environment variables. -5. Once not needed, we can remove all the AWS infrastructure: +5. Upstream container log to cloudwatch awslogs. +6. Once not needed, we can remove all the AWS infrastructure: -``` -# terraform destroy + +```bash +$ terraform destroy ``` ## Considerations @@ -70,7 +73,6 @@ This example uses a basic and simple approach to get a ready to use Wordpress us * Wrap all the steps in a single script: build the container, push the container to Dockerhub or a private registry and finally deploy all the infrastructure on AWS. * Distribute the ECS Container Instances across different availability zones and route the traffic using the ELB among them. * Decouple Nginx and PHP-FPM in separate containers so can be scaled independently. - * Sending log to [ELK](https://www.elastic.co/products) or [Amazon Elasticsearch Service](https://aws.amazon.com/elasticsearch-service/). * Setting [cloudwtach](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) to monitor CPU, memory and network traffic. * Use a shared or distributed storage system to persist Wordpress' data. Examples: @@ -84,4 +86,4 @@ This example uses a basic and simple approach to get a ready to use Wordpress us ## Sample ELB page ![alt text][demo] -[demo]: https://github.com/titanlien/wordpress-ecs/raw/master/raw/images/wp-demo.png "Wordpress Title Text 2" \ No newline at end of file +[demo]: https://github.com/titanlien/wordpress-ecs/raw/master/raw/images/wp-demo.png "Wordpress Title Text 2" From 1e3d1615fef2ae0d4754c67e17fcb331c23fc124 Mon Sep 17 00:00:00 2001 From: TitanLien Date: Fri, 7 Apr 2017 14:01:45 +0800 Subject: [PATCH 19/19] add instance02 back --- terraform/ec2.tf | 28 ++++++++++++++-------------- terraform/ecs.tf | 4 ++-- terraform/outputs.tf | 6 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/terraform/ec2.tf b/terraform/ec2.tf index 3549beb..9e76527 100755 --- a/terraform/ec2.tf +++ b/terraform/ec2.tf @@ -16,17 +16,17 @@ resource "aws_instance" "ecs-instance01" { depends_on = ["aws_iam_instance_profile.web_instance_profile"] } -#resource "aws_instance" "ecs-instance02" { -# ami = "${lookup(var.amis, var.region)}" -# instance_type = "${var.instance_type}" -# availability_zone = "us-west-2a" -# subnet_id = "${aws_subnet.wp-public-tf.id}" -# key_name = "${var.key_name}" -# associate_public_ip_address = true -# iam_instance_profile = "ecsInstanceRole" -# security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] -# user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" -# tags { -# Name = "ecs-instance02" -# } -#} +resource "aws_instance" "ecs-instance02" { + ami = "${lookup(var.amis, var.region)}" + instance_type = "${var.instance_type}" + availability_zone = "us-west-2a" + subnet_id = "${aws_subnet.wp-public-tf.id}" + key_name = "${var.key_name}" + associate_public_ip_address = true + iam_instance_profile = "${aws_iam_instance_profile.web_instance_profile.id}" + security_groups = ["${aws_security_group.wp-ecs-sg-tf.id}"] + user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config" + tags { + Name = "ecs-instance02" + } +} diff --git a/terraform/ecs.tf b/terraform/ecs.tf index 6f0e1af..139a782 100755 --- a/terraform/ecs.tf +++ b/terraform/ecs.tf @@ -11,7 +11,7 @@ resource "aws_ecs_service" "wp-ecs-svc" { name = "wp-ecs-svc-tf" cluster = "${aws_ecs_cluster.default.id}" task_definition = "${aws_ecs_task_definition.wordpress.arn}" - desired_count = 1 + desired_count = 2 iam_role = "${aws_iam_role.qq-ecs-role.id}" @@ -20,7 +20,7 @@ resource "aws_ecs_service" "wp-ecs-svc" { container_name = "wordpress" container_port = 80 } - depends_on = ["aws_iam_role.qq-ecs-role","aws_instance.ecs-instance01"] + depends_on = ["aws_iam_role.qq-ecs-role","aws_instance.ecs-instance01","aws_instance.ecs-instance02"] } resource "aws_iam_role_policy" "qq-ecs-policy" { diff --git a/terraform/outputs.tf b/terraform/outputs.tf index ec0be46..890e549 100755 --- a/terraform/outputs.tf +++ b/terraform/outputs.tf @@ -6,6 +6,6 @@ output "ecs_instance01" { value = "${aws_instance.ecs-instance01.public_ip}" } -#output "ecs_instance02" { -# value = "${aws_instance.ecs-instance02.public_ip}" -#} +output "ecs_instance02" { + value = "${aws_instance.ecs-instance02.public_ip}" +}