Automate AMI Creation For EC2 Instances Using Systems Manager

In this guide , We will learn How to automate the process of AMI Creation for the EC2 Instances using Systems Manager.

If you want to know more about Systems Manager (SSM) and How to Scan EC2 Instances and Run commands using Systems Manager , I have published a separate article and explained in detail there.

Check these articles related to Systems Manager:

RUN COMMANDS USING SYSTEMS MANAGER

SCAN EC2 INSTANCES FOR MALWARES USING SYSTEMS MANAGER

Process Involved

  • Registering EC2 Instances as Managed Instances.
  • Creating Maintenance Window using Systems Manager.
  • Register the Automation Tasks.
  • Adding EC2 Instances as Targets.

Supported Operating Systems

This process is applicable for both

  • Linux Operating System.
  • Windows Operating System.

Making EC2 Instances As Managed Instances

The EC2 Instances for which you want to create the AMI , Must be listed as Managed Instances under Systems Manager.

For that We have to setup SSM Agent on the EC2 Instances. Refer the below article for the same.

Installing SSM agent on EC2 Instances

Once you have the SSM agent installed on the EC2 Instances. We have to Create an IAM Role and attach with the EC2 Instance so that the Systems Manager’s maintenance window has the necessary permission to create AMI of the EC2 Instance.

Creating IAM Role

To Create an IAM Role ,Login to IAM Console

In the left pane , Choose Roles ,Click Create role

Choose AWS service and use case be EC2

And Choose Next: Permissions

Search for AmazonSSMMaintenance , Check the AmazonSSMMaintenanceWindowRole,

You can add Tags, And Next: Review , Specify a name for the IAM Role and Click Create role.

Once the Role is created. Select the Role , Under Permissions , Click Add inline policy

You will see the below page.

Choose the service as EC2 , Under Actions , In the write access level , Select CreateImage

Under List access level , Choose DescribeImages.

Click Review policy , Specify a name for the policy and choose Create policy.

Again select the Role , Choose Trust relationships , Click Edit trust relationship

You will see the below policy ,

We have to add ssm.amazonaws.com to the policy. Replace it with the below policy and click Update Trust Policy.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "", 
      "Effect": "Allow",
      "Principal": {
        "Service": [
	  "ec2.amazonaws.com",
	  "ssm.amazonaws.com"
	]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

If you want to know more about Creating IAM Roles , Attaching or Replacing Roles with EC2 Instances , Check this Article.

Attaching IAM Role With EC2 Instance

Next step is to attach the IAM Role with the EC2 Instances. To do so , Login to EC2 Console ,

Form the left pane , Choose Instances , Select the Instance ,

Under Actions –> Instance settings –> Attach/Replace IAM Role.

IAM role , In the drop down menu , Select the Role and Click Apply.

Creating Maintenance Window

To create a Maintenance Window , Go to AWS Systems Manager

In the Next pane , Under Actions & change , Choose Maintenance Windows.

Choose Create Maintenance Window

Provide a name for the Maintenance Window , Under the Schedule , Choose Cron Schedule builder

Window starts at Every Wednesday at 11 PM , You can modify the Cron expression as per your requirement.

I am specifying the total maintenance window duration as 3 hours , And I stop scheduling the tasks 1 hour before the maintenance window ends.

And click Create maintenance window

Registering Targets

Once the Maintenance window is created. Select the maintenance window and Under Actions , Choose Register targets

You can optionally give a name to the targets for identification.

Under Targets , Select Choose instances manually

Under the lists of EC2 Instances , Select the instance and Click Register target.

Registering Automation Task

Select the Maintenance window , Under Actions , Choose Register Automation task

You can optionally specify a name for the Automation task , Under Automation document ,

Choose AWS-CreateImage.

Under Targets , Select the registered target groups and choose the Window Target ID

Set the Concurrency and errors to 1.

Under IAM Service role , Choose Use a custom service role ,Select the IAM Role which we have created in the Previous step.

Under Input parameters ,

For the Variable name InstanceId , Pass the Value as {{TARGET_ID}}

TARGET_ID is case sensitive and It passes the instances registered in the target as input to the Automation Document.

If the value for the NoReboot is false , The Instance will be shutdown before creating the AMI.

Pass the value as true to avoid rebooting instances.But Amazon wont guarantee the file system integrity for the created images.

Click Register Automation task.

Wrapping Up

By following the above process , We can automate the process of creating the AMI for the Running EC2 Instances using Systems Manager.

Hope It helps , Thanks for referring my article.

Please do check out my other publications.