All posts by date

Continuous Deployment with AWS CodePipeline for Static Websites and Front End Apps

  • by Emre Yilmaz
  • Feb 23, 2020
  • AWS, DevOps
CD Pipeline for Static Websites and Front End Apps on S3 with AWS CodePipeline

Whether you have a static website like this blog or a front end application developed using a framework like Angular, React or Vue.js, you can follow similar steps to create a continuous deployment pipeline on AWS using AWS CodePipeline. In this post, I will share the AWS services you can use while creating this type of pipelines to achieve fast and frequent deployments. ... read more

3 Ways to Schedule AWS Lambda and Step Functions State Machine Executions

  • by Emre Yilmaz
  • Jan 15, 2020
  • AWS, Serverless, DevOps
Scheduling AWS Lambda and Step Functions Executions

In addition to API development, AWS Lambda has many use cases. One of them is running some background jobs in scheduled intervals. Besides, if you need a chain of sequential or parallel AWS Lambda functions, the ideal way to orchestrate them is using AWS Step Functions.

In this post, I will talk about how to schedule your AWS Lambda functions or Step Functions state machine executions using AWS CloudWatch and EventBridge consoles as well as AWS Serverless Application Model (SAM) and CloudFormation templates. ... read more

Invalidating Paths on Your Amazon CloudFront Distributions Using AWS CLI

  • by Emre Yilmaz
  • Nov 29, 2019
  • AWS
Invalidating CloudFront Distributions Using AWS CLI

When you make changes on your content distributed via your Amazon CloudFront distribution, you have two options for them to be visible if they are cached: You will either wait for the cache to expire or you will invalidate them to serve the changes immediately. Of course, you cannot do anything about the cached content on your users’ browsers. But in your side, everything is under your control on AWS.

In this post, I will talk about how to invalidate some paths on your Amazon CloudFront distributions using AWS CLI along with some other commands that may be helpful in the process. ... read more

Using IAM Authentication to Access Amazon RDS MySQL Databases from Python AWS Lambda Functions

  • by Emre Yilmaz
  • Nov 27, 2019
  • AWS, Serverless, DevOps, Databases, Python
Amazon RDS Iam Authentication

Where do you keep your DB credentials in your AWS Lambda functions that you use to access your Amazon RDS databases? Hardcoded? No! Environment variables? Well, you might be using AWS Secrets Manager, right? It would be great! But did you know that you can also use the IAM role of your AWS Lambda function and its temporary credentials to do this?

Yes, there are different ways to manage your database credentials in your AWS Lambda functions. In this post, I will talk about one of the most secure methods, using IAM authentication of Amazon RDS, with an example of an AWS Lambda function developed in Python. I will use an Amazon RDS - MySQL DB instance, but IAM authentication is also supported on PostgreSQL DB instances as well. ... read more

Why Choose Amazon Aurora over Regular RDS

  • by Emre Yilmaz
  • Sep 24, 2019
  • AWS, Databases
Aurora vs Regular RDS

Amazon RDS is the managed relational database solution of AWS. You leave the setup and maintenance of your database to AWS, and focus on using it with the help of RDS. You can launch and maintain community edition MySQL, PostgreSQL databases as well as commercial Oracle and SQL Server databases on Amazon RDS. However, in a few years ago, AWS developed its own cloud native, enterprise level database engine called Amazon Aurora.

Aurora provides MySQL and PostgreSQL compatibility. In this post, I will discuss some of its unique features and why you should choose it instead of community edition MySQL and PostgreSQL databases.

Recently, Aurora also launched its serverless and multi-master versions and any of these features can alone be the reason to choose it. However, in this post, we will focus on single-master Aurora deployment and its advantages over RDS. ... read more

Building Angular Apps with AWS CodeBuild upon Bitbucket Pushes

  • by Emre Yilmaz
  • Jul 11, 2019
  • AWS, DevOps, Angular

If you use Bitbucket for your private Git repositories, you cannot use AWS CodePipeline to create a CI/CD pipeline. Because CodePipeline does not support Bitbucket as a source repository. However, if you still want to use AWS developer tools to automate your builds and deployments, you have an alternative. AWS CodeBuild supports Bitbucket integration as source allowing to trigger builds after push requests to a Bitbucket repository by publishing it as a webhook to it.

