AWS Compute Blog
Visualize and create your serverless workloads with AWS Application Composer
This post is written by Luca Mezzalira, Principal Specialist Solutions Architect.
Today, AWS is launching a preview of AWS Application Composer, a visual designer that you can use to build your serverless applications from multiple AWS services.
In distributed systems, empowering teams is a cultural shift needed for enabling developers to help translate business capabilities into code.
This doesn’t mean every team works in isolation. Different teams or even new-joiners must understand what they are building to contribute to a project. The best way to understand architecture quickly is by using diagrams. Unfortunately, architectural diagrams are often outdated. Often, when releasing a workload in production, there are already discrepancies from the initial design and infrastructure.
Developers new to building serverless applications can face a learning curve when composing applications from multiple AWS services. They must understand how to configure each service, and then learn and write infrastructure as code (IaC) to deploy their application.
Example scenario
Emma is a cloud architect working for a video on-demand platform where every user can access the content after subscribing to the service. In the next few months, the marketing team wants to start a campaign to increase the user base using discount codes for new users only.
She collaborates with a team of developers who are new to building serverless applications. They must design a discount code service that can scale to thousands of transactions per second. There are many requirements to implement this service:
- Gathering the gift code from a user.
- Verifying the discount code is available.
- Applying the discount code to the invoice at the end of the month.
Based on these requirements and default SLAs available for all the platform services, Emma designs a high-level architecture with the key elements needed for building this microservice.
Her idea is to receive a request from clients with a discount code in the payload, and validate the availability of the discount code in a database. The service then asynchronously processes different discount codes in batches to reduce traffic to downstream dependencies and reduce the cost of the overall infrastructure.
This approach ensures that the service can scale in the future beyond the initial traffic volume. It simplifies the management and implementation of the discount code service and other parts of the system with a loosely coupled architecture.
After discussing the architecture with her developers, she opens Application Composer in the AWS Management Console and starts building the implementation using serverless services.
To start, she selects New blank project and selects a local file system folder to save the project files.
Granting Application Composer access to your local project files allows near real time bidirectional syncing of changes between the console interface and locally stored project files. When you update a property with the Application Composer interface, it’s reflected in the files stored locally. When you change a local file in your IDE, it automatically reflects in the Application Composer canvas.
After creating the project, Emma drags the AWS resources she needs from the left sidebar for expressing the initial design agreed with the team.
Using Application Composer, you can drag serverless resources on the canvas and connect them together. In the background, Application Composer generates the infrastructure as code AWS CloudFormation template for you.
For example, this is the default configuration generated when you drag a Lambda function onto the canvas. The following code is present in the template view:
Function:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-Function
Description: !Sub
- Stack ${AWS::StackName} Function ${ResourceName}
- ResourceName: Function
CodeUri: src/Function
Handler: index.handler
Runtime: nodejs14.x
MemorySize: 3008
Timeout: 30
Tracing: Active
Application Composer incorporates some helpful default property values, which are sometimes overlooked by developers new to serverless workloads. These include activating tracing using AWS X-Ray or increasing a function timeout, for instance.
You can change these parameters either in the CloudFormation template inside Application Composer or by visually selecting a resource. In the previous example, you can update the Lambda function parameters by opening the resource properties panel.
When you synchronize an Application Composer project with the local system, you can change the CloudFormation template from a code editor. This reflects the change in the Application Composer interface automatically.
When you connect two elements in the canvas, Application Composer sets default IAM policies, environment variables for Lambda functions, and event subscriptions where applicable.
For instance, if you have a Lambda function that interacts with an Amazon DynamoDB table and Amazon SQS queue, Application Composer generates the following configuration for the Lambda function.
Function:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-Function
Description: !Sub
- Stack ${AWS::StackName} Function ${ResourceName}
- ResourceName: Function
CodeUri: src/Function
Handler: index.handler
[…]
Environment:
Variables:
QUEUE_NAME: !GetAtt Queue.QueueName
QUEUE_ARN: !GetAtt Queue.Arn
QUEUE_URL: !Ref Queue
TABLE_NAME: !Ref Table
TABLE_ARN: !GetAtt Table.Arn
Policies:
- SQSSendMessagePolicy:
QueueName: !GetAtt Queue.QueueName
- DynamoDBCrudPolicy:
TableName: !Ref Table
This helps new builders when designing their first serverless applications and provides an initial configuration, which more advanced builders can amend. This allows you to include good operational practices when designing a serverless application.
Emma’s team continues to add together the different services needed to express the discount code architecture. This is the final result in Application Composer:
- The application includes an Amazon API Gateway endpoint that exposes the API needed for submitting a discount code to the system.
- The POST API triggers a Lambda function that first validates that the discount code is still available.
- This is stored using a DynamoDB table
- After successfully validating the discount code, the function adds a message to an SQS queue and returns a successful response to the client.
- Another Lambda function retrieves the message from the SQS queue and sends an invoice.
Using this approach optimizes the Lambda function invocation for speed as the remaining operations are handled asynchronously. This also simplifies the complexity and cost of the architecture because you can aggregate multiple discount codes per user SQS batching, rather than scaling the service when requests arrive from the users.
The team agrees to use this as the initial design of their service. In the future, they plan to integrate with their authentication mechanism. They add Lambda Powertools for observability, and additional libraries developed internally to make the project compliant with company standards.
Application Composer has created all the files needed to start the project in Emma’s local file system including the CloudFormation template .yaml file and the Lambda functions’ handlers.
Emma can now upload the outline of this service to a version control system and share the artifacts with other developers who can start coding the business logic.
Additional features
Application Composer includes a resource list tab within the left-side panel that allows you to quickly browse available resources.
You can also group resources semantically for simplifying the visualization inside the canvas. This helps when you have a large application in the canvas and you want to select an element quickly without dragging the canvas around to find the resource. This feature doesn’t impact the infrastructure generated.
Application Composer adds some metadata to the CloudFormation template to allow the canvas to group resources together when the project is loaded again.
Metadata:
AWS::Composer::Groups:
Group:
Label: Group
Members:
- CodesQueue
- CodesTable
You can use Application Composer beyond building new serverless workloads. You can load existing CloudFormation templates by selecting Load existing project in the Create project dialog.
You can use this to define your blueprints with organizational best practices and then visualize them within Application Composer. This helps teams collaborate when starting new serverless services. You can add resources from an existing base template to build serverless microservices or event-driven architectures.
Integration with AWS SAM
AWS Serverless Application Model (AWS SAM) recently announced the general availability of AWS SAM Accelerate to accelerate the feedback loop and testing of your code and cloud infrastructure by synchronizing only project changes. You can use Application Composer together with AWS SAM Accelerate to more simply visually build and then test your serverless applications in the cloud.
To learn more about AWS SAM Accelerate, watch this live demo.
Where Application Composer fits into the development process
Emma used Application Composer to help her team for this project but has ideas on further ways to use it.
- Rapid prototyping.
- Reviewing and collaboratively evolving existing serverless projects.
- Generating diagrams for documentation or Wikis.
- On-boarding new team members to a project
- Reducing the first steps to deploy something in an AWS Cloud account.
Application Composer availability
Application Composer is currently available as a public preview in the following Regions: Frankfurt (eu-central-1), Ireland (eu-west-1), Ohio (us-east-2), Oregon (us-west-2), North Virginia (us-east-1) and Tokyo (ap-northeast-1).
Application Composer is available at no additional cost and can be accessed via the AWS Management Console.
Conclusion
Application Composer is a visual designer to help developers and architects express and build their application architecture. They can iterate on their ideas with colleagues and create documentation for others working on the application for the first time. You can use Application Composer during multiple stages of your software development lifecycle, reducing the friction in getting your project started and into production.
Currently, Application Composer supports a limited number of services that we plan to add to in the future. Let us know which services you would like to see included.
As a public preview, we are looking for suggestions and ideas to evolve the tool. We are looking for ways to help you and your teams to speed up the adoption of serverless workloads inside your organization. Add a comment to this post or tweet with the tag #AWSAppComposerWishlist.
For more serverless learning resources, visit Serverless Land.