Comprehensive Amazon Web Services (AWS) infrastructure provider for Pulumi enabling multi-language infrastructure-as-code with 225+ AWS services
—
Comprehensive storage solutions including object storage (S3), block storage (EBS), file systems (EFS), and data archival services for all storage needs.
Simple Storage Service provides scalable object storage with industry-leading durability and availability.
/**
* S3 bucket for object storage
*/
class s3.Bucket extends pulumi.CustomResource {
constructor(name: string, args?: s3.BucketArgs, opts?: pulumi.CustomResourceOptions);
/** Bucket ARN */
readonly arn: pulumi.Output<string>;
/** Bucket name */
readonly bucket: pulumi.Output<string>;
/** Bucket domain name */
readonly bucketDomainName: pulumi.Output<string>;
/** Regional domain name */
readonly bucketRegionalDomainName: pulumi.Output<string>;
/** Hosted zone ID */
readonly hostedZoneId: pulumi.Output<string>;
/** AWS region */
readonly region: pulumi.Output<string>;
/** Website endpoint */
readonly websiteEndpoint: pulumi.Output<string>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface s3.BucketArgs {
/** Bucket name (globally unique) */
bucket?: pulumi.Input<string>;
/** Canned ACL to apply */
acl?: pulumi.Input<string>;
/** CORS configuration */
corsRules?: pulumi.Input<pulumi.Input<s3.BucketCorsRule>[]>;
/** Lifecycle configuration */
lifecycleRules?: pulumi.Input<pulumi.Input<s3.BucketLifecycleRule>[]>;
/** Logging configuration */
loggings?: pulumi.Input<pulumi.Input<s3.BucketLogging>[]>;
/** Versioning configuration */
versioning?: pulumi.Input<s3.BucketVersioning>;
/** Website configuration */
website?: pulumi.Input<s3.BucketWebsite>;
/** Server-side encryption configuration */
serverSideEncryptionConfiguration?: pulumi.Input<s3.BucketServerSideEncryptionConfiguration>;
/** Replication configuration */
replicationConfiguration?: pulumi.Input<s3.BucketReplicationConfiguration>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* S3 object storage
*/
class s3.BucketObject extends pulumi.CustomResource {
constructor(name: string, args: s3.BucketObjectArgs, opts?: pulumi.CustomResourceOptions);
/** Bucket name */
readonly bucket: pulumi.Output<string>;
/** Object key */
readonly key: pulumi.Output<string>;
/** Object ETag */
readonly etag: pulumi.Output<string>;
/** Object size in bytes */
readonly size: pulumi.Output<number>;
/** Storage class */
readonly storageClass: pulumi.Output<string>;
/** Version ID */
readonly versionId: pulumi.Output<string>;
/** Object content */
readonly source: pulumi.Output<pulumi.asset.Asset | pulumi.asset.Archive>;
}
interface s3.BucketObjectArgs {
/** Target bucket */
bucket: pulumi.Input<string>;
/** Object key (path) */
key: pulumi.Input<string>;
/** Object content */
source?: pulumi.Input<pulumi.asset.Asset | pulumi.asset.Archive>;
/** Raw content string */
content?: pulumi.Input<string>;
/** Content type */
contentType?: pulumi.Input<string>;
/** Content encoding */
contentEncoding?: pulumi.Input<string>;
/** Cache control header */
cacheControl?: pulumi.Input<string>;
/** Canned ACL */
acl?: pulumi.Input<string>;
/** Storage class */
storageClass?: pulumi.Input<string>;
/** Server-side encryption */
serverSideEncryption?: pulumi.Input<string>;
/** KMS key ID */
kmsKeyId?: pulumi.Input<string>;
/** Metadata map */
metadata?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
/** Object tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* Query existing S3 buckets
*/
function s3.getBucket(args: s3.GetBucketArgs): Promise<s3.GetBucketResult>;
interface s3.GetBucketArgs {
/** Bucket name */
bucket: string;
}
interface s3.GetBucketResult {
readonly arn: string;
readonly bucket: string;
readonly bucketDomainName: string;
readonly hostedZoneId: string;
readonly region: string;
readonly websiteEndpoint: string;
}Usage Examples:
// Create a private S3 bucket with encryption
const bucket = new aws.s3.Bucket("app-data", {
bucket: "my-app-data-bucket-12345",
acl: "private",
versioning: {
enabled: true
},
serverSideEncryptionConfiguration: {
rule: {
applyServerSideEncryptionByDefault: {
sseAlgorithm: "AES256"
}
}
},
lifecycleRules: [{
enabled: true,
transitions: [{
days: 30,
storageClass: "STANDARD_IA"
}, {
days: 90,
storageClass: "GLACIER"
}]
}],
tags: {
Environment: "production",
Purpose: "application-data"
}
});
// Upload files to S3
const configFile = new aws.s3.BucketObject("config", {
bucket: bucket.bucket,
key: "config/app.json",
source: new pulumi.asset.FileAsset("./config/app.json"),
contentType: "application/json"
});
const staticAssets = new aws.s3.BucketObject("assets", {
bucket: bucket.bucket,
key: "assets/",
source: new pulumi.asset.FileArchive("./dist"),
acl: "public-read"
});
// Static website hosting
const websiteBucket = new aws.s3.Bucket("website", {
bucket: "my-website-bucket",
acl: "public-read",
website: {
indexDocument: "index.html",
errorDocument: "error.html"
},
corsRules: [{
allowedHeaders: ["*"],
allowedMethods: ["GET", "HEAD"],
allowedOrigins: ["*"],
maxAgeSeconds: 3000
}]
});Elastic Block Store provides high-performance block storage for EC2 instances.
/**
* EBS volume for block storage
*/
class ebs.Volume extends pulumi.CustomResource {
constructor(name: string, args: ebs.VolumeArgs, opts?: pulumi.CustomResourceOptions);
/** Volume ARN */
readonly arn: pulumi.Output<string>;
/** Availability zone */
readonly availabilityZone: pulumi.Output<string>;
/** Volume ID */
readonly id: pulumi.Output<string>;
/** Volume size in GB */
readonly size: pulumi.Output<number>;
/** Volume type (gp2, gp3, io1, io2, sc1, st1) */
readonly type: pulumi.Output<string>;
/** IOPS for provisioned IOPS volumes */
readonly iops: pulumi.Output<number>;
/** Throughput for gp3 volumes */
readonly throughput: pulumi.Output<number>;
/** Encryption status */
readonly encrypted: pulumi.Output<boolean>;
/** KMS key ID */
readonly kmsKeyId: pulumi.Output<string>;
/** Snapshot ID used to create volume */
readonly snapshotId: pulumi.Output<string>;
}
interface ebs.VolumeArgs {
/** Availability zone */
availabilityZone: pulumi.Input<string>;
/** Volume size in GB */
size?: pulumi.Input<number>;
/** Volume type */
type?: pulumi.Input<string>;
/** IOPS (for io1, io2, gp3) */
iops?: pulumi.Input<number>;
/** Throughput in MB/s (for gp3) */
throughput?: pulumi.Input<number>;
/** Enable encryption */
encrypted?: pulumi.Input<boolean>;
/** KMS key for encryption */
kmsKeyId?: pulumi.Input<string>;
/** Source snapshot ID */
snapshotId?: pulumi.Input<string>;
/** Volume tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* EBS snapshot for backups
*/
class ebs.Snapshot extends pulumi.CustomResource {
constructor(name: string, args: ebs.SnapshotArgs, opts?: pulumi.CustomResourceOptions);
/** Snapshot ARN */
readonly arn: pulumi.Output<string>;
/** Snapshot description */
readonly description: pulumi.Output<string>;
/** Volume ID */
readonly volumeId: pulumi.Output<string>;
/** Volume size */
readonly volumeSize: pulumi.Output<number>;
/** Owner ID */
readonly ownerId: pulumi.Output<string>;
/** Snapshot tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
/**
* Volume attachment to EC2 instance
*/
class ec2.VolumeAttachment extends pulumi.CustomResource {
constructor(name: string, args: ec2.VolumeAttachmentArgs, opts?: pulumi.CustomResourceOptions);
/** Device name */
readonly deviceName: pulumi.Output<string>;
/** Instance ID */
readonly instanceId: pulumi.Output<string>;
/** Volume ID */
readonly volumeId: pulumi.Output<string>;
}Usage Examples:
// Create encrypted EBS volume
const dataVolume = new aws.ebs.Volume("data-volume", {
availabilityZone: "us-west-2a",
size: 100,
type: "gp3",
iops: 3000,
throughput: 125,
encrypted: true,
tags: {
Name: "DataVolume",
Backup: "daily"
}
});
// Attach volume to EC2 instance
const attachment = new aws.ec2.VolumeAttachment("data-attachment", {
deviceName: "/dev/xvdf",
volumeId: dataVolume.id,
instanceId: instance.id
});
// Create snapshot for backup
const backup = new aws.ebs.Snapshot("daily-backup", {
volumeId: dataVolume.id,
description: `Daily backup of ${dataVolume.id}`,
tags: {
Name: "DailyBackup",
Schedule: "daily"
}
});Fully managed NFS file system for EC2 instances with automatic scaling.
/**
* EFS file system
*/
class efs.FileSystem extends pulumi.CustomResource {
constructor(name: string, args?: efs.FileSystemArgs, opts?: pulumi.CustomResourceOptions);
/** File system ARN */
readonly arn: pulumi.Output<string>;
/** File system ID */
readonly id: pulumi.Output<string>;
/** DNS name */
readonly dnsName: pulumi.Output<string>;
/** Performance mode */
readonly performanceMode: pulumi.Output<string>;
/** Throughput mode */
readonly throughputMode: pulumi.Output<string>;
/** Provisioned throughput in MB/s */
readonly provisionedThroughputInMibps: pulumi.Output<number>;
/** Creation token */
readonly creationToken: pulumi.Output<string>;
/** Encryption status */
readonly encrypted: pulumi.Output<boolean>;
/** KMS key ID */
readonly kmsKeyId: pulumi.Output<string>;
}
interface efs.FileSystemArgs {
/** Creation token (unique identifier) */
creationToken?: pulumi.Input<string>;
/** Performance mode (generalPurpose or maxIO) */
performanceMode?: pulumi.Input<string>;
/** Throughput mode (provisioned or bursting) */
throughputMode?: pulumi.Input<string>;
/** Provisioned throughput in MB/s */
provisionedThroughputInMibps?: pulumi.Input<number>;
/** Enable encryption at rest */
encrypted?: pulumi.Input<boolean>;
/** KMS key for encryption */
kmsKeyId?: pulumi.Input<string>;
/** Lifecycle policy */
lifecyclePolicy?: pulumi.Input<efs.FileSystemLifecyclePolicy>;
/** File system tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* EFS mount target for subnet access
*/
class efs.MountTarget extends pulumi.CustomResource {
constructor(name: string, args: efs.MountTargetArgs, opts?: pulumi.CustomResourceOptions);
/** File system ID */
readonly fileSystemId: pulumi.Output<string>;
/** Subnet ID */
readonly subnetId: pulumi.Output<string>;
/** IP address */
readonly ipAddress: pulumi.Output<string>;
/** DNS name */
readonly dnsName: pulumi.Output<string>;
/** Security groups */
readonly securityGroups: pulumi.Output<string[]>;
}
/**
* EFS access point for application access
*/
class efs.AccessPoint extends pulumi.CustomResource {
constructor(name: string, args: efs.AccessPointArgs, opts?: pulumi.CustomResourceOptions);
/** Access point ARN */
readonly arn: pulumi.Output<string>;
/** File system ID */
readonly fileSystemId: pulumi.Output<string>;
/** Root directory configuration */
readonly rootDirectory: pulumi.Output<efs.AccessPointRootDirectory>;
/** POSIX user configuration */
readonly posixUser: pulumi.Output<efs.AccessPointPosixUser>;
}Usage Examples:
// Create EFS file system with encryption
const fileSystem = new aws.efs.FileSystem("shared-storage", {
performanceMode: "generalPurpose",
throughputMode: "provisioned",
provisionedThroughputInMibps: 100,
encrypted: true,
lifecyclePolicy: {
transitionToIa: "AFTER_30_DAYS"
},
tags: {
Name: "SharedStorage",
Purpose: "application-data"
}
});
// Create mount targets in multiple subnets
const mountTargets = privateSubnets.map((subnet, index) =>
new aws.efs.MountTarget(`mount-target-${index}`, {
fileSystemId: fileSystem.id,
subnetId: subnet.id,
securityGroups: [efsSecurityGroup.id]
})
);
// Create access point for application
const accessPoint = new aws.efs.AccessPoint("app-access", {
fileSystemId: fileSystem.id,
rootDirectory: {
path: "/app-data",
creationInfo: {
ownerUid: 1000,
ownerGid: 1000,
permissions: "755"
}
},
posixUser: {
uid: 1000,
gid: 1000
}
});Fully managed file systems optimized for compute-intensive workloads.
/**
* FSx Lustre file system for HPC workloads
*/
class fsx.LustreFileSystem extends pulumi.CustomResource {
constructor(name: string, args: fsx.LustreFileSystemArgs, opts?: pulumi.CustomResourceOptions);
/** File system ARN */
readonly arn: pulumi.Output<string>;
/** DNS name */
readonly dnsName: pulumi.Output<string>;
/** Storage capacity in GB */
readonly storageCapacity: pulumi.Output<number>;
/** Subnet IDs */
readonly subnetIds: pulumi.Output<string[]>;
/** Security group IDs */
readonly securityGroupIds: pulumi.Output<string[]>;
/** Mount name */
readonly mountName: pulumi.Output<string>;
}
/**
* FSx Windows file system
*/
class fsx.WindowsFileSystem extends pulumi.CustomResource {
constructor(name: string, args: fsx.WindowsFileSystemArgs, opts?: pulumi.CustomResourceOptions);
/** File system ARN */
readonly arn: pulumi.Output<string>;
/** DNS name */
readonly dnsName: pulumi.Output<string>;
/** Active Directory ID */
readonly activeDirectoryId: pulumi.Output<string>;
/** Storage capacity in GB */
readonly storageCapacity: pulumi.Output<number>;
/** Throughput capacity in MB/s */
readonly throughputCapacity: pulumi.Output<number>;
}Install with Tessl CLI
npx tessl i tessl/generic-pulumi--aws@7.6.2