Comprehensive Amazon Web Services (AWS) infrastructure provider for Pulumi enabling multi-language infrastructure-as-code with 225+ AWS services
—
Application integration and management services including API Gateway for APIs, SNS/SQS for messaging, Step Functions for workflows, and CloudWatch for monitoring.
Amazon API Gateway creates, publishes, maintains, and monitors secure APIs at any scale.
/**
* API Gateway REST API
*/
class apigateway.RestApi extends pulumi.CustomResource {
constructor(name: string, args?: apigateway.RestApiArgs, opts?: pulumi.CustomResourceOptions);
/** API ARN */
readonly arn: pulumi.Output<string>;
/** API ID */
readonly id: pulumi.Output<string>;
/** API name */
readonly name: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Execution ARN */
readonly executionArn: pulumi.Output<string>;
/** Root resource ID */
readonly rootResourceId: pulumi.Output<string>;
/** API policy */
readonly policy: pulumi.Output<string>;
/** Binary media types */
readonly binaryMediaTypes: pulumi.Output<string[]>;
/** Endpoint configuration */
readonly endpointConfiguration: pulumi.Output<apigateway.RestApiEndpointConfiguration>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface apigateway.RestApiArgs {
/** API name */
name?: pulumi.Input<string>;
/** Description */
description?: pulumi.Input<string>;
/** API policy document (JSON) */
policy?: pulumi.Input<string>;
/** Binary media types */
binaryMediaTypes?: pulumi.Input<pulumi.Input<string>[]>;
/** Minimum compression size */
minimumCompressionSize?: pulumi.Input<number>;
/** API key source */
apiKeySource?: pulumi.Input<string>;
/** Endpoint configuration */
endpointConfiguration?: pulumi.Input<apigateway.RestApiEndpointConfiguration>;
/** Disable execute API endpoint */
disableExecuteApiEndpoint?: pulumi.Input<boolean>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* API Gateway Resource
*/
class apigateway.Resource extends pulumi.CustomResource {
constructor(name: string, args: apigateway.ResourceArgs, opts?: pulumi.CustomResourceOptions);
/** Resource ID */
readonly id: pulumi.Output<string>;
/** REST API ID */
readonly restApi: pulumi.Output<string>;
/** Parent resource ID */
readonly parentId: pulumi.Output<string>;
/** Path part */
readonly pathPart: pulumi.Output<string>;
/** Full path */
readonly path: pulumi.Output<string>;
}
interface apigateway.ResourceArgs {
/** REST API ID */
restApi: pulumi.Input<string>;
/** Parent resource ID */
parentId: pulumi.Input<string>;
/** Path part (e.g., "users", "{id}") */
pathPart: pulumi.Input<string>;
}
/**
* API Gateway Method
*/
class apigateway.Method extends pulumi.CustomResource {
constructor(name: string, args: apigateway.MethodArgs, opts?: pulumi.CustomResourceOptions);
/** REST API ID */
readonly restApi: pulumi.Output<string>;
/** Resource ID */
readonly resourceId: pulumi.Output<string>;
/** HTTP method */
readonly httpMethod: pulumi.Output<string>;
/** Authorization type */
readonly authorization: pulumi.Output<string>;
/** Authorizer ID */
readonly authorizerId: pulumi.Output<string>;
/** API key required */
readonly apiKeyRequired: pulumi.Output<boolean>;
/** Request parameters */
readonly requestParameters: pulumi.Output<{[key: string]: boolean}>;
/** Request models */
readonly requestModels: pulumi.Output<{[key: string]: string}>;
}
interface apigateway.MethodArgs {
/** REST API ID */
restApi: pulumi.Input<string>;
/** Resource ID */
resourceId: pulumi.Input<string>;
/** HTTP method (GET, POST, PUT, DELETE, etc.) */
httpMethod: pulumi.Input<string>;
/** Authorization type (NONE, AWS_IAM, CUSTOM, COGNITO_USER_POOLS) */
authorization: pulumi.Input<string>;
/** Authorizer ID */
authorizerId?: pulumi.Input<string>;
/** API key required */
apiKeyRequired?: pulumi.Input<boolean>;
/** Request parameters */
requestParameters?: pulumi.Input<{[key: string]: pulumi.Input<boolean>}>;
/** Request models */
requestModels?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
/** Request validator ID */
requestValidatorId?: pulumi.Input<string>;
}
/**
* API Gateway Integration
*/
class apigateway.Integration extends pulumi.CustomResource {
constructor(name: string, args: apigateway.IntegrationArgs, opts?: pulumi.CustomResourceOptions);
/** REST API ID */
readonly restApi: pulumi.Output<string>;
/** Resource ID */
readonly resourceId: pulumi.Output<string>;
/** HTTP method */
readonly httpMethod: pulumi.Output<string>;
/** Integration type */
readonly type: pulumi.Output<string>;
/** Integration HTTP method */
readonly integrationHttpMethod: pulumi.Output<string>;
/** URI */
readonly uri: pulumi.Output<string>;
/** Connection type */
readonly connectionType: pulumi.Output<string>;
/** Connection ID */
readonly connectionId: pulumi.Output<string>;
/** Credentials */
readonly credentials: pulumi.Output<string>;
}
/**
* API Gateway Deployment
*/
class apigateway.Deployment extends pulumi.CustomResource {
constructor(name: string, args: apigateway.DeploymentArgs, opts?: pulumi.CustomResourceOptions);
/** Deployment ID */
readonly id: pulumi.Output<string>;
/** REST API ID */
readonly restApi: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Stage name */
readonly stageName: pulumi.Output<string>;
/** Invoke URL */
readonly invokeUrl: pulumi.Output<string>;
/** Execution ARN */
readonly executionArn: pulumi.Output<string>;
}Usage Examples:
// Create REST API
const api = new aws.apigateway.RestApi("user-api", {
name: "user-management-api",
description: "API for user management operations",
endpointConfiguration: {
types: ["REGIONAL"]
},
binaryMediaTypes: ["application/octet-stream"],
tags: {
Name: "UserAPI",
Environment: "production"
}
});
// Create resource
const usersResource = new aws.apigateway.Resource("users-resource", {
restApi: api.id,
parentId: api.rootResourceId,
pathPart: "users"
});
const userResource = new aws.apigateway.Resource("user-resource", {
restApi: api.id,
parentId: usersResource.id,
pathPart: "{id}"
});
// Create GET method
const getUserMethod = new aws.apigateway.Method("get-user", {
restApi: api.id,
resourceId: userResource.id,
httpMethod: "GET",
authorization: "AWS_IAM",
requestParameters: {
"method.request.path.id": true
}
});
// Create Lambda integration
const getUserIntegration = new aws.apigateway.Integration("get-user-integration", {
restApi: api.id,
resourceId: userResource.id,
httpMethod: getUserMethod.httpMethod,
type: "AWS_PROXY",
integrationHttpMethod: "POST",
uri: getUserFunction.invokeArn,
credentials: apiGatewayRole.arn
});
// Create deployment
const deployment = new aws.apigateway.Deployment("api-deployment", {
restApi: api.id,
stageName: "prod",
description: "Production deployment"
}, {
dependsOn: [getUserIntegration]
});
// Grant API Gateway permission to invoke Lambda
const lambdaPermission = new aws.lambda.Permission("api-lambda-permission", {
action: "lambda:InvokeFunction",
function: getUserFunction.name,
principal: "apigateway.amazonaws.com",
sourceArn: pulumi.interpolate`${api.executionArn}/*/*`
});Amazon Simple Notification Service is a pub/sub messaging service for application-to-application and application-to-person communication.
/**
* SNS Topic
*/
class sns.Topic extends pulumi.CustomResource {
constructor(name: string, args?: sns.TopicArgs, opts?: pulumi.CustomResourceOptions);
/** Topic ARN */
readonly arn: pulumi.Output<string>;
/** Topic name */
readonly name: pulumi.Output<string>;
/** Display name */
readonly displayName: pulumi.Output<string>;
/** Policy */
readonly policy: pulumi.Output<string>;
/** Delivery policy */
readonly deliveryPolicy: pulumi.Output<string>;
/** KMS master key ID */
readonly kmsMasterKeyId: pulumi.Output<string>;
/** FIFO topic */
readonly fifoTopic: pulumi.Output<boolean>;
/** Content-based deduplication */
readonly contentBasedDeduplication: pulumi.Output<boolean>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface sns.TopicArgs {
/** Topic name */
name?: pulumi.Input<string>;
/** Display name */
displayName?: pulumi.Input<string>;
/** Topic policy (JSON) */
policy?: pulumi.Input<string>;
/** Delivery policy (JSON) */
deliveryPolicy?: pulumi.Input<string>;
/** KMS key ID for encryption */
kmsMasterKeyId?: pulumi.Input<string>;
/** FIFO topic */
fifoTopic?: pulumi.Input<boolean>;
/** Content-based deduplication */
contentBasedDeduplication?: pulumi.Input<boolean>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* SNS Topic Subscription
*/
class sns.TopicSubscription extends pulumi.CustomResource {
constructor(name: string, args: sns.TopicSubscriptionArgs, opts?: pulumi.CustomResourceOptions);
/** Subscription ARN */
readonly arn: pulumi.Output<string>;
/** Topic ARN */
readonly topicArn: pulumi.Output<string>;
/** Protocol */
readonly protocol: pulumi.Output<string>;
/** Endpoint */
readonly endpoint: pulumi.Output<string>;
/** Raw message delivery */
readonly rawMessageDelivery: pulumi.Output<boolean>;
/** Filter policy */
readonly filterPolicy: pulumi.Output<string>;
/** Confirmation timeout */
readonly confirmationTimeoutInMinutes: pulumi.Output<number>;
}
interface sns.TopicSubscriptionArgs {
/** Topic ARN */
topicArn: pulumi.Input<string>;
/** Protocol (sqs, lambda, email, sms, http, https) */
protocol: pulumi.Input<string>;
/** Endpoint (queue ARN, function ARN, email, etc.) */
endpoint: pulumi.Input<string>;
/** Raw message delivery */
rawMessageDelivery?: pulumi.Input<boolean>;
/** Filter policy (JSON) */
filterPolicy?: pulumi.Input<string>;
/** Confirmation timeout in minutes */
confirmationTimeoutInMinutes?: pulumi.Input<number>;
/** Subscription role ARN */
subscriptionRoleArn?: pulumi.Input<string>;
}Usage Examples:
// Create SNS topic
const notificationTopic = new aws.sns.Topic("notifications", {
name: "user-notifications",
displayName: "User Notifications",
kmsMasterKeyId: encryptionKey.arn,
tags: {
Name: "UserNotifications",
Environment: "production"
}
});
// Subscribe Lambda function to topic
const lambdaSubscription = new aws.sns.TopicSubscription("lambda-subscription", {
topicArn: notificationTopic.arn,
protocol: "lambda",
endpoint: notificationFunction.arn
});
// Subscribe SQS queue to topic
const sqsSubscription = new aws.sns.TopicSubscription("sqs-subscription", {
topicArn: notificationTopic.arn,
protocol: "sqs",
endpoint: notificationQueue.arn,
rawMessageDelivery: true,
filterPolicy: JSON.stringify({
event_type: ["user_created", "user_updated"]
})
});
// Subscribe email to topic
const emailSubscription = new aws.sns.TopicSubscription("email-subscription", {
topicArn: notificationTopic.arn,
protocol: "email",
endpoint: "admin@example.com"
});
// Grant SNS permission to invoke Lambda
const snsLambdaPermission = new aws.lambda.Permission("sns-lambda-permission", {
action: "lambda:InvokeFunction",
function: notificationFunction.name,
principal: "sns.amazonaws.com",
sourceArn: notificationTopic.arn
});Amazon Simple Queue Service is a fully managed message queuing service for decoupling applications.
/**
* SQS Queue
*/
class sqs.Queue extends pulumi.CustomResource {
constructor(name: string, args?: sqs.QueueArgs, opts?: pulumi.CustomResourceOptions);
/** Queue ARN */
readonly arn: pulumi.Output<string>;
/** Queue ID */
readonly id: pulumi.Output<string>;
/** Queue name */
readonly name: pulumi.Output<string>;
/** Queue URL */
readonly url: pulumi.Output<string>;
/** Visibility timeout */
readonly visibilityTimeoutSeconds: pulumi.Output<number>;
/** Message retention period */
readonly messageRetentionSeconds: pulumi.Output<number>;
/** Max message size */
readonly maxMessageSize: pulumi.Output<number>;
/** Delay seconds */
readonly delaySeconds: pulumi.Output<number>;
/** Receive wait time */
readonly receiveWaitTimeSeconds: pulumi.Output<number>;
/** Policy */
readonly policy: pulumi.Output<string>;
/** Redrive policy */
readonly redrivePolicy: pulumi.Output<string>;
/** FIFO queue */
readonly fifoQueue: pulumi.Output<boolean>;
/** Content-based deduplication */
readonly contentBasedDeduplication: pulumi.Output<boolean>;
/** KMS master key ID */
readonly kmsMasterKeyId: pulumi.Output<string>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface sqs.QueueArgs {
/** Queue name */
name?: pulumi.Input<string>;
/** Visibility timeout in seconds */
visibilityTimeoutSeconds?: pulumi.Input<number>;
/** Message retention period in seconds */
messageRetentionSeconds?: pulumi.Input<number>;
/** Maximum message size in bytes */
maxMessageSize?: pulumi.Input<number>;
/** Message delay in seconds */
delaySeconds?: pulumi.Input<number>;
/** Long polling wait time in seconds */
receiveWaitTimeSeconds?: pulumi.Input<number>;
/** Queue policy (JSON) */
policy?: pulumi.Input<string>;
/** Dead letter queue redrive policy (JSON) */
redrivePolicy?: pulumi.Input<string>;
/** FIFO queue */
fifoQueue?: pulumi.Input<boolean>;
/** Content-based deduplication */
contentBasedDeduplication?: pulumi.Input<boolean>;
/** KMS key ID for encryption */
kmsMasterKeyId?: pulumi.Input<string>;
/** KMS data key reuse period in seconds */
kmsDataKeyReusePeriodSeconds?: pulumi.Input<number>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}Usage Examples:
// Create dead letter queue
const deadLetterQueue = new aws.sqs.Queue("dlq", {
name: "processing-dlq",
messageRetentionSeconds: 1209600, // 14 days
tags: {
Name: "ProcessingDLQ",
Purpose: "dead-letter"
}
});
// Create main processing queue
const processingQueue = new aws.sqs.Queue("processing-queue", {
name: "user-processing-queue",
visibilityTimeoutSeconds: 300,
messageRetentionSeconds: 345600, // 4 days
receiveWaitTimeSeconds: 20, // Long polling
redrivePolicy: JSON.stringify({
deadLetterTargetArn: deadLetterQueue.arn,
maxReceiveCount: 3
}),
kmsMasterKeyId: encryptionKey.arn,
tags: {
Name: "UserProcessingQueue",
Environment: "production"
}
});
// Create FIFO queue for ordered processing
const orderedQueue = new aws.sqs.Queue("ordered-queue", {
name: "ordered-processing.fifo",
fifoQueue: true,
contentBasedDeduplication: true,
visibilityTimeoutSeconds: 60,
tags: {
Name: "OrderedProcessingQueue",
Type: "fifo"
}
});
// Grant Lambda permission to receive messages
const queuePolicy = new aws.sqs.QueuePolicy("queue-policy", {
queueUrl: processingQueue.url,
policy: JSON.stringify({
Version: "2012-10-17",
Statement: [{
Effect: "Allow",
Principal: {
AWS: lambdaRole.arn
},
Action: [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes"
],
Resource: processingQueue.arn
}]
})
});AWS Step Functions coordinates multiple AWS services into serverless workflows.
/**
* Step Functions State Machine
*/
class sfn.StateMachine extends pulumi.CustomResource {
constructor(name: string, args: sfn.StateMachineArgs, opts?: pulumi.CustomResourceOptions);
/** State machine ARN */
readonly arn: pulumi.Output<string>;
/** State machine name */
readonly name: pulumi.Output<string>;
/** Definition */
readonly definition: pulumi.Output<string>;
/** Role ARN */
readonly roleArn: pulumi.Output<string>;
/** Type */
readonly type: pulumi.Output<string>;
/** Logging configuration */
readonly loggingConfiguration: pulumi.Output<sfn.StateMachineLoggingConfiguration>;
/** Tracing configuration */
readonly tracingConfiguration: pulumi.Output<sfn.StateMachineTracingConfiguration>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface sfn.StateMachineArgs {
/** State machine name */
name?: pulumi.Input<string>;
/** State machine definition (JSON) */
definition: pulumi.Input<string>;
/** IAM role ARN */
roleArn: pulumi.Input<string>;
/** Type (STANDARD or EXPRESS) */
type?: pulumi.Input<string>;
/** Logging configuration */
loggingConfiguration?: pulumi.Input<sfn.StateMachineLoggingConfiguration>;
/** Tracing configuration */
tracingConfiguration?: pulumi.Input<sfn.StateMachineTracingConfiguration>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}Usage Examples:
// Create Step Functions execution role
const stepFunctionRole = new aws.iam.Role("step-function-role", {
assumeRolePolicy: JSON.stringify({
Version: "2012-10-17",
Statement: [{
Action: "sts:AssumeRole",
Effect: "Allow",
Principal: {
Service: "states.amazonaws.com"
}
}]
})
});
// Create state machine for user processing workflow
const userProcessingWorkflow = new aws.sfn.StateMachine("user-processing", {
name: "user-processing-workflow",
roleArn: stepFunctionRole.arn,
type: "STANDARD",
definition: JSON.stringify({
Comment: "User processing workflow",
StartAt: "ValidateUser",
States: {
ValidateUser: {
Type: "Task",
Resource: validateUserFunction.arn,
Next: "ProcessUser",
Catch: [{
ErrorEquals: ["States.TaskFailed"],
Next: "HandleError"
}]
},
ProcessUser: {
Type: "Task",
Resource: processUserFunction.arn,
Next: "SendNotification"
},
SendNotification: {
Type: "Task",
Resource: `arn:aws:states:::sns:publish`,
Parameters: {
TopicArn: notificationTopic.arn,
Message: "User processing completed"
},
End: true
},
HandleError: {
Type: "Task",
Resource: errorHandlerFunction.arn,
End: true
}
}
}),
loggingConfiguration: {
logDestination: `${logGroup.arn}:*`,
includeExecutionData: true,
level: "ALL"
},
tags: {
Name: "UserProcessingWorkflow",
Environment: "production"
}
});Install with Tessl CLI
npx tessl i tessl/generic-pulumi--aws@7.6.2