From 4a752100f991c18f4da385fe55a9a3e1797f19ea Mon Sep 17 00:00:00 2001 From: Divya Girase Date: Mon, 2 Sep 2024 16:06:39 +0100 Subject: [PATCH 1/6] New serverless pattern - Lambda Recycle Bin --- ami-recycle-bin/README.md | 85 ++++++++++++ ami-recycle-bin/main.tf | 144 +++++++++++++++++++++ ami-recycle-bin/src/ami-recycle-bin.png | Bin 0 -> 229289 bytes ami-recycle-bin/src/ami-recycle-lambda.zip | Bin 0 -> 2181 bytes ami-recycle-bin/variables.tf | 35 +++++ 5 files changed, 264 insertions(+) create mode 100644 ami-recycle-bin/README.md create mode 100644 ami-recycle-bin/main.tf create mode 100644 ami-recycle-bin/src/ami-recycle-bin.png create mode 100644 ami-recycle-bin/src/ami-recycle-lambda.zip create mode 100644 ami-recycle-bin/variables.tf diff --git a/ami-recycle-bin/README.md b/ami-recycle-bin/README.md new file mode 100644 index 000000000..889c55eed --- /dev/null +++ b/ami-recycle-bin/README.md @@ -0,0 +1,85 @@ +## Description + +In this pattern an Amazon EventBridge trigger AWS Lambda function to deregister AMI, delete the associated snapshot and move them to Recycle Bin for retention. + +The template creates all the necessary resources including an Amazon EventBridge Rule that triggers the AWS Lambda function once every day. Additionally, Recycle Bin rules for AMI and EBS Snapshots are created to retain deleted resources matching the resources for a retention period. + +AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) moving the AMIs and its associated snapshot to Recycle Bin af. The Recycle Bin is a feature in Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have deregistered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The lambda function also adds corresponding tags to both, the AMI and the EBS Snapshot before moving them to Recyle Bin for recovery. + + +Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/ami-recycle-bin + +Important: this application uses various AWS services and there are costs associated with these services after the Free Tier usage - please see the [AWS Pricing page](https://aws.amazon.com/pricing/) for details. You are responsible for any AWS costs incurred. No warranty is implied in this example. + +## Requirements + +* [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. +* [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured +* [Git Installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +* [Terraform Installed](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) Required Terraform version >= 4.61.0 + +## Pre-requisite for Testing +An AMI to deregister that has the following Tags: + +| Key | Value | +| -------- | ------- | +| Expire-After | Date in Zulu format (e.g. 2024-08-30T17:39:00Z) | +| Matching value for resource_tag_key in src/variables.tf | Matching value for resource_tag_value in src/variables.tf | + + +## Deployment Instructions +1. Create a new directory, navigate to that directory in a terminal and clone the GitHub repository: + ``` + git clone https://github.com/aws-samples/serverless-patterns + ``` +2. Change directory to the pattern directory: + ``` + cd ami-recycle-bin + ``` +3. Bootstrap the input variables in the following file that are used in the Terraform configuration + ``` + src/variables.tf + ``` +4. Initialize a new or existing Terraform working directory by downloading required provider plugins and modules + ``` + terraform init + ``` +5. Create an execution plan that shows the changes Terraform will make to your infrastructure based on the current configuration files + ``` + terraform plan + ``` +6. Apply the changes defined in the Terraform configuration to the infrastructure. Provide the prompts as required + ``` + terraform apply + ``` + +## How It Works + +Following is the architectural diagram to demonstrate how the pattern works: + +![alt text](src/ami-recycle-bin.png) + +1. An Amazon Eventbridge rule is configured to run daily (on a schedule) with AWS Lambda function as a target +2. The Lambda function performs the following: +- Verifies that Recycle Bin rules matching the `resource_tag_key` and `resource_tag_value` as bootstraped in the `variables.tf` exists +- Filters AMIs matching the `resource_tag_key` and `resource_tag_value` and contains the `Expire-After` tag +- Determines whether any of the filtered AMI are expired using the `Expire-After` tag +- Tags the expired AMI with its Snapshot Id and the associated snapshot with the AMI Id if required for recovery +- Deprecates the expired AMI and deletes its associated snapshot + +## Testing + +1. Verify the the expired AMI and its snapshot is retained in the Recycle Bin after deletion +2. Verify the AMI and its snapshot can be recovered after deletion before the retention period ends + +## Cleanup + + Delete the resources + +``` +terraform destroy +``` +---- +Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +SPDX-License-Identifier: MIT-0 diff --git a/ami-recycle-bin/main.tf b/ami-recycle-bin/main.tf new file mode 100644 index 000000000..eeae097ca --- /dev/null +++ b/ami-recycle-bin/main.tf @@ -0,0 +1,144 @@ +provider "aws" { + region = "us-west-2" +} + +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "5.65.0" + } + } +} + +resource "aws_cloudwatch_event_rule" "event_rule" { + name = "invoke-lambda-daily" + description = "Invoke a Lambda function every day" + schedule_expression = "rate(1 day)" +} + +resource "aws_cloudwatch_event_target" "event_target" { + rule = aws_cloudwatch_event_rule.event_rule.name + target_id = "InvokeLambda" + arn = aws_lambda_function.lambda_function.arn +} + +resource "aws_lambda_permission" "lambda_permission" { + statement_id = "AllowExecutionFromEventBridge" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.lambda_function.function_name + principal = "events.amazonaws.com" + source_arn = aws_cloudwatch_event_rule.event_rule.arn +} + +resource "aws_cloudwatch_log_group" "example" { + name = "/aws/lambda/${aws_lambda_function.lambda_function.function_name}" + retention_in_days = var.cw_retention_period +} + +resource "aws_lambda_function" "lambda_function" { + filename = "src/ami-recycle-lambda.zip" + function_name = "ami-recycle-lambda" + role = aws_iam_role.lambda_role.arn + handler = "ami-recycle-lambda.lambda_handler" + runtime = "python3.9" + # Add environment variable block here + environment { + variables = { + "RECYCLE_BIN_TAG_KEY" = var.resource_tag_key + "RECYCLE_BIN_TAG_VALUE" = var.resource_tag_value + "RBIN_RETENTION_PERIOD_VALUE" = var.rbin_retention_period_value + "RBIN_RETENTION_PERIOD_UNIT" = var.rbin_retention_period_unit + } + } + timeout = 300 + memory_size = 128 + source_code_hash = filebase64sha256("src/ami-recycle-lambda.zip") +} + +resource "aws_iam_role" "lambda_role" { + name = "lambda-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [{ + Action = "sts:AssumeRole" + Effect = "Allow" + Sid = "" + Principal = { + Service = "lambda.amazonaws.com" + } + }] + }) + + inline_policy { + name = "lambda-policy" + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Action = [ + "logs:CreateLogStream", + "logs:PutLogEvents", + "logs:CreateLogGroup" + ] + Resource = "arn:aws:logs:*:*:*" + }, + { + Effect = "Allow" + Action = [ + "ec2:DescribeImages", + "ec2:TagResource", + "ec2:DeleteSnapshot", + "ec2:DescribeSnapshots", + "ec2:DescribeTags", + "ec2:CreateTags", + "ec2:DeregisterImage", + "ec2:DeleteSnapshot", + "rbin:ListRules" + ] + Resource = "*" + } + ] + }) + } +} + + +resource "aws_rbin_rule" "snapshot_rbin" { + description = "Recycle bin rule to retain deleted snapshots" + resource_type = "EBS_SNAPSHOT" + + retention_period { + retention_period_value = var.rbin_retention_period_value + retention_period_unit = var.rbin_retention_period_unit + } + + resource_tags { + resource_tag_key = var.resource_tag_key + resource_tag_value = var.resource_tag_value + } + + tags = { + "Name" = "Snapshot-Recycle-Bin" + } +} + +resource "aws_rbin_rule" "image_rbin" { + description = "Recycle bin rule to retain deleted snapshots" + resource_type = "EC2_IMAGE" + + retention_period { + retention_period_value = var.rbin_retention_period_value + retention_period_unit = var.rbin_retention_period_unit + } + + resource_tags { + resource_tag_key = var.resource_tag_key + resource_tag_value = var.resource_tag_value + } + + tags = { + "Name" = "EC2-Image-Recycle-Bin" + } +} diff --git a/ami-recycle-bin/src/ami-recycle-bin.png b/ami-recycle-bin/src/ami-recycle-bin.png new file mode 100644 index 0000000000000000000000000000000000000000..5a11a60d35cd492876d334fe29e0c7618844c5e3 GIT binary patch literal 229289 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 literal 0 HcmV?d00001 diff --git a/ami-recycle-bin/src/ami-recycle-lambda.zip b/ami-recycle-bin/src/ami-recycle-lambda.zip new file mode 100644 index 0000000000000000000000000000000000000000..0061c7b3d0255c3e3e34d6249fbb56ab30532df1 GIT binary patch literal 2181 zcmbuAc{J4h9>;&S$c#10*y%}_Y(*xK#@d+1OlTTq8Dpsl$%rzR%D#;yib+JxRiiQ} zdzLIu$d)BEmZW64!ywI|xZ|Aroco-6pL3o+?)!7T=kxjg^I6{iyf8=sK^Z`V7mw4G zoq>PrfD8c00;+(AKT(I|?HTIn=dI)C;ZN}L(7hUZ)=3NyZr*(F)5?20Irs($;1lHV z0RXQR0KCBY2QZIHZY{dQ^+nV@Q>Cs=f~!y7G4U_e(2{1H^p)e+$y2N-pG_pmGum%X zDj^UwuewqFh=cc792%*!3hDH{c&*~x>*IRW#C#|qe z?zyjS|=hS6Tx zv-0HDBwDx8CGtVczTv8=?>{5BZ@++4^tb5gld9SsF~@%)ycA$y_WIB1hkK%OqO{RV zL?@~p3vs#1yCDwNbX6)ZU4k#}omh)FE<>hDAgf?oEA{&eAYKR?(*3xft^;>CI)=&ryO` zl2z>MerTX@sh8#wXc}G^Euyj$Mk^An9$tSJJufS$U<`$N> zv0jXnO9#`H#=)n-VOtPmQB7m(2?Qj1JS5DllenZ$zE`b%#^`X?V73{Z(!|n5wPk*J2j!XB^qXeDn~h8z2D`k>>z(z+o+tMEo^MX_P-pKl z%-!x>Q}1=d+VnZ=cz6vN!j4^?V4xHYOdZslVz*Ddd;4+0qHn6nE8ibM3)UWhXr~rp z;XyE`1ehtixuQM^(pVK>j1e_`DfFRCikTd-ta5NjlQZS8n1Jdo`v|vgO3mkgU&z|p%3<7IC4LF z?TqQ!3pWmjx=r7)@7?oHv-iQ!ua$eWC%V2dK%SoXq;cJxe8t2EI_IBA)yM@TiAoE} z4b=JAc@UbsM@g#4J-%sv@58?!3Wzb6qC76DIiBk=>CoOTt=r64SfN7OrB84`!{cp6 zW^R=5B;w<$*RZ&pm@|8=yzzphc^pfE9-ueKza&2y=0C6aL`#ZQ#;M$&G9Ne( zttq(K(&y^OkO;0fBCwLew-ui>6&JaB9p2ay&+iwx!Y+^NY+*gf^T<2y+?RVUixn3+ zIy$daSt}g!VT7WwE#5j&IcE}n@$gl);+xu5%p;XrBK~sRcq|`g&bHSagA^8#K1*%9 zz6$_$_=WjPvOVSjN|hJx?kKn=+7YLx>;CtU>-}HIdE#X~FX9P!HtIB%ErCtI+~QA{ z6F4ZTz!#_{8O=?GB=D!IslhQCr{029XKWms6D0ScdU}VDhcw#}Lr~35J!Chs3u*6- z_abnaUK(Sy%+VH+w&px8=^J7$hIRjKF{R{O9|2`22@xw|A<)KjbfH{of=0 iJbuThKSaCzk!S4xYa0eB#One8{JeP2%lX1PzkdNSMbFa! literal 0 HcmV?d00001 diff --git a/ami-recycle-bin/variables.tf b/ami-recycle-bin/variables.tf new file mode 100644 index 000000000..678e2a83f --- /dev/null +++ b/ami-recycle-bin/variables.tf @@ -0,0 +1,35 @@ +variable "rbin_retention_period_value" { + type = number + default = 30 + description = "The period value for which the retention rule is to retain resources" +} + +variable "rbin_retention_period_unit" { + type = string + default = "DAYS" + description = "The unit of time in which the retention period is measured. Currently, only DAYS is supported" +} + +variable "resource_tag_key" { + type = string + default = "Project" + description = "The tag key" +} + +variable "resource_tag_value" { + type = string + default = "Test-Retention" + description = "The tag value" +} + +variable "cw_retention_period" { + type = number + default = 14 + description = "Specifies the number of days you want to retain log events in the specified log group" +} + +variable "dry_run" { + type = bool + default = true + description = "If set to true, the script will not delete any resources" +} \ No newline at end of file From a70334a3abf482048bc5469031e6c8691c73e915 Mon Sep 17 00:00:00 2001 From: Divya Girase Date: Wed, 11 Sep 2024 15:31:07 +0100 Subject: [PATCH 2/6] Added example-pattern.json --- ami-recycle-bin/example-pattern.json | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 ami-recycle-bin/example-pattern.json diff --git a/ami-recycle-bin/example-pattern.json b/ami-recycle-bin/example-pattern.json new file mode 100644 index 000000000..d7334571b --- /dev/null +++ b/ami-recycle-bin/example-pattern.json @@ -0,0 +1,55 @@ +{ + "title": "Deregister expired AMIs and its snapshot with AWS Lambda and retain them in Amazon EC2 Recycle Bin", + "description": "This project demonstrates a pattern to deregister and retain expired AMI and its snapshot with AWS Lambda and Amazon EC2 Recycle Bin", + "language": "YAML", + "level": "200", + "framework": "Terraform", + "introBox": { + "headline": "How it works", + "text": [ + "In this pattern an Amazon EventBridge triggers AWS Lambda function to deregister AMI, delete the associated EBS snapshot and move them to Recycle Bin for retention. The template creates all the necessary resources including Amazon EventBridge Rule, AWS Lambda function, and Recycle Bin rules for AMI and EBS snapshots retention", + "AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) moving the AMIs and its associated snapshot to Recycle Bin. Recycle Bin is a feature in Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have deregistered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The Lambda function also adds corresponding tags to both, the AMI and the EBS Snapshot before moving them to Recycle Bin for recovery." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/ami-recycle-bin", + "templateURL": "serverless-patterns/ami-recycle-bin", + "projectFolder": "ami-recycle-bin", + "templateFile": "main.tf" + } + }, + "resources": { + "bullets": [ + { + "text": "Recover deleted Amazon EBS snapshots and EBS-backed AMIs with Recycle Bin", + "link": "https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin.html" + } + ] + }, + "deploy": { + "text": [ + "terraform init", + "terraform plan", + "terraform apply" + ] + }, + "testing": { + "text": [ + "See the Github repo for detailed testing instructions." + ] + }, + "cleanup": { + "text": [ + "terraform destroy" + ] + }, + "authors": [ + { + "name": "Divya Vijendra Girase", + "image": "https://avatars.githubusercontent.com/u/172667506?v=4", + "bio": "I am a Cloud Infrastructure Architect at AWS and I work with our strategic customers to build, run and maintain their infrastructure on AWS.", + "linkedin": "divya-girase" + } + ] + } \ No newline at end of file From 5f9fc25cd648f0879d9f2dc189540eb7df228af9 Mon Sep 17 00:00:00 2001 From: Divya Girase Date: Thu, 12 Sep 2024 11:55:44 +0100 Subject: [PATCH 3/6] Updated as per the review feedback --- ami-recycle-bin/README.md | 4 +- ami-recycle-bin/data.tf | 8 +++ ami-recycle-bin/example-pattern.json | 4 +- ami-recycle-bin/main.tf | 88 ++++++++++++++++++---------- ami-recycle-bin/variables.tf | 66 ++++++++++++++++----- 5 files changed, 120 insertions(+), 50 deletions(-) create mode 100644 ami-recycle-bin/data.tf diff --git a/ami-recycle-bin/README.md b/ami-recycle-bin/README.md index 889c55eed..48e56208b 100644 --- a/ami-recycle-bin/README.md +++ b/ami-recycle-bin/README.md @@ -1,3 +1,5 @@ +# AMI de-registration with AWS Lambda and retention in Amazon EC2 Recycle Bin + ## Description In this pattern an Amazon EventBridge trigger AWS Lambda function to deregister AMI, delete the associated snapshot and move them to Recycle Bin for retention. @@ -24,7 +26,7 @@ An AMI to deregister that has the following Tags: | Key | Value | | -------- | ------- | | Expire-After | Date in Zulu format (e.g. 2024-08-30T17:39:00Z) | -| Matching value for resource_tag_key in src/variables.tf | Matching value for resource_tag_value in src/variables.tf | +| Same value as resource_tag_key in src/variables.tf | Same value as resource_tag_value in src/variables.tf | ## Deployment Instructions diff --git a/ami-recycle-bin/data.tf b/ami-recycle-bin/data.tf new file mode 100644 index 000000000..c059c623a --- /dev/null +++ b/ami-recycle-bin/data.tf @@ -0,0 +1,8 @@ +# data source to lookup information about the current AWS partition in which Terraform is working +data "aws_partition" "current" {} + +# data source to get the access to the effective Account ID, User ID, and ARN in which Terraform is authorized +data "aws_caller_identity" "current" {} + +# data source to obtain the name of the AWS region configured on the provider +data "aws_region" "current" {} \ No newline at end of file diff --git a/ami-recycle-bin/example-pattern.json b/ami-recycle-bin/example-pattern.json index d7334571b..cbc4db2d3 100644 --- a/ami-recycle-bin/example-pattern.json +++ b/ami-recycle-bin/example-pattern.json @@ -1,7 +1,7 @@ { - "title": "Deregister expired AMIs and its snapshot with AWS Lambda and retain them in Amazon EC2 Recycle Bin", + "title": "AMI de-registration with AWS Lambda and retention in Amazon EC2 Recycle Bin", "description": "This project demonstrates a pattern to deregister and retain expired AMI and its snapshot with AWS Lambda and Amazon EC2 Recycle Bin", - "language": "YAML", + "language": "", "level": "200", "framework": "Terraform", "introBox": { diff --git a/ami-recycle-bin/main.tf b/ami-recycle-bin/main.tf index eeae097ca..edfa781d0 100644 --- a/ami-recycle-bin/main.tf +++ b/ami-recycle-bin/main.tf @@ -1,20 +1,26 @@ +# Default terraform provider configuration to manage resources in a region of the aws cloud provider +# To provision resources in a different region, update the region variable in variables.tf provider "aws" { - region = "us-west-2" + region = var.region } +# Terraform block to enable hashicorp/aws provider and use the version constraint terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "5.65.0" - } - } + required_providers { + aws = { + source = "hashicorp/aws" + version = "5.65.0" + } + } } resource "aws_cloudwatch_event_rule" "event_rule" { name = "invoke-lambda-daily" - description = "Invoke a Lambda function every day" + description = "Invoke a Lambda function once per day" schedule_expression = "rate(1 day)" + tags = { + "Name" = "invoke-lambda-daily" + } } resource "aws_cloudwatch_event_target" "event_target" { @@ -37,27 +43,30 @@ resource "aws_cloudwatch_log_group" "example" { } resource "aws_lambda_function" "lambda_function" { - filename = "src/ami-recycle-lambda.zip" - function_name = "ami-recycle-lambda" - role = aws_iam_role.lambda_role.arn - handler = "ami-recycle-lambda.lambda_handler" - runtime = "python3.9" - # Add environment variable block here + filename = "src/ami-recycle-lambda.zip" + function_name = var.function_name + description = var.function_description + role = aws_iam_role.lambda_role.arn + handler = "ami-recycle-lambda.lambda_handler" + runtime = var.function_runtime environment { variables = { - "RECYCLE_BIN_TAG_KEY" = var.resource_tag_key - "RECYCLE_BIN_TAG_VALUE" = var.resource_tag_value + "RECYCLE_BIN_TAG_KEY" = var.resource_tag_key + "RECYCLE_BIN_TAG_VALUE" = var.resource_tag_value "RBIN_RETENTION_PERIOD_VALUE" = var.rbin_retention_period_value - "RBIN_RETENTION_PERIOD_UNIT" = var.rbin_retention_period_unit + "RBIN_RETENTION_PERIOD_UNIT" = var.rbin_retention_period_unit } } - timeout = 300 - memory_size = 128 + timeout = var.function_timeout + memory_size = var.memory_size source_code_hash = filebase64sha256("src/ami-recycle-lambda.zip") + tags = { + "Name" = var.function_name + } } resource "aws_iam_role" "lambda_role" { - name = "lambda-role" + name = "ami-recycle-lambda-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ @@ -71,40 +80,55 @@ resource "aws_iam_role" "lambda_role" { }) inline_policy { - name = "lambda-policy" + name = "ami-recycle-lambda-policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ - "logs:CreateLogStream", - "logs:PutLogEvents", "logs:CreateLogGroup" ] - Resource = "arn:aws:logs:*:*:*" + Resource = "arn:aws:logs:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:*" + }, + { + Effect = "Allow" + Action = [ + "logs:CreateLogStream", + "logs:PutLogEvents" + ] + Resource = "arn:aws:logs:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:log-group:/aws/lambda/${var.function_name}:*" }, { Effect = "Allow" Action = [ - "ec2:DescribeImages", - "ec2:TagResource", - "ec2:DeleteSnapshot", - "ec2:DescribeSnapshots", - "ec2:DescribeTags", "ec2:CreateTags", "ec2:DeregisterImage", - "ec2:DeleteSnapshot", + "ec2:DeleteSnapshot" + ] + Resource = [ + "arn:aws:ec2:${data.aws_region.current.name}::image/*", + "arn:aws:ec2:${data.aws_region.current.name}::snapshot/*" + ] + }, + { + Effect = "Allow" + Action = [ + "ec2:DescribeTags", + "ec2:DescribeImages", + "ec2:DescribeSnapshots", "rbin:ListRules" ] - Resource = "*" + Resource = "*" } ] }) } + tags = { + "Name" = "ami-recycle-lambda-role" + } } - resource "aws_rbin_rule" "snapshot_rbin" { description = "Recycle bin rule to retain deleted snapshots" resource_type = "EBS_SNAPSHOT" diff --git a/ami-recycle-bin/variables.tf b/ami-recycle-bin/variables.tf index 678e2a83f..04d359b89 100644 --- a/ami-recycle-bin/variables.tf +++ b/ami-recycle-bin/variables.tf @@ -1,35 +1,71 @@ +variable "region" { + type = string + default = "us-east-2" + description = "AWS region where Terraform will manage the infrastructure" +} + variable "rbin_retention_period_value" { - type = number - default = 30 + type = number + default = 30 description = "The period value for which the retention rule is to retain resources" } variable "rbin_retention_period_unit" { - type = string - default = "DAYS" + type = string + default = "DAYS" description = "The unit of time in which the retention period is measured. Currently, only DAYS is supported" } variable "resource_tag_key" { - type = string - default = "Project" - description = "The tag key" + type = string + default = "Project" + description = "The tag key" } variable "resource_tag_value" { - type = string - default = "Test-Retention" - description = "The tag value" + type = string + default = "Test-Retention" + description = "The tag value" } variable "cw_retention_period" { - type = number - default = 14 - description = "Specifies the number of days you want to retain log events in the specified log group" + type = number + default = 14 + description = "Specifies the number of days you want to retain log events in the specified log group" +} + +variable "function_name" { + type = string + default = "ami-recycle-lambda" + description = "A unique name for your Lambda Function" +} + +variable "function_description" { + type = string + default = "function to automate the expiration of AMI and moving its associated snapshot to Recycle Bin" + description = "Description of what your Lambda Function does" +} + +variable "function_runtime" { + type = string + default = "python3.12" + description = "Identifier of the function's runtime" +} + +variable "function_timeout" { + type = number + default = 15 + description = "The amount of time your Lambda Function has to run in seconds" +} + +variable "memory_size" { + type = number + default = 128 + description = "Amount of memory in MB your Lambda Function can use at runtime" } variable "dry_run" { - type = bool - default = true + type = bool + default = true description = "If set to true, the script will not delete any resources" } \ No newline at end of file From 94014c818d7a858a4cf99cdebad73cb8825a97c5 Mon Sep 17 00:00:00 2001 From: Divya Girase Date: Thu, 12 Sep 2024 12:18:42 +0100 Subject: [PATCH 4/6] Updated README.md and example-pattern.json as per the review comments --- ami-recycle-bin/README.md | 4 ++-- ami-recycle-bin/example-pattern.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ami-recycle-bin/README.md b/ami-recycle-bin/README.md index 48e56208b..6c3505a71 100644 --- a/ami-recycle-bin/README.md +++ b/ami-recycle-bin/README.md @@ -2,11 +2,11 @@ ## Description -In this pattern an Amazon EventBridge trigger AWS Lambda function to deregister AMI, delete the associated snapshot and move them to Recycle Bin for retention. +In this pattern an Amazon EventBridge rule triggers an AWS Lambda function which deregisters an Amazon Machine Image (AMI), deletes the associated snapshot and moves them to the Recycle Bin for retention. The template creates all the necessary resources including an Amazon EventBridge Rule that triggers the AWS Lambda function once every day. Additionally, Recycle Bin rules for AMI and EBS Snapshots are created to retain deleted resources matching the resources for a retention period. -AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) moving the AMIs and its associated snapshot to Recycle Bin af. The Recycle Bin is a feature in Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have deregistered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The lambda function also adds corresponding tags to both, the AMI and the EBS Snapshot before moving them to Recyle Bin for recovery. +The AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) by moving the AMIs and their associated snapshots to Recycle Bin. Recycle Bin is a feature of Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have de-registered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The Lambda function also adds corresponding tags to both, the AMI and the EBS snapshot, before moving them to Recycle Bin. Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/ami-recycle-bin diff --git a/ami-recycle-bin/example-pattern.json b/ami-recycle-bin/example-pattern.json index cbc4db2d3..6e08b07c1 100644 --- a/ami-recycle-bin/example-pattern.json +++ b/ami-recycle-bin/example-pattern.json @@ -7,8 +7,8 @@ "introBox": { "headline": "How it works", "text": [ - "In this pattern an Amazon EventBridge triggers AWS Lambda function to deregister AMI, delete the associated EBS snapshot and move them to Recycle Bin for retention. The template creates all the necessary resources including Amazon EventBridge Rule, AWS Lambda function, and Recycle Bin rules for AMI and EBS snapshots retention", - "AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) moving the AMIs and its associated snapshot to Recycle Bin. Recycle Bin is a feature in Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have deregistered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The Lambda function also adds corresponding tags to both, the AMI and the EBS Snapshot before moving them to Recycle Bin for recovery." + "In this pattern an Amazon EventBridge rule triggers an AWS Lambda function which deregisters an Amazon Machine Image (AMI), deletes the associated snapshot and moves them to the Recycle Bin for retention.", + "The AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) by moving the AMIs and their associated snapshots to Recycle Bin. Recycle Bin is a feature of Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have de-registered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The Lambda function also adds corresponding tags to both, the AMI and the EBS snapshot, before moving them to Recycle Bin." ] }, "gitHub": { From 7dd137f3ec0ba43f73cce0da32124140373f0f3e Mon Sep 17 00:00:00 2001 From: Divya Girase Date: Fri, 27 Sep 2024 15:01:52 +0100 Subject: [PATCH 5/6] Added source code for ami deregistration --- ami-recycle-bin/src/ami-recycle-lambda.py | 135 ++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 ami-recycle-bin/src/ami-recycle-lambda.py diff --git a/ami-recycle-bin/src/ami-recycle-lambda.py b/ami-recycle-bin/src/ami-recycle-lambda.py new file mode 100644 index 000000000..762c64f9b --- /dev/null +++ b/ami-recycle-bin/src/ami-recycle-lambda.py @@ -0,0 +1,135 @@ +import logging +import os +import json +import boto3 +from datetime import datetime + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +# Create required clients +ec2_client = boto3.client("ec2") +rbin_client = boto3.client("rbin") + +resource_tag_key = os.getenv("RECYCLE_BIN_TAG_KEY", "Project") +resource_tag_value = os.getenv("RECYCLE_BIN_TAG_VALUE", "Test-Retention") + +# Create required tags for the resources +def manage_tags(imageid, snapshotid): + # Add snapshot id to the image + ec2_tag_response = ec2_client.create_tags( + Resources=[imageid], + Tags=[ + {"Key": "SnapshotId", "Value": snapshotid}, + ], + ) + + # Before deleting the snapshot verify that the snapshot has the tags matching the recycle bin rule + # AMIs are already filtered by the required tag name + # Add image id to the snapshot + snapshots = ec2_client.describe_tags( + Filters=[ + {"Name": "resource-id", "Values": [snapshotid]}, + {"Name": "tag:" + resource_tag_key, "Values": [resource_tag_value]}, + {"Name": "resource-type", "Values": ["snapshot"]}, + ] + ) + + snapshot_tags = [{"Key": "ImageId", "Value": imageid}] + # If the response list is empty, add required tags to the snapshot + if not snapshots["Tags"]: + snapshot_name_tag = {"Key": resource_tag_key, "Value": resource_tag_value} + snapshot_tags.append(snapshot_name_tag) + + # Add image id to the snapshot + snapshot_tag_response = ec2_client.create_tags(Resources=[snapshotid], Tags=snapshot_tags) + return ec2_tag_response, snapshot_tag_response + + + +# Deregister the obsolete AMIs and delete the associated snapshots +def deregister_amis(obsolete_amis): + logger.info(f"AMIs to deregister {obsolete_amis}") + for item in obsolete_amis: + ec2_tag_response, snapshot_tag_response = manage_tags(item["ImageId"], item["SnapshotId"]) + # Proceed with deregistration only if the tags are added to the resources + if ( + ec2_tag_response["ResponseMetadata"]["HTTPStatusCode"] + == snapshot_tag_response["ResponseMetadata"]["HTTPStatusCode"] + == 200 + ): + logger.info(f"Successfully added tags to {item['ImageId']} and {item['SnapshotId']}") + logger.info("Deregistering Image and deleting associated snapshot") + ec2_client.deregister_image(ImageId=item["ImageId"]) + ec2_client.delete_snapshot(SnapshotId=item["SnapshotId"]) + else: + logger.info("Failed to add tags to the resources. Cannot proceed with AMI cleanup") + + +# Verify the required recycle bin rules are present +def list_recycle_bin_rules(resource_type): + rbin_rule_present = False + resource_tags = [{"ResourceTagKey": resource_tag_key, "ResourceTagValue": resource_tag_value}] + rbin_rules = rbin_client.list_rules(ResourceType=resource_type, ResourceTags=resource_tags) + if rbin_rules["Rules"]: + rbin_rule_present = True + return rbin_rule_present + + +def lambda_handler(event, context): + try: + logger.info("Verifying the recycle bin rules") + ebs_rule_exists = list_recycle_bin_rules("EBS_SNAPSHOT") + ami_rule_exists = list_recycle_bin_rules("EC2_IMAGE") + + if not ebs_rule_exists or not ami_rule_exists: + logger.info("One or more required recycle bin rules does not exists. Cannot proceed with AMI cleanup") + return + + logger.info("Recycle bin rules present. Starting AMI cleanup") + + # Filter AMIs having the 'Expire-After' tag and 'Name' tag matching the recycle bin rule + # The Expire-After tag can be added to the AMI during the vending process as per the lifecycle rule to retain AMI + response = ec2_client.describe_images( + Owners=["self"], + Filters=[ + {"Name": "tag-key", "Values": ["Expire-After"]}, + {"Name": "tag:" + resource_tag_key, "Values": [resource_tag_value]}, + ], + ) + + # Get today's date in Zulu format + zulu_format = "%Y-%m-%dT%H:%M:%SZ" + today = datetime.strptime((datetime.now()).strftime(zulu_format), (zulu_format)) + + if len(response["Images"]) == 0: + logger.info("No AMIs found for cleanup. Exiting...") + + obsolete_amis = [] + for item in response["Images"]: + ami_expiry = None + if "Tags" in item: + for tag in item["Tags"]: + if tag["Key"] == "Expire-After": + ami_expiry = datetime.strptime((tag["Value"]), zulu_format) + ami_expiration_in_days = (today - ami_expiry).days + break + + if ami_expiry and ami_expiration_in_days >= 0: + deregister_object = { + "ImageId": item["ImageId"], + "SnapshotId": item["BlockDeviceMappings"][0]["Ebs"]["SnapshotId"], + } + obsolete_amis.append(deregister_object) + + if len(obsolete_amis) > 0: + deregister_amis(obsolete_amis) + + except Exception as e: + logger.info(e) + + + + + + From 3bdfa25ebfd5131dd28131ee7d241b176969a383 Mon Sep 17 00:00:00 2001 From: Ben <9841563+bfreiberg@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:36:28 +0200 Subject: [PATCH 6/6] Add final pattern file --- ami-recycle-bin/ami-recycle-bin.json | 85 ++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 ami-recycle-bin/ami-recycle-bin.json diff --git a/ami-recycle-bin/ami-recycle-bin.json b/ami-recycle-bin/ami-recycle-bin.json new file mode 100644 index 000000000..b69f89174 --- /dev/null +++ b/ami-recycle-bin/ami-recycle-bin.json @@ -0,0 +1,85 @@ +{ + "title": "AMI de-registration with AWS Lambda and retention in Amazon EC2 Recycle Bin", + "description": "This project demonstrates a pattern to deregister and retain expired AMI and its snapshot with AWS Lambda and Amazon EC2 Recycle Bin", + "language": "", + "level": "200", + "framework": "Terraform", + "introBox": { + "headline": "How it works", + "text": [ + "In this pattern an Amazon EventBridge rule triggers an AWS Lambda function which deregisters an Amazon Machine Image (AMI), deletes the associated snapshot and moves them to the Recycle Bin for retention.", + "The AWS Lambda function automates the expiration of Amazon Machine Images (AMIs) by moving the AMIs and their associated snapshots to Recycle Bin. Recycle Bin is a feature of Amazon Elastic Compute Cloud (EC2) that allows you to retain AMIs that you have de-registered for a specified retention period, providing an opportunity to recover them if needed. To recover the deleted AMI, its associated snapshot should be recovered first. The Lambda function also adds corresponding tags to both, the AMI and the EBS snapshot, before moving them to Recycle Bin." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/ami-recycle-bin", + "templateURL": "serverless-patterns/ami-recycle-bin", + "projectFolder": "ami-recycle-bin", + "templateFile": "main.tf" + } + }, + "resources": { + "bullets": [ + { + "text": "Recover deleted Amazon EBS snapshots and EBS-backed AMIs with Recycle Bin", + "link": "https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin.html" + } + ] + }, + "deploy": { + "text": [ + "terraform init", + "terraform plan", + "terraform apply" + ] + }, + "testing": { + "text": [ + "See the Github repo for detailed testing instructions." + ] + }, + "cleanup": { + "text": [ + "terraform destroy" + ] + }, + "authors": [ + { + "name": "Divya Vijendra Girase", + "image": "https://avatars.githubusercontent.com/u/172667506?v=4", + "bio": "I am a Cloud Infrastructure Architect at AWS and I work with our strategic customers to build, run and maintain their infrastructure on AWS.", + "linkedin": "divya-girase" + } + ], + "patternArch": { + "icon1": { + "x": 20, + "y": 50, + "service": "eventbridge", + "label": "Amazon EventBridge rule" + }, + "icon2": { + "x": 50, + "y": 50, + "service": "lambda", + "label": "AWS Lambda" + }, + "icon3": { + "x": 80, + "y": 50, + "service": "ec2", + "label": "Amazon EC2" + }, + "line1": { + "from": "icon1", + "to": "icon2", + "label": "" + }, + "line2": { + "from": "icon2", + "to": "icon3", + "label": "" + } + } +}