1
0

feat: new stepfunction example

This commit is contained in:
xpk
2026-02-20 15:36:45 +08:00
parent 66ab8555d7
commit 7f88a863ea
6 changed files with 163 additions and 1 deletions
@@ -0,0 +1,44 @@
module "sfn" {
source = "terraform-aws-modules/step-functions/aws"
version = "5.1.0"
name = "example"
type = "standard"
definition = file("${path.module}/reboot-asg-instances.json")
publish = true
role_arn = module.sfn-role.role-arn
use_existing_role = true
}
module "sfn-role" {
source = "../../../modules/security_identity_compliance/iam-role-v2"
role-name = "example-sfn-role"
path = "/Sfn/"
description = "Role for example step function"
trusted-entity = "states.amazonaws.com"
policies = {
example-sfn-policy = {
description = "XrayAccess"
policy = jsonencode(
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets"
],
"Resource" : [
"*"
]
}
]
}
)
}
}
}
@@ -0,0 +1,60 @@
provider "aws" {
region = var.aws-region
# localstack config
access_key = "test"
secret_key = "test"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
# localstack endpoints https://docs.localstack.cloud/aws/integrations/infrastructure-as-code/terraform/#:~:text=tflocal%20is%20a%20small%20wrapper,unmodified%20Terraform%20scripts%20against%20LocalStack.
endpoints {
apigateway = "http://192.168.86.96:4566"
apigatewayv2 = "http://192.168.86.96:4566"
cloudformation = "http://192.168.86.96:4566"
cloudwatch = "http://192.168.86.96:4566"
dynamodb = "http://192.168.86.96:4566"
ec2 = "http://192.168.86.96:4566"
es = "http://192.168.86.96:4566"
elasticache = "http://192.168.86.96:4566"
firehose = "http://192.168.86.96:4566"
iam = "http://192.168.86.96:4566"
kinesis = "http://192.168.86.96:4566"
kms = "http://192.168.86.96:4566"
lambda = "http://192.168.86.96:4566"
rds = "http://192.168.86.96:4566"
redshift = "http://192.168.86.96:4566"
route53 = "http://192.168.86.96:4566"
s3 = "http://192.168.86.96:4566"
secretsmanager = "http://192.168.86.96:4566"
ses = "http://192.168.86.96:4566"
sns = "http://192.168.86.96:4566"
sqs = "http://192.168.86.96:4566"
ssm = "http://192.168.86.96:4566"
stepfunctions = "http://192.168.86.96:4566"
sts = "http://192.168.86.96:4566"
}
default_tags {
tags = {
Environment = var.environment
Project = var.project
Application = var.application
LocalStack = true
TerraformDir = join("/", reverse(slice(reverse(split("/", path.cwd)), 0, 2)))
}
}
}
terraform {
required_version = ">= 1.11.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
}
# data aws_caller_identity current {}
@@ -0,0 +1,50 @@
{
"Comment": "Suspend ASG and reboot instances in the group",
"StartAt": "SetVariables",
"States": {
"SetVariables": {
"Type": "Pass",
"Result": {
"asgName": "acme-dev-web-asg"
},
"ResultPath": "$.vars",
"Next": "SuspendProcesses"
},
"SuspendProcesses": {
"Type": "Task",
"Parameters": {
"AutoScalingGroupName.$": "$.vars.asgName"
},
"Resource": "arn:aws:states:::aws-sdk:autoscaling:suspendProcesses",
"ResultPath": "$.suspendResult",
"Next": "DescribeAutoScalingGroups"
},
"DescribeAutoScalingGroups": {
"Type": "Task",
"Parameters": {
"AutoScalingGroupNames.$": "States.Array($.vars.asgName)",
"MaxRecords": 1
},
"Resource": "arn:aws:states:::aws-sdk:autoscaling:describeAutoScalingGroups",
"Next": "RebootInstances",
"ResultPath": "$.asgData"
},
"RebootInstances": {
"Type": "Task",
"Parameters": {
"InstanceIds.$": "$.asgData.AutoScalingGroups[0].Instances[*].InstanceId"
},
"Resource": "arn:aws:states:::aws-sdk:ec2:rebootInstances",
"ResultPath": "$.rebootResult",
"Next": "ResumeProcesses"
},
"ResumeProcesses": {
"Type": "Task",
"Parameters": {
"AutoScalingGroupName.$": "$.vars.asgName"
},
"Resource": "arn:aws:states:::aws-sdk:autoscaling:resumeProcesses",
"End": true
}
}
}
@@ -0,0 +1,4 @@
application = "localstack"
environment = "locallab"
project = "iac"
aws-region = "us-east-1"
@@ -0,0 +1,4 @@
variable "aws-region" {}
variable "environment" {}
variable "project" {}
variable "application" {}
+1 -1
View File
@@ -15,7 +15,7 @@ or use community edition while it is still available
docker run \ docker run \
-e AWS_ACCESS_KEY_ID=test \ -e AWS_ACCESS_KEY_ID=test \
-e AWS_SECRET_ACCESS_KEY=test \ -e AWS_SECRET_ACCESS_KEY=test \
-e SERVICES="s3,iam,lambda,dynamodb,cloudwatch,rds,ec2,secretsmanager" \ -e SERVICES="s3,iam,lambda,dynamodb,cloudwatch,rds,ec2,secretsmanager,stepfunctions" \
-e DEBUG=0 \ -e DEBUG=0 \
-d --rm --name localstack --network macvlan localstack/localstack localstack -d --rm --name localstack --network macvlan localstack/localstack localstack
``` ```