Now that you have a project configured to use AWS, you’ll create some basic infrastructure in it. We will start with a simple S3 bucket.
Update the imports in the App.java file as follows:
// ...
import com.pulumi.Pulumi;
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.s3.inputs.BucketWebsiteArgs;Add the following code to your main method in the App class in the App.java file:
// ...
var bucket = new Bucket("my-website-bucket",
BucketArgs.builder()
.website(BucketWebsiteArgs.builder().indexDocument("index.html").build())
.build()
);
// ...✅ After this change, your
App.javashould look like this:
package myproject;
import com.pulumi.Pulumi;
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.s3.inputs.BucketWebsiteArgs;
public class App {
public static void main(String[] args) {
Pulumi.run(ctx -> {
var bucket = new Bucket("my-website-bucket",
BucketArgs.builder()
.website(BucketWebsiteArgs.builder().indexDocument("index.html").build())
.build()
);
});
}
}Now preview your changes:
pulumi up
This command evaluates your program, determines the resource updates to make, and shows you an outline of these changes:
Previewing update (dev):
Type Name Plan
+ pulumi:pulumi:Stack java-iac-workshop-dev create
+ └─ aws:s3:Bucket my-website-bucket create
Resources:
+ 2 to create
Do you want to perform this update?
yes
> no
details
This is a summary view. Select details to view the full set of properties:
+ pulumi:pulumi:Stack: (create)
[urn=urn:pulumi:iac-workshop-dev::java::pulumi:pulumi:Stack::java-iac-workshop-dev]
+ aws:s3/bucket:Bucket: (create)
[urn=urn:pulumi:iac-workshop-dev::java::aws:s3/bucket:Bucket::my-website-bucket]
[provider=urn:pulumi:iac-workshop-dev::java::pulumi:providers:aws::default_4_37_3::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
acl : "private"
bucket : "my-website-bucket-19643db"
forceDestroy: false
website : {
indexDocument: "index.html"
}
Do you want to perform this update? [Use arrows to move, enter to select, type to filter]
yes
> no
details
The stack resource is a synthetic resource that all resources your program creates are parented to.
Now that we’ve seen the full set of changes, let’s deploy them. Select yes:
Updating (dev):
Type Name Status
+ pulumi:pulumi:Stack java-iac-workshop-dev created
+ └─ aws:s3:Bucket my-website-bucket created
Resources:
+ 2 created
Duration: 8s
Permalink: https://app.pulumi.com/workshops/iac-workshop/dev/updates/1
Now our S3 bucket has been created in our AWS account. Feel free to click the Permalink URL and explore; this will take you to the Pulumi Console, which records your deployment history.
To inspect your new bucket, you will need its physical AWS name. Pulumi records a logical name, my-bucket, however the resulting AWS name will be different.
Programs can export variables which will be shown in the CLI and recorded for each deployment. Export your bucket’s name by adding this line to App.java at the end of the main method:
// ...
ctx.export("bucket_name", bucket.bucket());
// ...✅ After this change, your
Main.javashould look like this:
package myproject;
import com.pulumi.Pulumi;
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.s3.inputs.BucketWebsiteArgs;
public class App {
public static void main(String[] args) {
Pulumi.run(ctx -> {
var bucket = new Bucket("my-website-bucket",
BucketArgs.builder()
.website(BucketWebsiteArgs.builder().indexDocument("index.html").build())
.build()
);
ctx.export("bucket_name", bucket.bucket());
});
}
}Now deploy the changes:
pulumi up --yesNotice a new Outputs section is included in the output containing the bucket’s name:
Outputs:
+ bucket_name: "my-website-bucket-4d8d96b"
Resources:
2 unchanged
Duration: 3s
Permalink: https://app.pulumi.com/workshops/iac-workshop/dev/updates/2
The difference between logical and physical names is in part due to “auto-naming” which Pulumi does to ensure side-by-side projects and zero-downtime upgrades work seamlessly. It can be disabled if you wish; read more about auto-naming here.
Now run the aws CLI to list the objects in this new bucket:
aws s3 ls $(pulumi stack output bucket_name)
Note that the bucket is currently empty, so you get a blank output without an error.