By the way, Angular is one of the most popular frontend frameworks and you can deploy your Angular projects in a serverless manner. So it can be reliable, scalable and cost-effective by design. You can build your code, upload to an Amazon S3 bucket and distribute it via Amazon CloudFront.

In this post, I will make an example of using a Bitbucket repository for your Angular projects and triggering builds on AWS CodeBuild after pushing your changes to it. Then your AWS CodeBuild project can build your Angular code and deploy it to an Amazon S3 bucket making it ready for distributing via CloudFront. ... read more

Creating a Serverless API Using SAM CLI and Ruby for AWS Lambda to Access Amazon RDS MySQL

  • by Emre Yilmaz
  • Jun 28, 2019
  • AWS, Serverless, Ruby, DevOps, Databases
Using Ruby for AWS Lambda and Creating a Serverless API to Access Amazon RDS MySQL

Having a Ruby on Rails background, I got excited to try Ruby to code my AWS Lambda functions when its support for AWS Lambda was announced at Re:Invent 2018. Finally, to try Ruby on AWS Lambda, I developed a simple API using AWS Serverless Application Model (SAM) to access an Amazon RDS MySQL database. I wanted to compare it with my experiences of doing this with Python and Node.js.

Although it may seem simple, installing mysql2 gem as a dependency proved itself to be challenging than others, because it has native extensions and depends on the environment you use bundler. As always, Docker simplifies our job by providing a similar environment that our AWS Lambda function runs inside.

In this post, I will make an introduction to AWS SAM CLI and using Ruby for AWS Lambda functions. Let’s begin! ... read more

Defining Resource Properties Conditionally Using AWS::NoValue on CloudFormation

  • by Emre Yilmaz
  • Jun 20, 2019
  • AWS, DevOps
Defining Resource Properties Conditionally Using AWS::NoValue on CloudFormation

AWS CloudFormation provides handful pseudo parameters which you can use to increase the reusability of your templates along with your template conditions and parameters. One of them is AWS::NoValue parameter which acts like the null value in programming languages.

In this post, I will talk about some examples of its use cases.

... read more

My New Course AWS CloudFormation Step by Step: Beginner to Intermediate is Live!

  • by Emre Yilmaz
  • May 31, 2019
  • Announcements, AWS, DevOps
AWS CloudFormation Step by Step: Beginner to Intermediate

I am happy to announce that my new course, AWS CloudFormation Step by Step: Beginner to Intermediate became live on Udemy last night.

In this post, I want to introduce you with my new course. I will talk about the topics, what you will learn in it as well as the structure of the course. In addition, I will also share a free coupon for a limited time with the followers of this blog. ... read more

The Order of Resource Creations on AWS CloudFormation

  • by Emre Yilmaz
  • Feb 4, 2019
  • AWS, DevOps
AWS CloudFormation resource creations order

In an AWS CloudFormation template, you define independent resources or resources that are implicitly dependent, in other words, reference other resources. For instance, you can define an EC2 instance and a security group. Then, you might choose to attach the security group to the instance or not. In these two cases, AWS CloudFormation organizes the order of the creation of resources differently.

In addition, you might have another resource such as an Amazon SNS topic in the same template which you might want to provision after your EC2 instance created. Maybe you have an explicit dependency between them.

In this blog post, I will talk about how AWS CloudFormation handles the order of creation for independent or implicitly dependent resources. I will also explain how you can add your own dependencies in a template, as well. ... read more

Happy to Pass AWS Certified Solutions Architect - Professional and Hold All 5 Core AWS Certifications

  • by Emre Yilmaz
  • Jan 2, 2019
  • Announcements, AWS
AWS Professional Certifications

To begin with, I wish you a happy new year in 2019! I hope that the new year brings more health, joy and success to you and more peace to the world.

Almost two weeks ago, I passed AWS Certified Solutions Architect - Professional exam with 91% and completed all my 5 core AWS certifications goal of 2018. Before that, I also passed AWS Certified DevOps Engineer - Professional exam with 85% at the beginning of last October. I did not have time to write a post about my experiences back then. But, today I would like to share them briefly. ... read more

