From 89e78ef5e6cf53f228c9d9ba2ea56eee05b7e2d4 Mon Sep 17 00:00:00 2001 From: Julian Wood Date: Fri, 15 Nov 2024 12:47:25 +0000 Subject: [PATCH] patterns edits --- ami-recycle-bin/ami-recycle-bin.json | 85 ---------------- .../apigw-lambda-s3-terraform-java.json | 91 ----------------- .../images/profile-pic.jpg | Bin 29058 -> 0 bytes .../eventbridge-bedrock-s3-aoss.json | 92 ----------------- ...tbridge-pipes-ddbstream-sfn-terraform.json | 84 ---------------- ...ntbridge-schedule-secret-rotation-cdk.json | 94 ------------------ .../example-pattern.json | 4 +- .../example-pattern.json | 4 +- .../private-apigw-cross-region.json | 93 ----------------- ...-fargate-cdk.json => example-pattern.json} | 32 +----- .../example-pattern.json | 31 +++--- 11 files changed, 20 insertions(+), 590 deletions(-) delete mode 100644 ami-recycle-bin/ami-recycle-bin.json delete mode 100644 apigw-lambda-s3-terraform-java/apigw-lambda-s3-terraform-java.json delete mode 100644 apigw-lambda-s3-terraform-java/images/profile-pic.jpg delete mode 100644 eventbridge-bedrock-s3-aoss/eventbridge-bedrock-s3-aoss.json delete mode 100644 eventbridge-pipes-ddbstream-sfn-terraform/eventbridge-pipes-ddbstream-sfn-terraform.json delete mode 100644 eventbridge-schedule-secret-rotation-cdk/eventbridge-schedule-secret-rotation-cdk.json delete mode 100644 private-apigw-cross-region/private-apigw-cross-region.json rename s3-eventbridge-fargate-cdk/{s3-eventbirdge-fargate-cdk.json => example-pattern.json} (76%) diff --git a/ami-recycle-bin/ami-recycle-bin.json b/ami-recycle-bin/ami-recycle-bin.json deleted file mode 100644 index b69f89174..000000000 --- a/ami-recycle-bin/ami-recycle-bin.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "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": "" - } - } -} diff --git a/apigw-lambda-s3-terraform-java/apigw-lambda-s3-terraform-java.json b/apigw-lambda-s3-terraform-java/apigw-lambda-s3-terraform-java.json deleted file mode 100644 index a7309a9a6..000000000 --- a/apigw-lambda-s3-terraform-java/apigw-lambda-s3-terraform-java.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "title": "Upload file to Amazon S3 bucket using presigned URL", - "description": "Amazon API Gateway with AWS Lambda integration to showcase how to upload a file up to 5GB to Amazon S3 bucket using a presigned S3 URL.", - "language": "Java", - "level": "200", - "framework": "Terraform", - "introBox": { - "headline": "How it works", - "text": [ - "Amazon API Gateway receives the HTTP POST request containing the file name to be uploaded", - "AWS Lambda is triggered by the API Gateway, this java based function generates Amazon S3 presigned URL.", - "A Java program is used to upload a file to the Amazon S3 bucket using the presigned URL" - ] - }, - "gitHub": { - "template": { - "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/apigw-lambda-s3-terraform-java", - "templateURL": "serverless-patterns/apigw-lambda-s3-terraform-java", - "projectFolder": "apigw-lambda-s3-terraform-java", - "templateFile": "main.tf" - } - }, - "resources": { - "bullets": [ - { - "text": "Create a presigned URL for Amazon S3 using an AWS SDK", - "link": "https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_Scenario_PresignedUrl_section.html" - }, - { - "text": "Uploading objects with presigned URLs", - "link": "https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html" - } - ] - }, - "deploy": { - "text": [ - "mvn clean package", - "terraform init", - "terraform apply" - ] - }, - "testing": { - "text": [ - "See the GitHub repo for detailed testing instructions." - ] - }, - "cleanup": { - "text": [ - "Delete the Amazon S3 bucket content: aws s3 rm s3://{MyS3BucketName} --recursive", - "Delete the stack: terraform destroy." - ] - }, - "authors": [ - { - "name": "Jing Xiang Peh", - "image": "images/profile-pic.jpg", - "bio": "I am a Specialist Solutions Architect for Serveless based in Singapore", - "linkedin": "jing-xiang-peh" - } - ], - "patternArch": { - "icon1": { - "x": 20, - "y": 50, - "service": "apigw", - "label": "Amazon API Gateway" - }, - "icon2": { - "x": 50, - "y": 50, - "service": "lambda", - "label": "AWS Lambda" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "s3", - "label": "Amazon S3 Bucket" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "" - }, - "line2": { - "from": "icon2", - "to": "icon3", - "label": "" - } - } -} diff --git a/apigw-lambda-s3-terraform-java/images/profile-pic.jpg b/apigw-lambda-s3-terraform-java/images/profile-pic.jpg deleted file mode 100644 index 89bf670e9ecb49fb564e616e57355818368bf7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29058 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 diff --git a/eventbridge-bedrock-s3-aoss/eventbridge-bedrock-s3-aoss.json b/eventbridge-bedrock-s3-aoss/eventbridge-bedrock-s3-aoss.json deleted file mode 100644 index 2d51cfcbe..000000000 --- a/eventbridge-bedrock-s3-aoss/eventbridge-bedrock-s3-aoss.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "title": "Automatic sync of Amazon Bedrock Knowledge Base using EventBridge Scheduler", - "description": "Use Amazon EventBridge Scheduler to trigger an Ingestion Job periodically to keep the Knowledge Bases vector store up-to-date", - "language": "Python", - "level": "200", - "framework": "CDK", - "introBox": { - "headline": "How it works", - "text": [ - "This sample project demonstrates how to use an EventBridge rule to periodically sync a Bedrock Knowledge Base data source to Amazon OpenSearch Serverless.", - "The sample project uses an EventBridge Scheduler that runs on a regular interval. The scheduler has a universal target configured to trigger the StartIngestionJob API on Amazon Bedrock Agent service. The StartIngestionJob runs a job to sync the data source to the Knowledge Base" - ] - }, - "gitHub": { - "template": { - "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/eventbridge-bedrock-s3-aoss", - "templateURL": "serverless-patterns/eventbridge-bedrock-s3-aoss", - "projectFolder": "eventbridge-bedrock-s3-aoss", - "templateFile": "app.py" - } - }, - "resources": { - "bullets": [ - { - "text": "Sync to ingest your data sources into the knowledge base", - "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ingest.html" - }, - { - "text": "Knowledge bases for Amazon Bedrock", - "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html" - }, - { - "text": "What is Amazon EventBridge Scheduler?", - "link": "https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html" - } - ] - }, - "deploy": { - "text": [ - "cdk deploy --all" - ] - }, - "testing": { - "text": [ - "See the GitHub repo for detailed testing instructions." - ] - }, - "cleanup": { - "text": [ - "Delete the stack: cdk destroy." - ] - }, - "authors": [ - { - "name": "Raja Vaidyanathan", - "image": "https://avatars.githubusercontent.com/u/125882914?v=4", - "bio": "Solutions Architect @ AWS", - "linkedin": "rajav", - "twitter": "rajav" - } - ], - "patternArch": { - "icon1": { - "x": 20, - "y": 50, - "service": "eventbridge-scheduler", - "label": "Amazon EventBridge Scheduler" - }, - "icon2": { - "x": 50, - "y": 50, - "service": "bedrock", - "label": "Amazon Bedrock" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "opensearch", - "label": "Amazon OpenSearch" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "Ingestion job" - }, - "line2": { - "from": "icon2", - "to": "icon3", - "label": "vectors" - } - } -} diff --git a/eventbridge-pipes-ddbstream-sfn-terraform/eventbridge-pipes-ddbstream-sfn-terraform.json b/eventbridge-pipes-ddbstream-sfn-terraform/eventbridge-pipes-ddbstream-sfn-terraform.json deleted file mode 100644 index a494c3ec5..000000000 --- a/eventbridge-pipes-ddbstream-sfn-terraform/eventbridge-pipes-ddbstream-sfn-terraform.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "title": "Amazon DynamoDB Stream to AWS Step Functions", - "description": "Invoke AWS Step Functions workflow from a Amazon DynamoDB stream message", - "language": "YAML", - "level": "200", - "framework": "Terraform", - "introBox": { - "headline": "Invoke a Step Functions workflow from a DynamoDB stream", - "text": [ - "This sample project demonstrates how to invoke an AWS Step Functions state machine directly from a DynamoDB Stream using Amazon EventBridge Pipes.", - "This pattern deploys one Step Function, one DynamoDB with stream enabled, and one Amazon EventBridge Pipe." - ] - }, - "gitHub": { - "template": { - "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/eventbridge-pipes-ddbstream-sfn-terraform", - "templateURL": "serverless-patterns/eventbridge-pipes-ddbstream-sfn-terraform", - "projectFolder": "eventbridge-pipes-ddbstream-sfn-terraform", - "templateFile": "main.tf" - } - }, - "resources": { - "bullets": [ - { - "text": "Amazon EventBridge Pipes - connects sources to targets.", - "link": "https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html" - } - ] - }, - "deploy": { - "text": [ - "terraform init", - "terraform apply" - ] - }, - "testing": { - "text": [ - "See the GitHub repo for detailed testing instructions." - ] - }, - "cleanup": { - "text": [ - "terraform destroy" - ] - }, - "authors": [ - { - "name": "Oriol Matavacas", - "image": "https://togithub.s3.eu-west-1.amazonaws.com/Oriol.jpg", - "bio": "Oriol Matavacas is a Sr. Solutions Architect at AWS based in Barcelona. Oriol primarily supporting customers on the journey to the Cloud. He enjoys building new solutions with scalability, availability and easy to maintain by using serverless.", - "linkedin": "oriol-matavacas-rodriguez-b165868a", - "twitter": "" - } - ], - "patternArch": { - "icon1": { - "x": 20, - "y": 50, - "service": "dynamodb", - "label": "Amazon DynamoDB" - }, - "icon2": { - "x": 50, - "y": 50, - "service": "eventbridge-pipes", - "label": "Amazon EventBridge Pipes" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "sfn", - "label": "AWS Step Functions" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "Stream" - }, - "line2": { - "from": "icon2", - "to": "icon3" - } - } -} diff --git a/eventbridge-schedule-secret-rotation-cdk/eventbridge-schedule-secret-rotation-cdk.json b/eventbridge-schedule-secret-rotation-cdk/eventbridge-schedule-secret-rotation-cdk.json deleted file mode 100644 index 59726f7d7..000000000 --- a/eventbridge-schedule-secret-rotation-cdk/eventbridge-schedule-secret-rotation-cdk.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "title": "Secret rotation using Amazon EventBridge Scheduler and AWS Lambda", - "description": "Secret rotation in AMS Secrets Manager using Amazon EventBridge Scheduler and AWS Lambda", - "language": "Python", - "level": "200", - "framework": "CDK", - "introBox": { - "headline": "How it works", - "text": [ - "This sample project demonstrates rotating secrets in AWS Secrests Manager using Amazon EventBridge Scheduler and AWS Lambda at desired intervals for several use cases. e.g. rotating OAtuth tokens with limited lifespan.", - "An EventBridge schedule is created based on the 'Secret rotation schedule' CDK parameter with rotation Lambda as the target which does the job", - "You could provide the interval at which you want the secret to be rotated as a cron or rate expression." - ] - }, - "gitHub": { - "template": { - "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/eventbridge-schedule-secret-rotation-cdk", - "templateURL": "serverless-patterns/eventbridge-schedule-secret-rotation-cdk", - "projectFolder": "eventbridge-schedule-secret-rotation-cdk", - "templateFile": "cdk/eventbridge_schedule_secret_rotation_stack.py" - } - }, - "deploy": { - "text": [ - "cdk deploy" - ] - }, - "testing": { - "text": [ - "See the GitHub repo for detailed testing instructions." - ] - }, - "cleanup": { - "text": [ - "Delete the stack: cdk destroy." - ] - }, - "authors": [ - { - "name": "Senthil Mohan", - "image": "https://ca.slack-edge.com/E015GUGD2V6-U03JTLBU1HD-ffd97b7877e5-512", - "bio": "Senthil is a Solutions Architect at AWS working with ISVs in the UK to migrate, modernize and build their software products on AWS.", - "linkedin": "senthil-kumar-mohan" - }, - { - "name": "Shubhankar Sumar", - "image": "https://ca.slack-edge.com/E015GUGD2V6-W01BSTRT7EZ-3a3d16cf4fa5-192", - "bio": "Shubhankar is a Sr. Solutions Architect at AWS working with ISVs in the UK to build, run, and scale their software products on AWS.", - "linkedin": "shubhankar-sumar" - } - ], - "resources": { - "bullets": [ - { - "text": "Using cron and rate expressions to schedule rules in Amazon EventBridge", - "link": "https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html" - }, - { - "text": "AWS Secrets Manager rotation template", - "link": "https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas/blob/master/SecretsManagerRotationTemplate/lambda_function.py" - } - ] - }, - "patternArch": { - "icon1": { - "x": 20, - "y": 50, - "service": "eventbridge-scheduler", - "label": "Amazon EventBridge Scheduler" - }, - "icon2": { - "x": 50, - "y": 50, - "service": "lambda", - "label": "AWS Lambda" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "secretsmanager", - "label": "AWS Secrets Manager" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "trigger" - }, - "line2": { - "from": "icon2", - "to": "icon3", - "label": "rotate secret" - } - } -} diff --git a/eventbridge-schedule-secret-rotation-cdk/example-pattern.json b/eventbridge-schedule-secret-rotation-cdk/example-pattern.json index 11688f7b0..ca1b1ab64 100644 --- a/eventbridge-schedule-secret-rotation-cdk/example-pattern.json +++ b/eventbridge-schedule-secret-rotation-cdk/example-pattern.json @@ -1,13 +1,13 @@ { "title": "Secret rotation using Amazon EventBridge Scheduler and AWS Lambda", - "description": "Secret rotation in AMS Secrets Manager using Amazon EventBridge Scheduler and AWS Lambda", + "description": "Secret rotation in AWS Secrets Manager using Amazon EventBridge Scheduler and AWS Lambda", "language": "Python", "level": "200", "framework": "CDK", "introBox": { "headline": "How it works", "text": [ - "This sample project demonstrates rotating secrets in AWS Secrests Manager using Amazon EventBridge Scheduler and AWS Lambda at desired intervals for several use cases. e.g. rotating OAtuth tokens with limited lifespan.", + "This sample project demonstrates rotating secrets in AWS Secrets Manager using Amazon EventBridge Scheduler and AWS Lambda at desired intervals for several use cases. e.g. rotating OAuth tokens with limited lifespan.", "An EventBridge schedule is created based on the 'Secret rotation schedule' CDK parameter with rotation Lambda as the target which does the job", "You could provide the interval at which you want the secret to be rotated as a cron or rate expression." ] diff --git a/private-apigw-cross-region/example-pattern.json b/private-apigw-cross-region/example-pattern.json index 61617e2eb..3a0c93983 100644 --- a/private-apigw-cross-region/example-pattern.json +++ b/private-apigw-cross-region/example-pattern.json @@ -1,13 +1,13 @@ { "title": "Private Amazon API Gateway REST API to be invoked from an AWS Lambda function in a different AWS Region", - "description": "This pattern creates a Private Amazon API Gateway REST API, along with an Interface VPC Endpoint in an AWS Region. Subsequently, it creates a VPC, a Lambda function, a Private Hosted Zone, and a VPC Peering Connection in a second AWS Region. Finally, the VPC Peering connection is created in the first AWS Region. This way, a client in an AWS Region can send requests to the Private API Gateway in a different AWS Region.", + "description": "This sample project demonstrates how to invoke a Private Amazon API Gateway REST API from a different AWS Region.", "language": "Python", "level": "300", "framework": "SAM", "introBox": { "headline": "How it works", "text": [ - "This sample project demonstrates how to invoke a Private Amazon API Gateway REST API from a different AWS Region." + "This pattern implements a cross-region private Amazon API Gateway REST API using an Interface VPC Endpoint and VPC peering." ] }, "gitHub": { diff --git a/private-apigw-cross-region/private-apigw-cross-region.json b/private-apigw-cross-region/private-apigw-cross-region.json deleted file mode 100644 index 568884850..000000000 --- a/private-apigw-cross-region/private-apigw-cross-region.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "title": "Cross-region private Amazon API Gateway REST API", - "description": " This pattern implements a cross-region private Amazon API Gateway REST API using an Interface VPC Endpoint and VPC peering.", - "language": "Python", - "level": "300", - "framework": "SAM", - "introBox": { - "headline": "How it works", - "text": [ - "This sample project demonstrates how to invoke a Private Amazon API Gateway REST API from a different AWS Region." - ] - }, - "gitHub": { - "template": { - "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/private-apigw-cross-region", - "templateURL": "serverless-patterns/private-apigw-cross-region", - "projectFolder": "private-apigw-cross-region", - "templateFile": "template1-regionA.yaml" - } - }, - "resources": { - "bullets": [ - { - "text": "Private APIs", - "link": "https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html" - }, - { - "text": "Private Hosted Zones", - "link": "https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html" - }, - { - "text": "VPC Peering", - "link": "https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html" - }, - { - "text": "VPC Endpoints", - "link": "https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html" - } - ] - }, - "deploy": { - "text": [ - "See the GitHub repo for detailed instructions." - ] - }, - "testing": { - "text": [ - "See the GitHub repo for detailed testing instructions." - ] - }, - "cleanup": { - "text": [ - "Delete the stack: sam delete." - ] - }, - "authors": [ - { - "name": "Luigi Napoleone Capasso", - "bio": "Luigi Napoleone Capasso is a Technical Account Manager at Amazon Web Services.", - "linkedin": "luigi-napoleone-capasso-0aa405147" - } - ], - "patternArch": { - "icon1": { - "x": 15, - "y": 50, - "service": "lambda", - "label": "AWS Lambda Requester" - }, - "icon2": { - "x": 45, - "y": 50, - "service": "vpc-endpoint", - "label": "Region B VPC Endpoint" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "apigw", - "label": "Private API Gateway REST API" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "Request" - }, - "line2": { - "from": "icon2", - "to": "icon3", - "label": "Request" - } - } -} diff --git a/s3-eventbridge-fargate-cdk/s3-eventbirdge-fargate-cdk.json b/s3-eventbridge-fargate-cdk/example-pattern.json similarity index 76% rename from s3-eventbridge-fargate-cdk/s3-eventbirdge-fargate-cdk.json rename to s3-eventbridge-fargate-cdk/example-pattern.json index 38376b7ad..b75d7e850 100644 --- a/s3-eventbridge-fargate-cdk/s3-eventbirdge-fargate-cdk.json +++ b/s3-eventbridge-fargate-cdk/example-pattern.json @@ -58,35 +58,5 @@ "linkedin": "jeromevdl", "twitter": "jeromevdl" } - ], - "patternArch": { - "icon1": { - "x": 20, - "y": 50, - "service": "s3", - "label": "Amazon S3" - }, - "icon2": { - "x": 50, - "y": 50, - "service": "eventbridge", - "label": "Amazon EventBridge" - }, - "icon3": { - "x": 80, - "y": 50, - "service": "fargate", - "label": "AWS Fargate" - }, - "line1": { - "from": "icon1", - "to": "icon2", - "label": "Event" - }, - "line2": { - "from": "icon2", - "to": "icon3", - "label": "Rule" - } - } + ] } diff --git a/stepfunctions-sns-apigw-human-review/example-pattern.json b/stepfunctions-sns-apigw-human-review/example-pattern.json index 06fe937dc..f8ee90a24 100644 --- a/stepfunctions-sns-apigw-human-review/example-pattern.json +++ b/stepfunctions-sns-apigw-human-review/example-pattern.json @@ -1,20 +1,19 @@ { - "title": "Human review process using Amazon Step Functions.", - "description": "Integrate a human review process into your workflow.", - "language": "", - "level": "200", - "framework": "SAM", - "diagram":"/resources/statemachine.png", - "introBox": { - "headline": "How it works", - "text": [ - "This application will create a State Machine, an SNS topic, and an API Gateway REST API.", - "The State Machine sends a message to an SNS topic which sends a notification to a human reviewer by email. The workflow then waits until the approver completes their review. When the reviewer makes a selection, it will trigger an API that sends the SendTaskSuccess API call with the chosen result.", - "Waiting for completion of the review is done using the .waitForTaskToken service integration. The payload of the SNS message contains a task token, which is automatically generated by AWS Step Functions.", - "The task will pause until it receives that task token back with a SendTaskSuccess or SendTaskFailure API call." - - ] - }, + "title": "Human review process using AWS Step Functions.", + "description": "Integrate a human review process into your workflow.", + "language": "", + "level": "200", + "framework": "SAM", + "diagram": "/resources/statemachine.png", + "introBox": { + "headline": "How it works", + "text": [ + "The application will create a AWS Step Functions State Machine, an Amazon SNS topic, and an Amazon API Gateway REST API.", + "The State Machine sends a message to an SNS topic which sends a notification to a human reviewer by email. The workflow then waits until the approver completes their review. When the reviewer makes a selection, it will trigger an API that sends the SendTaskSuccess API call with the chosen result.", + "Waiting for completion of the review is done using the .waitForTaskToken service integration. The payload of the SNS message contains a task token, which is automatically generated by AWS Step Functions.", + "The task will pause until it receives that task token back with a SendTaskSuccess or SendTaskFailure API call." + ] + }, "gitHub": { "template": { "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/stepfunctions-sns-apigw-human-review",