Queue
An encrypted SQS queue with a dead-letter queue always provisioned, so failed messages are kept, not dropped. Wire a Lambda consumer in one step.
Infrastructure
import { App } from '@anvil-cloud/sdk';
import * as anvil from '@anvil-cloud/sdk';
export default new App({
run(ctx) {
const worker = new anvil.aws.Lambda('worker', {
runtime: 'nodejs24.x',
handler: 'functions/worker/index.handler',
});
const queue = new anvil.aws.Queue('jobs', {
consumer: { lambda: { arn: worker.arn, lambdaRoleArn: worker.roleArn } },
});
ctx.export('queueUrl', queue.url);
},
});import anvil_cloud as anvil
def infra(ctx: anvil.Context):
worker = anvil.aws.Lambda("worker",
runtime="nodejs24.x",
handler="functions/worker/index.handler",
)
queue = anvil.aws.Queue("jobs",
# "lambda_" (trailing underscore) because "lambda" is a Python keyword.
consumer={"lambda_": {"arn": worker.arn, "lambda_role_arn": worker.role_arn}},
)
ctx.export("queue_url", queue.url)
anvil.App(run=infra)package main
import (
"github.com/anvil-cloud/anvil/sdk/go/anvil"
anvilaws "github.com/anvil-cloud/anvil/sdk/go/anvil/aws"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
anvil.Run(anvil.AppConfig{
Run: func(ctx *anvil.Context) error {
worker, err := anvilaws.NewLambda(ctx.PulumiCtx(), "worker", &anvilaws.LambdaArgs{
Runtime: anvilaws.LambdaRuntime_Nodejs24_x,
Handler: pulumi.String("functions/worker/index.handler"),
})
if err != nil {
return err
}
queue, err := anvilaws.NewQueue(ctx.PulumiCtx(), "jobs", &anvilaws.QueueArgs{
Consumer: &anvilaws.QueueConsumerArgsArgs{
Lambda: &anvilaws.QueueLambdaConsumerArgsArgs{
Arn: worker.Arn,
LambdaRoleArn: worker.RoleArn,
},
},
})
if err != nil {
return err
}
ctx.Export("queueUrl", queue.Url)
return nil
},
})
}