Serving Dynamic Websites with Amazon CloudFront

  • by Emre Yilmaz
  • Dec 14, 2018
  • AWS, DevOps, Ruby on Rails
CloudFront Dynamic Web Distribution Sample Architecture

The most popular usage of Amazon CloudFront is to distribute static content such as images, videos or other objects existing in an Amazon S3 bucket. However, you can also use Amazon CloudFront to distribute your dynamic content such as a Ruby on Rails or PHP web application and benefit from the advantages of utilizing the globally distributed network infrastructure of AWS. In this blog post, I will talk about the advantages and the necessary configuration options for creating an Amazon CloudFront distribution for a dynamic web application. ... read more

5 Groups of Interesting AWS Launches in re:Invent 2018

  • by Emre Yilmaz
  • Dec 11, 2018
  • AWS
5 Groups of Interesting AWS Launches in re:Invent 2018

The major yearly AWS event, re:Invent 2018, took place two weeks ago. As always, there were new exciting launches announced from various fields, from serverless to machine learning, even blockchain. In this post, I will talk about 5 of these launches that I find more interesting and looking forward to explore more.

... read more

Encrypting Amazon EBS Volumes

  • by Emre Yilmaz
  • Dec 4, 2018
  • AWS, DevOps
Encrypting Amazon EBS Volumes

Today, encrypting data at rest is crucial for enhancing security of our applications. Besides, it might be a requirement for your compliance regulations. Whatever the reason is, it is a best practice to encrypt your Amazon Elastic Block Storage (EBS) volumes. In this post, I will show you how to encrypt an Amazon EBS volume using its integration with Amazon Key Management Service (KMS). ... read more

Configuring Ruby on Rails Logging for Docker on Amazon ECS or Fargate

  • by Emre Yilmaz
  • Nov 14, 2018
  • AWS, DevOps, Ruby on Rails

When you dockerize a Ruby on Rails application on AWS, it is essential to configure logging correctly to monitor application health. There are some tweaks to achieve this and I will briefly describe the process in this blog post.

Firstly, let’s make a brief introduction to Docker along with its deployment options on AWS. ... read more

11 Reasons to Use AWS CloudFormation for Provisioning Your Architecture

  • by Emre Yilmaz
  • Nov 5, 2018
  • AWS, DevOps
11 Reasons to Use AWS CloudFormation for Provisioning Your Architecture

As a passionate advocate for automation, I have been using AWS CloudFormation since the first day I started migrating my applications to AWS. I need to manage my time efficiently and should not repeat myself. By applying automation in infrastructure provisioning and keeping my architecture as a code; I can save, test and re-use my work later.

Infrastructure as code is a key DevOps practice and AWS CloudFormation is your service on AWS to realize it. In this post I explain 11 reasons for using AWS CloudFormation and automating provisioning of your infrastructure.

Save your time, bring quality to your process by starting to prepare your CloudFormation templates today!

... read more

Which AWS Elastic Beanstalk Deployment Method Should You Use?

  • by Emre Yilmaz
  • Oct 8, 2018
  • AWS, DevOps
Elastic Beanstalk Deployment Methods

Let’s say that you are a developer building awesome applications using Node.js or Python, but lacking knowledge and experience necessary to configure AWS environments. No worries! Elastic Beanstalk can make your life easier by handling configuration details. It uses preconfigured CloudFormation templates and provisions a scalable, load balanced and reliable environment for your application. It supports lots of programming languages, giving you less control but less worry in return. You can start from a single instance and make your architecture grow into a multi-instance cluster.

Although it may sound simple until now, actually Elastic Beanstalk is more than this. It provides you many deployment options and you can select one of them depending on your environment and use case. In this post, I will explain the options and when to consider them. ... read more

Automating Ruby on Rails Deployments with AWS CodeDeploy

  • by Emre Yilmaz
  • Jul 6, 2018
  • AWS, DevOps, Ruby on Rails, Ruby
Ruby on Rails Deployments with AWS CodeDeploy

