
Nahuel NuceraIf you've used AWS Step Functions, you know the aws-sdk:* integration pattern: { "Type":...
If you've used AWS Step Functions, you know the aws-sdk:* integration pattern:
{
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:dynamodb:PutItem",
"Parameters": {
"TableName": "my-table",
"Item": { "pk": { "S.$": "$.id" } }
}
}
One line in your state machine, and Step Functions calls DynamoDB directly. No Lambda wrapper needed. AWS recommends this for all new workflows.
The problem? Every local AWS emulator hardcodes service integrations. Want SQS? There's a handler. Want SNS? Another handler. Want SecretsManager? Sorry, not implemented yet.
We added a generic aws-sdk:* task dispatcher to MiniStack. Instead of writing a handler for each service, it routes to whatever service is already emulated:
arn:aws:states:::aws-sdk:secretsmanager:CreateSecret → SecretsManager handler
arn:aws:states:::aws-sdk:dynamodb:PutItem → DynamoDB handler
arn:aws:states:::aws-sdk:ecs:RunTask → ECS handler
arn:aws:states:::aws-sdk:kms:Encrypt → KMS handler
38 services. All callable from Step Functions. No new code needed per service.
The dispatcher:
For JSON-protocol services (DynamoDB, SecretsManager, ECS, KMS, CloudWatch Logs, SSM, EventBridge, Kinesis, Glue, Athena, ECR), it works today. Query and REST protocol services are coming.
docker run -p 4566:4566 nahuelnucera/ministack
Then run your Step Functions workflow locally:
import boto3
sfn = boto3.client("stepfunctions",
endpoint_url="http://localhost:4566",
region_name="us-east-1",
aws_access_key_id="test",
aws_secret_access_key="test")
# Your workflow can now call any of the 38 services
sfn.create_state_machine(
name="my-workflow",
definition='...your ASL with aws-sdk integrations...',
roleArn="arn:aws:iam::000000000000:role/role",
)
MIT licensed. Free forever. github.com/Nahuel990/ministack