NEW: Module for scheduling run command using ssm
This commit is contained in:
parent
db3703ec4c
commit
fdc22c6179
@ -0,0 +1,44 @@
|
|||||||
|
<!-- This readme file is generated with terraform-docs -->
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
| Name | Version |
|
||||||
|
|------|---------|
|
||||||
|
| terraform | >= 1.3.0 |
|
||||||
|
| aws | >= 5.0 |
|
||||||
|
|
||||||
|
## Providers
|
||||||
|
|
||||||
|
| Name | Version |
|
||||||
|
|------|---------|
|
||||||
|
| aws | >= 5.0 |
|
||||||
|
|
||||||
|
## Modules
|
||||||
|
|
||||||
|
No modules.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
| Name | Type |
|
||||||
|
|------|------|
|
||||||
|
| [aws_cloudwatch_log_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_log_group) | resource |
|
||||||
|
| [aws_ssm_maintenance_window.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_maintenance_window) | resource |
|
||||||
|
| [aws_ssm_maintenance_window_target.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_maintenance_window_target) | resource |
|
||||||
|
| [aws_ssm_maintenance_window_task.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssm_maintenance_window_task) | resource |
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
| Name | Description | Type | Default | Required |
|
||||||
|
|------|-------------|------|---------|:--------:|
|
||||||
|
| cron-expression | Cron expression for SSM maintenance window schedule | `string` | n/a | yes |
|
||||||
|
| description | Description of command to run | `string` | n/a | yes |
|
||||||
|
| instance-id | Id of Ec2 instance to execute the script | `string` | n/a | yes |
|
||||||
|
| schedule-name | Name of maintenance window. e.g. Daily0900UTC8 | `string` | n/a | yes |
|
||||||
|
| shell-script-path | Full path to script | `string` | n/a | yes |
|
||||||
|
|
||||||
|
## Outputs
|
||||||
|
|
||||||
|
No outputs.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Authorship
|
||||||
|
This module was developed by xpk.
|
@ -0,0 +1,80 @@
|
|||||||
|
# SSM run command
|
||||||
|
#resource "aws_ssm_document" "this" {
|
||||||
|
# name = replace(title(var.description), " ", "")
|
||||||
|
# document_type = "Command"
|
||||||
|
# target_type = "/AWS::EC2::Instance"
|
||||||
|
# content = jsonencode(
|
||||||
|
# {
|
||||||
|
# "schemaVersion" : "2.2",
|
||||||
|
# "description" : "Run script for ${var.description}",
|
||||||
|
# "parameters" : {
|
||||||
|
# },
|
||||||
|
# "mainSteps" : [
|
||||||
|
# {
|
||||||
|
# "action" : "aws:runShellScript",
|
||||||
|
# "name" : "RunShellScript",
|
||||||
|
# "inputs" : {
|
||||||
|
# "runCommand" : var.shell-script-path
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# )
|
||||||
|
#}
|
||||||
|
|
||||||
|
resource "aws_ssm_maintenance_window" "this" {
|
||||||
|
name = replace(title(var.description), " ", "")
|
||||||
|
description = var.description
|
||||||
|
schedule = var.cron-expression
|
||||||
|
duration = 2
|
||||||
|
cutoff = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_ssm_maintenance_window_target" "this" {
|
||||||
|
window_id = aws_ssm_maintenance_window.this.id
|
||||||
|
name = replace(title(var.description), " ", "")
|
||||||
|
description = var.description
|
||||||
|
resource_type = "INSTANCE"
|
||||||
|
|
||||||
|
targets {
|
||||||
|
key = "InstanceIds"
|
||||||
|
values = [var.instance-id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_ssm_maintenance_window_task" "this" {
|
||||||
|
name = replace(title(var.description), " ", "")
|
||||||
|
max_concurrency = 1
|
||||||
|
max_errors = 1
|
||||||
|
priority = 1
|
||||||
|
task_arn = "AWS-RunShellScript"
|
||||||
|
task_type = "RUN_COMMAND"
|
||||||
|
window_id = aws_ssm_maintenance_window.this.id
|
||||||
|
|
||||||
|
targets {
|
||||||
|
key = "InstanceIds"
|
||||||
|
values = [var.instance-id]
|
||||||
|
}
|
||||||
|
|
||||||
|
task_invocation_parameters {
|
||||||
|
run_command_parameters {
|
||||||
|
timeout_seconds = 600
|
||||||
|
|
||||||
|
cloudwatch_config {
|
||||||
|
cloudwatch_log_group_name = aws_cloudwatch_log_group.this.name
|
||||||
|
cloudwatch_output_enabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
parameter {
|
||||||
|
name = "commands"
|
||||||
|
values = [var.shell-script-path]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_cloudwatch_log_group" "this" {
|
||||||
|
name = "/aws/ssm-maintenance/${replace(title(var.description), " ", "")}"
|
||||||
|
retention_in_days = 30
|
||||||
|
log_group_class = "STANDARD" # infrequent access logs can only be viewed via insight
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
variable shell-script-path {
|
||||||
|
type = string
|
||||||
|
description = "Full path to script"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable cron-expression {
|
||||||
|
type = string
|
||||||
|
description = "Cron expression for SSM maintenance window schedule"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable instance-id {
|
||||||
|
type = string
|
||||||
|
description = "Id of Ec2 instance to execute the script"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable description {
|
||||||
|
type = string
|
||||||
|
description = "Description of command to run"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable schedule-name {
|
||||||
|
type = string
|
||||||
|
description = "Name of maintenance window. e.g. Daily0900UTC8"
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
terraform {
|
||||||
|
required_version = ">= 1.3.0"
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = ">= 5.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user