Automating deployments of your web applications brings many benefits, especially when you run them on AWS. You standardize the process, prevent human errors and can integrate with other AWS services like EC2 Autoscaling and Elastic Load Balancing. Today I will talk about how you can automate your Ruby on Rails deployments using AWS CodeDeploy. ... read more

Accessing a MongoDB instance from AWS Lambda using Python

  • by Emre Yilmaz
  • Jun 8, 2018
  • AWS, Serverless, Python, Databases
Accessing MongoDB from AWS Lambda using Python

In recent days, I made some trials for connecting to MongoDB databases from AWS Lambda functions using Python. In today’s post I will share my experiences with you and take some notes about these trials for future reference. We will install MongoDB on an EC2 instance and develop simple Python functions to access it. Let’s start! ... read more

Copying S3 Bucket Objects to Another AWS Account

  • by Emre Yilmaz
  • Jun 5, 2018
  • AWS, DevOps

In some cases, you may need to transfer your objects in one of your Amazon S3 buckets to a different AWS account. AWS CLI provides high-level commands on S3 to move objects between two buckets. By also using Amazon S3 bucket policies, you can perform this even if the destination bucket is in another AWS account. Today, I will talk about the steps you need to do along with a few explanation on bucket and object level permissions. ... read more

Sending SMS Messages with Amazon SNS, AWS Lambda and Python

  • by Emre Yilmaz
  • May 23, 2018
  • AWS, Serverless, Python

Did you know that you can send SMS messages easily with Amazon SNS without subscribing any phone numbers to a topic? Let’s say that you have verified phone numbers and you would like to send text messages to them assuming that they opted in for this. Besides, you would like to pay only when you send. You can use Amazon SNS SDK for Python and automate this process using AWS Lambda. ... read more

Triggering AWS Step Functions by AWS API Gateway Calls

  • by Emre Yilmaz
  • May 8, 2018
  • AWS, Serverless

If you recall, in a previous blog post I discussed AWS Step Functions as a great service for orchestrating your AWS Lambda functions by giving an example. Today, I will show you how you can integrate your API Gateway resource methods with your AWS Step Functions state machines so that you can trigger your state machines with API calls.

Actually the benefits are obvious. Instead of serving our Lambda functions as separate endpoints and orchestrating which one to call and when in our front end; we can use a single endpoint and pass all logic to the back end. Then our back end, in this case our state machine, will execute the functions in sequential or parallel. This method especially suits well to cases when all these function calls are necessary to complete a single business action.

... read more

Increasing Email Deliverability When Using Amazon SES

  • by Emre Yilmaz
  • Apr 9, 2018
  • AWS, DevOps
Increasing Email Deliverability When Using Amazon SES

Amazon Simple Email Service (SES) is one of the first AWS services I started using. It allows you to send automated emails without maintaining your email servers. It is scalable, easy to use with AWS SDKs and cost-effective.

However, you need to do more than verifying your domain on Amazon SES for your emails not to end in your users’ spam folder. In this blog post, I will discuss how you can increase the deliverability of your emails by setting DKIM and SPF authentications on Amazon SES. ... read more

An Introduction to Amazon Cognito User Pools

  • by Emre Yilmaz
  • Feb 7, 2018
  • AWS, Serverless

When you build a new application, developing a secure, scalable user pool and authorization mechanism is a necessity and it takes time and effort to build. Sometimes, it even delays the development of the core features of your application that will bring the actual value to your business.

Amazon Cognito provides a scalable and secure user pool that you can create and use in your mobile and web applications. It provides a hosted user interface and SDKs for sign in and sign up actions. It has many features such as sending verification emails, SMS messages to your users. In this blog post, I will discuss how you can create an Amazon Cognito User Pool to use as an authentication mechanism in your applications. ... read more

Orchestrating AWS Lambda Functions Using AWS Step Functions

  • by Emre Yilmaz
  • Jan 17, 2018
  • AWS, Serverless
AWS Step Functions

While our serverless applications grow day by day; the need to orchestrate our Lambda functions may become an issue. We might need to execute some functions sequentially and one of our functions might get output of another function as input. Similarly, some functions might require to be executed in parallel. In these cases, AWS Step Functions can help us to coordinate our Lambda executions as components of our distributed applications and microservices.

