Used AWS Services

Ubuntu 18.04 to run webserver. (Actually, choosing an Amazon Linux AMI is a better option for a beginner, but I wanted to do more practice on Linux as well. That’s why I chose Ubuntu which is one of the most popular Linux distributions on web servers. But, don’t forget that Amazon Linux AMIs are provided by Amazon Web Services for use on Amazon Elastic Compute Cloud (Amazon EC2).) [Ref. AWS Documentation]

Amazon Elastic Block Store
To host WordPress core files and additional uploads like images, plug-in and theme files, etc. (AWS Free Tier option provides 30GB usage of EBS for 12 months. Ubuntu 18.04 with Web Server, WordPress files etc. uses around only 2.3 GB. And I created volume and instance snapshots for backup.) [Ref. AWS Documentation]

Elastic IP
Assigned an Elastic IP to EC2 instance. (There isn’t too many things to say for this, Elastic IP service provides a static IP and you can assign this static IP to your EC2 instance. So, your servers IP address remains same even if you reboot your EC2 instance.) [Ref. AWS Documentation]

Amazon RDS
A RDS instance with MySQL database which is used for WordPress tables. (RDS is not the best option for a simple Web Server, you can use MySQL with Apache on your EC2 instance as well. But, I wanted to try Amazon RDS and that’s why I chose using Amazon RDS as a database server.) [Ref. AWS Documentation]

To create user groups and users to access AWS Management Console with limited and pre-settled access. (Also an AIM role with AWSForWordPressPluginPolicy is required for AWS for WordPress plug-in.) [Ref. AWS Documentation]

AWS Budgets
Created monthly budget to avoid unexpected/unwanted costs. (It is very important to be aware about your costs, especially if you are a beginner. Because, you can face with unexpected cost if you make something wrong. That’s why I activated Receive Free Tier Usage Alerts to get email notifications about Free Tier Usage.) [Ref. AWS Documentation]

Route 53
To buy a domain and create a hosted zone for DNS settings. (I preferred to buy a domain from Route 53 because it is easier to manage DNS configurations but, Route 53 domain service is far behind its competitors. I will discuss about this in an other blog post. And please note that you should pay 0.50 usd (0.59 with tax) per month for each hosted zone on Route 53. This is the only service which I pay on AWS.) [Ref. AWS Documentation]

AWS Certificate Manager (ACM) 
Requested a SSL certificate to secure connection. (I requested a Public Certificate for both and addresses. Then I chose “DNS Verification” option to verify ownership of domains. This option created separate CNAME records for each address to add on DNS records. Since I bought the domain from Route 53, ACM added the records automatically for me.) [Ref. AWS Documentation]

Elastic Load Balancing (Classic)
(You cannot use ACM to install a public certificate directly on your AWS based website or application. You must use one of the services integrated with ACM. I chose Elastic Load Balancing service to integrate my public certificate. I’ve created a Classic Load Balancer and configurated it, then I integrate public certificate with this Classic Load Balancer.) [Ref. AWS Documentation]

AWS Polly with AWS for WordPress Plug-in
Installed AWS for WordPress plug-in and activated text-to-speech for blog posts. (Also added an option for translation to Turkish. This plug-in uses Amazon Polly service to text-to-speech and translation. It requires an IAM role and assigning it to your WordPress EC2 instance. In addition, plug-in created a S3 bucket to store voice files.) [Ref. AWS Documentation]

Amazon S3
Created a S3 bucket to store files. (I created a S3 Bucket (with public access, versioning on, encryption and object lock disables) to store static files, like CV etc. Also AWS for WordPress plug-in created a separate S3 bucket to store text-to-speech voice files.) [Ref. AWS Documentation]

Update: I’ve created another S3 bucket to host a static website.


After completing first version of this project, I tried to create a diagram which shows infrastructure of the project. You can see it below as a draft, but most probably it includes some mistakes and need fixes. I will update it as soon as possible.