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.

Messaging · anvil:aws:Queue

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
        },
    })
}

← Back to Queue docs