In this blog post, I will make an introduction to AWS Step functions with a simple case. I will try to show how we can define sequential and parallel executions, as well as intermediary states to transform one state’s output to pass another state as input. ... read more

Provisioning Custom CloudFormation Resources Using AWS Lambda

  • by Emre Yilmaz
  • Dec 15, 2017
  • AWS, Serverless, DevOps

AWS CloudFormation is the foundation of operational excellency on AWS. We code our infrastructure in JSON of YAML templates and test it as much as we need before deploying on production. It is simply infrastructure as code concept.

However, some new resources may not be supported by AWS at the same time they are launched. As of today, an example to these is Elastic GPU resource. The solution is to define a custom CloudFormation resource and attach this resource to a Lambda function which launches these resources. The Lambda function should also be in the same template and I will describe the process in this blog post. ... read more

Transferring Domain Registrations from GoDaddy to Amazon Route 53

  • by Emre Yilmaz
  • Dec 6, 2017
  • AWS, DevOps

Amazon Route 53 offers domain registration services and if you would like to keep your domains together like I do, you can transfer your current domain names easily.

In the past, I bough some domains from GoDaddy and generally use Amazon Route 53 as my DNS service. It is time to renew some of our domains and I decided to move them to AWS as they are extended 1 year automatically after the transfer. This will allow me to manage my domain names, as well as the services behind them all together on AWS. I will describe the process as a reference. ... read more

Controlling API Usage with API Keys and Usage Plans on AWS API Gateway

  • by Emre Yilmaz
  • Nov 28, 2017
  • AWS, Serverless
Contolling API Usage with API Keys and Usage Plans on AWS API Gateway

AWS API Gateway provides us to develop our own RESTful APIs and trigger AWS Lambda functions upon HTTP requests. I often use this architecture in my serverless applications and developed many APIs for my clients. With the help of API Keys and Usage Plans, we can define maximum request quotas and manage request rates while sharing our API with others.

Although API keys can never be considered as a full security measure as we often store these keys in client applications calling the API, usage plans can provide us to limit the API access and be sure that usage does not exceed tresholds we define. ... read more

AWS IAM Policy Conditions and Restricting Access by Availability Zones

  • by Emre Yilmaz
  • Oct 31, 2017
  • AWS

AWS Identity and Access Management (IAM) is the foundation service to manage security of your resources on AWS. Custom IAM policies feature allows us to define our own policies according to our needs instead of using AWS Managed Policies. Normally, it is a best practice to use managed policies whenever possible, because AWS updates them automatically when a new service is launched. However, assigning least privileges is the most important principle in terms of security and sometimes it is better to prepare custom policies.

Conditions in IAM policies allow us to tailor permissions and grant access to users if the resource meets specific conditions. In this post, I will show you how to use conditions in an IAM policy to grant users permissions to start/stop EC2 instances if the instance is in a specific availability zone. ... read more

Running AWS Lambda Functions in a VPC and Accessing RDS

  • by Emre Yilmaz
  • Oct 23, 2017
  • AWS, Serverless, Databases
Running AWS Lambda in VPC and Accessing RDS

AWS Lambda allows us running code without maintaining servers and paying only for the resources allocated during the code run. In most cases, we do not need to run our Lambda function in a VPC and it is recommended not to run in a VPC in these situations as a best practice. Some of examples to these are sending emails using Amazon SES or accessing a DynamoDB table.

However, to access an RDS database in your Lambda function you have to run your function in the same VPC or in a VPC that has a peering connection to the VPC of your RDS instance. In this blog post I would like to discuss about running AWS Lambda functions in a VPC and accessing a RDS MySQL database. ... read more

Restricting Amazon S3 Bucket Access on CloudFront Distributions

  • by Emre Yilmaz
  • Oct 10, 2017
  • AWS

When you decide to distribute your content stored in your Amazon S3 bucket with Amazon CloudFront, you most probably would like to avoid your users bypassing CloudFront and accessing them directly from Amazon S3.

In this blog post, I will demonstrate how you can utilize Origin Access Identities to restrict access to your S3 bucket on your Amazon CloudFront distributions. ... read more

