docs
reference
services
tessl install tessl/maven-com-pulumi--aws@7.16.0Pulumi Java SDK for AWS providing strongly-typed Infrastructure-as-Code for 227 AWS service packages including compute, storage, databases, networking, security, analytics, machine learning, and more.
Amazon S3 provides scalable object storage.
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.s3.BucketObject;
import com.pulumi.aws.s3.BucketObjectArgs;
import com.pulumi.aws.s3.BucketPolicy;
import com.pulumi.aws.s3.BucketPolicyArgs;
import com.pulumi.aws.s3.BucketPublicAccessBlock;
import com.pulumi.aws.s3.BucketPublicAccessBlockArgs;
import com.pulumi.aws.s3.BucketVersioning;
import com.pulumi.aws.s3.BucketVersioningArgs;
import com.pulumi.aws.s3.BucketLifecycleConfiguration;
import com.pulumi.aws.s3.BucketLifecycleConfigurationArgs;
import com.pulumi.aws.s3.BucketNotification;
import com.pulumi.aws.s3.BucketNotificationArgs;
import com.pulumi.aws.s3.BucketCorsConfiguration;
import com.pulumi.aws.s3.BucketCorsConfigurationArgs;
import com.pulumi.aws.s3.S3Functions;
import com.pulumi.aws.s3.inputs.GetBucketArgs;
import com.pulumi.asset.FileAsset;
import com.pulumi.asset.StringAsset;Create and manage S3 buckets.
@ResourceType(type="aws:s3/bucket:Bucket")
public class Bucket extends com.pulumi.resources.CustomResource {
public Bucket(String name);
public Bucket(String name, @Nullable BucketArgs args);
public Bucket(String name, @Nullable BucketArgs args, @Nullable CustomResourceOptions options);
// Exported Properties
public Output<String> id();
public Output<String> arn();
public Output<String> bucket();
public Output<String> bucketDomainName();
public Output<String> bucketRegionalDomainName();
public Output<String> hostedZoneId();
public Output<String> region();
public Output<Optional<String>> acl();
public Output<Optional<List<BucketCorsRule>>> corsRules();
public Output<Optional<BucketVersioning>> versioning();
public Output<Optional<BucketLogging>> logging();
public Output<Optional<List<BucketLifecycleRule>>> lifecycleRules();
public Output<Optional<BucketServerSideEncryptionConfiguration>> serverSideEncryptionConfiguration();
public Output<Optional<BucketWebsite>> website();
public Output<Optional<Map<String, String>>> tags();
}
public class BucketArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder acl(Output<String> acl);
public Builder corsRules(Output<List<BucketCorsRuleArgs>> corsRules);
public Builder versioning(Output<BucketVersioningArgs> versioning);
public Builder logging(Output<BucketLoggingArgs> logging);
public Builder lifecycleRules(Output<List<BucketLifecycleRuleArgs>> lifecycleRules);
public Builder serverSideEncryptionConfiguration(Output<BucketServerSideEncryptionConfigurationArgs> serverSideEncryptionConfiguration);
public Builder website(Output<BucketWebsiteArgs> website);
public Builder forceDestroy(Output<Boolean> forceDestroy);
public Builder objectLockEnabled(Output<Boolean> objectLockEnabled);
public Builder tags(Output<Map<String, String>> tags);
public BucketArgs build();
}
}Upload and manage objects in S3 buckets.
@ResourceType(type="aws:s3/bucketObject:BucketObject")
public class BucketObject extends com.pulumi.resources.CustomResource {
public BucketObject(String name, BucketObjectArgs args);
public BucketObject(String name, BucketObjectArgs args, @Nullable CustomResourceOptions options);
public Output<String> id();
public Output<String> bucket();
public Output<String> key();
public Output<Optional<Asset>> source();
public Output<Optional<String>> content();
public Output<Optional<String>> contentType();
public Output<Optional<String>> acl();
public Output<String> etag();
public Output<String> versionId();
public Output<Optional<String>> storageClass();
public Output<Optional<String>> serverSideEncryption();
public Output<Optional<String>> kmsKeyId();
public Output<Optional<Map<String, String>>> metadata();
public Output<Optional<Map<String, String>>> tags();
}
public class BucketObjectArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
// Required
public Builder bucket(Output<String> bucket);
public Builder key(Output<String> key);
// Content (one required)
public Builder source(Output<Asset> source);
public Builder content(Output<String> content);
// Optional
public Builder acl(Output<String> acl);
public Builder contentType(Output<String> contentType);
public Builder contentDisposition(Output<String> contentDisposition);
public Builder contentEncoding(Output<String> contentEncoding);
public Builder contentLanguage(Output<String> contentLanguage);
public Builder storageClass(Output<String> storageClass);
public Builder serverSideEncryption(Output<String> serverSideEncryption);
public Builder kmsKeyId(Output<String> kmsKeyId);
public Builder metadata(Output<Map<String, String>> metadata);
public Builder tags(Output<Map<String, String>> tags);
public Builder cacheControl(Output<String> cacheControl);
public BucketObjectArgs build();
}
}Manage bucket-level IAM policies.
@ResourceType(type="aws:s3/bucketPolicy:BucketPolicy")
public class BucketPolicy extends com.pulumi.resources.CustomResource {
public BucketPolicy(String name, BucketPolicyArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<String> policy();
}
public class BucketPolicyArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder policy(Output<String> policy);
public BucketPolicyArgs build();
}
}Block public access to S3 buckets.
@ResourceType(type="aws:s3/bucketPublicAccessBlock:BucketPublicAccessBlock")
public class BucketPublicAccessBlock extends com.pulumi.resources.CustomResource {
public BucketPublicAccessBlock(String name, BucketPublicAccessBlockArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<Optional<Boolean>> blockPublicAcls();
public Output<Optional<Boolean>> blockPublicPolicy();
public Output<Optional<Boolean>> ignorePublicAcls();
public Output<Optional<Boolean>> restrictPublicBuckets();
}
public class BucketPublicAccessBlockArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder blockPublicAcls(Output<Boolean> blockPublicAcls);
public Builder blockPublicPolicy(Output<Boolean> blockPublicPolicy);
public Builder ignorePublicAcls(Output<Boolean> ignorePublicAcls);
public Builder restrictPublicBuckets(Output<Boolean> restrictPublicBuckets);
public BucketPublicAccessBlockArgs build();
}
}Enable versioning for S3 buckets.
@ResourceType(type="aws:s3/bucketVersioning:BucketVersioning")
public class BucketVersioning extends com.pulumi.resources.CustomResource {
public BucketVersioning(String name, BucketVersioningArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<BucketVersioningVersioningConfiguration> versioningConfiguration();
}
public class BucketVersioningArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder versioningConfiguration(Output<BucketVersioningVersioningConfigurationArgs> versioningConfiguration);
public BucketVersioningArgs build();
}
}Manage object lifecycle policies.
@ResourceType(type="aws:s3/bucketLifecycleConfiguration:BucketLifecycleConfiguration")
public class BucketLifecycleConfiguration extends com.pulumi.resources.CustomResource {
public BucketLifecycleConfiguration(String name, BucketLifecycleConfigurationArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<List<BucketLifecycleConfigurationRule>> rules();
}
public class BucketLifecycleConfigurationArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder rules(Output<List<BucketLifecycleConfigurationRuleArgs>> rules);
public BucketLifecycleConfigurationArgs build();
}
}Configure event notifications for S3 buckets.
@ResourceType(type="aws:s3/bucketNotification:BucketNotification")
public class BucketNotification extends com.pulumi.resources.CustomResource {
public BucketNotification(String name, BucketNotificationArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<Optional<List<BucketNotificationLambdaFunction>>> lambdaFunctions();
public Output<Optional<List<BucketNotificationQueue>>> queues();
public Output<Optional<List<BucketNotificationTopic>>> topics();
}
public class BucketNotificationArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder lambdaFunctions(Output<List<BucketNotificationLambdaFunctionArgs>> lambdaFunctions);
public Builder queues(Output<List<BucketNotificationQueueArgs>> queues);
public Builder topics(Output<List<BucketNotificationTopicArgs>> topics);
public BucketNotificationArgs build();
}
}Configure Cross-Origin Resource Sharing.
@ResourceType(type="aws:s3/bucketCorsConfiguration:BucketCorsConfiguration")
public class BucketCorsConfiguration extends com.pulumi.resources.CustomResource {
public BucketCorsConfiguration(String name, BucketCorsConfigurationArgs args);
public Output<String> id();
public Output<String> bucket();
public Output<List<BucketCorsConfigurationCorsRule>> corsRules();
}
public class BucketCorsConfigurationArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder bucket(Output<String> bucket);
public Builder corsRules(Output<List<BucketCorsConfigurationCorsRuleArgs>> corsRules);
public BucketCorsConfigurationArgs build();
}
}Query existing S3 resources.
public class S3Functions {
// Get bucket information
public static Output<GetBucketResult> getBucket(GetBucketArgs args);
public static CompletableFuture<GetBucketResult> getBucketPlain(GetBucketArgs args);
// Get bucket object
public static Output<GetBucketObjectResult> getBucketObject(GetBucketObjectArgs args);
public static CompletableFuture<GetBucketObjectResult> getBucketObjectPlain(GetBucketObjectArgs args);
// List bucket objects
public static Output<GetBucketObjectsResult> getBucketObjects(GetBucketObjectsArgs args);
public static CompletableFuture<GetBucketObjectsResult> getBucketObjectsPlain(GetBucketObjectsArgs args);
}import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.aws.s3.*;
import com.pulumi.aws.s3.inputs.*;
import com.pulumi.asset.FileAsset;
import com.pulumi.asset.StringAsset;
import java.util.Map;
import java.util.List;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
// Create an S3 bucket
var bucket = new Bucket("my-bucket", BucketArgs.builder()
.bucket("my-unique-bucket-name")
.tags(Map.of(
"Environment", "Production",
"Project", "MyApp"
))
.build());
// Block public access
var publicAccessBlock = new BucketPublicAccessBlock("bucket-pab",
BucketPublicAccessBlockArgs.builder()
.bucket(bucket.id())
.blockPublicAcls(true)
.blockPublicPolicy(true)
.ignorePublicAcls(true)
.restrictPublicBuckets(true)
.build());
// Enable versioning
var versioning = new BucketVersioning("bucket-versioning",
BucketVersioningArgs.builder()
.bucket(bucket.id())
.versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
.status("Enabled")
.build())
.build());
// Configure lifecycle
var lifecycle = new BucketLifecycleConfiguration("bucket-lifecycle",
BucketLifecycleConfigurationArgs.builder()
.bucket(bucket.id())
.rules(
BucketLifecycleConfigurationRuleArgs.builder()
.id("archive-old-versions")
.status("Enabled")
.transitions(
BucketLifecycleConfigurationRuleTransitionArgs.builder()
.days(30)
.storageClass("STANDARD_IA")
.build(),
BucketLifecycleConfigurationRuleTransitionArgs.builder()
.days(90)
.storageClass("GLACIER")
.build()
)
.expiration(BucketLifecycleConfigurationRuleExpirationArgs.builder()
.days(365)
.build())
.build()
)
.build());
// Upload an object
var file = new BucketObject("index.html", BucketObjectArgs.builder()
.bucket(bucket.id())
.key("index.html")
.source(new FileAsset("./public/index.html"))
.contentType("text/html")
.acl("private")
.build());
// Configure CORS
var cors = new BucketCorsConfiguration("bucket-cors",
BucketCorsConfigurationArgs.builder()
.bucket(bucket.id())
.corsRules(BucketCorsConfigurationCorsRuleArgs.builder()
.allowedHeaders("*")
.allowedMethods("GET", "HEAD")
.allowedOrigins("https://example.com")
.exposeHeaders("ETag")
.maxAgeSeconds(3000)
.build())
.build());
// Bucket policy for CloudFront access
var bucketPolicy = new BucketPolicy("bucket-policy", BucketPolicyArgs.builder()
.bucket(bucket.id())
.policy(bucket.arn().applyValue(arn -> String.format("""
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "%s/*"
}]
}
""", arn)))
.build());
// Export bucket details
ctx.export("bucketName", bucket.id());
ctx.export("bucketArn", bucket.arn());
ctx.export("bucketDomainName", bucket.bucketDomainName());
}
}