Frequently asked questions

Who is this for?

This guide is designed for web dev beginners who want to get started with building modern serverless web applications on AWS from scratch. This guide does not assume that you have any prior experience with AWS.

Why serverless?

The core ethos of serverless is to outsource undifferentiated work so you can focus on creating unique value. Cloud adopters agree their core business is not running data centers. And through that evolution we are now automating deployment and scaling of our code at an increasingly discreet level of granularity.

Modern serverless web apps share the following characteristics:

  • 100% utilization This means the compute scales to zero and we only pay for the usage; there is no provisioning of instances, pods, containers, servers or virtual machines … business logic code and/or configuration is the sole expression of unique business value
  • Least privilege When the runtime execution code is locked down to the least privilege security possible at a function level and by default can do nothing at all; compute execution is completely isolated at the function level with fine grained access control
  • Infra as Code Progressive staged delivery of deterministic artifacts; infrastructure resources requirements are expressed alongside the code that depends on them

Said another way:

  • Only pay for what you use
  • Completely isolated and granular runtime security
  • Fully deterministic deploys

This is important to you because these characteristics in tandem lead to shorter, more frequent and faster iterations. Faster lead times to production means feature addition and bug resolution is faster. And this means happy software developers and happier customers.

Why AWS?

  • market pioneer and leader with a track record of operational excellence and resiliency
  • most services and capabilities
  • most points of presence and fastest network

Why choose DynamoDB?

  • Single digit latency no matter now many rows you have
  • Auto scaling
  • Generous free tier

What is Infrastructure as Code?

Infra as Code (IaC) is like a lockfile for the cloud resources your code depends on.

IaC is a practice to capture the cloud infrastructure resource requirements alongside the application code that depends on it by saving it, usually in a declarative manifest file, in version control with the code. In the most ideal scenario the code and cloud resources can be provisioned and updated from single deterministic artifact.

Why choose Architect?

Architect is an Infra as Code (IaC) implementation for building serverless web apps.

  • Developer experience tuned for building serverless web applications
  • Curated subset of free tier serverless primitives from AWS without the vendor specific configuration
  • Seamless frontend development workflows
  • Open source, open governance, great cadence, no breaking changes, mature and well tested
  • Solid, helpful and growing community
  • Deployments are standard AWS SAM and CloudFormation (eject and bail to vanilla SAM anytime or stay high level)

How does Architect work?

Architect implements an Infrastructure as Code manifest file in the following formats: app.arc, arc.json, arc.yaml and arc.toml.

Architect takes the developer defined high level definition and compiles it into CloudFormation for deployment to AWS. While the AWS cloud is vast, Architect is a shortcut to using only the most common serverless service primitives you need to build a very scalable application, very rapidly and at a very low cost.

Common Service Primitives

Architect primitives are based on the following AWS serverless ecosystem services:

Note: with Architect Macros all AWS services supported by CloudFormation can be utilized!

Compared to…?

  • K8s/Docker: containers are not serverless when the smallest unit of compute is running a literal web server
  • Terraform: wide support for older monolithic architectures and, while possible, serverless is not a first class citizen missing things like local development workflows
  • Serverless, mature tool with wide support to many platforms and capabilities but without deep support for web use cases; things like local development are an after thought

What cloud resources are currently supported by Architect?

Architect curates AWS to the minimum essential complexity so you can focus on shipping your app. It selects services that are serverless, scale to zero and have generous free tiers.

Compute resources

@http

Lambda functions handing HTTP events from API Gateway.

@ws

Lambda functions handing web socket events from API Gateway.

@events

Lambda functions subscribed to SNS topics.

@queues

Lambda functions subscribed to SQS queues.

@scheduled

Lambda functions subscribed to an EventBridge rule with a schedule expression. Often colloquially referred to as "CRON Lambdas".

Storage resources

@static

S3 the original serverless hero.

@tables

DynamoDB tables the leading serverless database.

@indexes

Define additional access patterns for DynamoDB tables. Each index is a full copy of the Dynamo table (with a different key schema for indexing) so be aware each indexe added will cost more. DynamoDB billing is faceted. Amazon charges for: reading data, writing data and storing data…among other things, but suffice to say, the free tier is generous. The first 25 GB stored per month is free.

Network resources

@cdn

CloudFront is one of the oldest and largest content delivery networks in the industry.

@domains

Defines Route53 records for @static, @http and @ws

How do I extend Architect to use AWS resources not directly supported?

Architect has a capability called @macros that allow you to intercept and modify generated CloudFormation prior to deployment. You can change any Architect defaults and extend it into any AWS service supported by CloudFormation.

How do I export `app.arc` to raw CloudFormation?

Running arc package will export the current app.arc file as raw AWS CloudFormation.

Where can I find examples?

Check out examples at GitHub.com/begin-examples.