Storing and Monitoring Rails Logs on Amazon CloudWatch

  • by Emre Yilmaz
  • Oct 2, 2017
  • AWS, Ruby on Rails, DevOps, Ruby

If you deploy any type of application on AWS, such as a Ruby on Rails web app; then your application will generate large amounts of logs. Hence, you will need to store and monitor these logs somewhere to understand what is going on when an unexpected event occurs. A central log server may be a choice; however, Amazon CloudWatch offers an alternative way without maintaining your log servers and with lots of capabilities.

In today’s blog post, I will describe how you can start storing your application logs on Amazon CloudWatch by using a Ruby on Rails web application as an example. The same principles here would apply to other types of application logs as well. ... read more

Increasing Root Volume Size of an EBS Backed EC2 Instance

  • by Emre Yilmaz
  • Sep 24, 2017
  • AWS

When you start an EC2 instance, you define an EBS volume size. However, you may need more disk space later for some reason. In this blog post, I will demonstrate an example on how you can increase the root volume size of an EC2 Linux instance. ... read more

How to Import Bootstrap 4 Sass into Angular 4

  • by Emre Yilmaz
  • Sep 12, 2017
  • Angular

Angular and Bootstrap are very useful tools when developing front ends. You can build single page applications with powerful features of Angular and make them look pretty by using Bootstrap classes and components. They both have new versions now, coincidentally each has version 4. However, Bootstrap 4 is currently in beta stage.

In this blog post I will explain how to import Bootstrap 4 Sass module in an Angular 4 application as SCSS. ... read more

Accessing AWS Resources Using Python Scripts

  • by Emre Yilmaz
  • Aug 20, 2017
  • AWS, Python
Accessing AWS via Python and Boto 3

While managing your resources on AWS, you may need accessing services programmatically. You may need to get information about an instance or modify some attribute. In some cases, you may need a cron job that runs every hours or once a day. For example, it can be a job getting the name of the current master node in an ElastiCache Redis cluster.

Writing Python scripts is an easy way to access and use your AWS resources. Besides, you can use Python for coding your AWS Lambda functions. In this blog post, I will give a simple example to listing VPC components using a Python script. ... read more

Signing S3 Upload Requests With Signature Version 4 in a Rails and AngularJS Application

  • by Emre Yilmaz
  • Aug 10, 2017
  • AWS, Ruby on Rails, Angular, Ruby
Amazon S3 Signature v4 Process

In our Ruby on Rails web applications, we use Amazon S3 to store files. Uploading files to Amazon S3 buckets via HTTP requests, requires signing the request. Current recommended and safer signing method is Signature Version 4 and AWS regions openned after January 30, 2014, such as London and Frankfurt, only support this version.

In this blog post, I will try to exlain how to sign HTTP requests for Amazon S3 uploads in a Rails application and make requests by using AngularJS ng-file-upload module. ... read more

Starting Shikisoft Blog!

  • by Emre Yilmaz
  • Aug 1, 2017
  • Announcements

Today I am excited to start this blog to share our experiences in Shikisoft with the open source and cloud communities; as well as our followers. Since the decision to work in my own business four and a half years ago, I have learnt so much from both communities. Thanks to them, we have come so far and continue to learn every day.

This is the magic of founding a new business. You enter a different world than that you used to be in a corporate. You work hard, come across lots of difficulties, sometimes you are up sometimes down. However, you learn much more and I think despite all the side effects it is enjoyable! ... read more

AWS CloudFormation Step by Step: Beginner to Intermediate

Would you like to start learning AWS CloudFormation? Check out my course on Udemy!

  • ✔️ Start as a beginner and learn how to create stacks and write your own templates with YAML.
  • ✔️ Learn CloudFormation basics in detail with AWS best practices.
  • ✔️ Achieve an intermediate level where you use CloudFormation daily to automate the creation of your AWS resources.

Click the link below to buy this course for only $12.99 for a limited time. Alternatively, you can use JUNE2020 coupon code during the checkout.

Join now on Udemy!

* The price on Udemy may change slightly depending on your country and your local currency.


Subscribe to this blog's RSS feed