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 EC2 provides resizable virtual machines in the cloud.
import com.pulumi.aws.ec2.Instance;
import com.pulumi.aws.ec2.InstanceArgs;
import com.pulumi.aws.ec2.Ami;
import com.pulumi.aws.ec2.AmiArgs;
import com.pulumi.aws.ec2.KeyPair;
import com.pulumi.aws.ec2.KeyPairArgs;
import com.pulumi.aws.ec2.SecurityGroup;
import com.pulumi.aws.ec2.SecurityGroupArgs;
import com.pulumi.aws.ec2.LaunchTemplate;
import com.pulumi.aws.ec2.LaunchTemplateArgs;
import com.pulumi.aws.ec2.Ec2Functions;
import com.pulumi.aws.ec2.inputs.GetAmiArgs;
import com.pulumi.aws.ec2.inputs.GetInstanceArgs;Create and manage EC2 instances.
@ResourceType(type="aws:ec2/instance:Instance")
public class Instance extends com.pulumi.resources.CustomResource {
public Instance(String name, InstanceArgs args);
public Instance(String name, InstanceArgs args, @Nullable CustomResourceOptions options);
// Exported Properties
public Output<String> ami();
public Output<String> arn();
public Output<String> instanceType();
public Output<String> availabilityZone();
public Output<Optional<String>> keyName();
public Output<Optional<List<String>>> securityGroups();
public Output<Optional<List<String>>> vpcSecurityGroupIds();
public Output<Optional<String>> subnetId();
public Output<Optional<String>> privateIp();
public Output<String> publicIp();
public Output<String> publicDns();
public Output<String> privateDns();
public Output<String> instanceState();
public Output<Optional<Map<String, String>>> tags();
public Output<Optional<String>> userData();
public Output<Optional<String>> iamInstanceProfile();
public Output<Optional<Boolean>> associatePublicIpAddress();
public Output<Optional<Boolean>> sourceDestCheck();
public Output<Optional<Boolean>> monitoring();
public Output<Optional<List<InstanceEbsBlockDevice>>> ebsBlockDevices();
public Output<Optional<InstanceRootBlockDevice>> rootBlockDevice();
public Output<Optional<InstanceMetadataOptions>> metadataOptions();
}
public class InstanceArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
// Required
public Builder ami(Output<String> ami);
public Builder instanceType(Output<String> instanceType);
// Optional
public Builder keyName(Output<String> keyName);
public Builder securityGroups(Output<List<String>> securityGroups);
public Builder vpcSecurityGroupIds(Output<List<String>> vpcSecurityGroupIds);
public Builder subnetId(Output<String> subnetId);
public Builder availabilityZone(Output<String> availabilityZone);
public Builder privateIp(Output<String> privateIp);
public Builder associatePublicIpAddress(Output<Boolean> associatePublicIpAddress);
public Builder sourceDestCheck(Output<Boolean> sourceDestCheck);
public Builder userData(Output<String> userData);
public Builder iamInstanceProfile(Output<String> iamInstanceProfile);
public Builder tags(Output<Map<String, String>> tags);
public Builder monitoring(Output<Boolean> monitoring);
public Builder ebsBlockDevices(Output<List<InstanceEbsBlockDeviceArgs>> ebsBlockDevices);
public Builder rootBlockDevice(Output<InstanceRootBlockDeviceArgs> rootBlockDevice);
public Builder metadataOptions(Output<InstanceMetadataOptionsArgs> metadataOptions);
public Builder cpuOptions(Output<InstanceCpuOptionsArgs> cpuOptions);
public Builder creditSpecification(Output<InstanceCreditSpecificationArgs> creditSpecification);
public Builder launchTemplate(Output<InstanceLaunchTemplateArgs> launchTemplate);
public Builder instanceMarketOptions(Output<InstanceInstanceMarketOptionsArgs> instanceMarketOptions);
public InstanceArgs build();
}
}Create and manage Amazon Machine Images.
@ResourceType(type="aws:ec2/ami:Ami")
public class Ami extends com.pulumi.resources.CustomResource {
public Ami(String name, AmiArgs args);
public Ami(String name, AmiArgs args, @Nullable CustomResourceOptions options);
public Output<String> id();
public Output<String> arn();
public Output<String> name();
public Output<Optional<String>> description();
public Output<String> architecture();
public Output<String> imageLocation();
public Output<String> rootDeviceName();
public Output<Optional<String>> virtualizationType();
public Output<Optional<List<AmiEbsBlockDevice>>> ebsBlockDevices();
public Output<Optional<Map<String, String>>> tags();
}
public class AmiArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder name(Output<String> name);
public Builder description(Output<String> description);
public Builder architecture(Output<String> architecture);
public Builder imageLocation(Output<String> imageLocation);
public Builder rootDeviceName(Output<String> rootDeviceName);
public Builder virtualizationType(Output<String> virtualizationType);
public Builder ebsBlockDevices(Output<List<AmiEbsBlockDeviceArgs>> ebsBlockDevices);
public Builder ephemeralBlockDevices(Output<List<AmiEphemeralBlockDeviceArgs>> ephemeralBlockDevices);
public Builder tags(Output<Map<String, String>> tags);
public AmiArgs build();
}
}Define launch parameters for EC2 instances.
@ResourceType(type="aws:ec2/launchTemplate:LaunchTemplate")
public class LaunchTemplate extends com.pulumi.resources.CustomResource {
public LaunchTemplate(String name, LaunchTemplateArgs args);
public Output<String> id();
public Output<String> arn();
public Output<String> name();
public Output<Integer> latestVersion();
public Output<Integer> defaultVersion();
public Output<Optional<String>> imageId();
public Output<Optional<String>> instanceType();
public Output<Optional<String>> keyName();
public Output<Optional<String>> userData();
}
public class LaunchTemplateArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder name(Output<String> name);
public Builder description(Output<String> description);
public Builder imageId(Output<String> imageId);
public Builder instanceType(Output<String> instanceType);
public Builder keyName(Output<String> keyName);
public Builder userData(Output<String> userData);
public Builder blockDeviceMappings(Output<List<LaunchTemplateBlockDeviceMappingArgs>> blockDeviceMappings);
public Builder networkInterfaces(Output<List<LaunchTemplateNetworkInterfaceArgs>> networkInterfaces);
public Builder iamInstanceProfile(Output<LaunchTemplateIamInstanceProfileArgs> iamInstanceProfile);
public Builder monitoring(Output<LaunchTemplateMonitoringArgs> monitoring);
public Builder placement(Output<LaunchTemplatePlacementArgs> placement);
public Builder tags(Output<Map<String, String>> tags);
public Builder tagSpecifications(Output<List<LaunchTemplateTagSpecificationArgs>> tagSpecifications);
public LaunchTemplateArgs build();
}
}Control inbound and outbound traffic for EC2 instances.
@ResourceType(type="aws:ec2/securityGroup:SecurityGroup")
public class SecurityGroup extends com.pulumi.resources.CustomResource {
public SecurityGroup(String name, SecurityGroupArgs args);
public Output<String> id();
public Output<String> arn();
public Output<String> name();
public Output<Optional<String>> description();
public Output<String> vpcId();
public Output<Optional<List<SecurityGroupIngress>>> ingress();
public Output<Optional<List<SecurityGroupEgress>>> egress();
}
public class SecurityGroupArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder name(Output<String> name);
public Builder description(Output<String> description);
public Builder vpcId(Output<String> vpcId);
public Builder ingress(Output<List<SecurityGroupIngressArgs>> ingress);
public Builder egress(Output<List<SecurityGroupEgressArgs>> egress);
public Builder tags(Output<Map<String, String>> tags);
public SecurityGroupArgs build();
}
}Manage SSH key pairs for EC2 instances.
@ResourceType(type="aws:ec2/keyPair:KeyPair")
public class KeyPair extends com.pulumi.resources.CustomResource {
public KeyPair(String name, KeyPairArgs args);
public Output<String> keyName();
public Output<String> keyPairId();
public Output<String> fingerprint();
public Output<Optional<String>> publicKey();
}
public class KeyPairArgs extends com.pulumi.resources.ResourceArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder keyName(Output<String> keyName);
public Builder publicKey(Output<String> publicKey);
public Builder tags(Output<Map<String, String>> tags);
public KeyPairArgs build();
}
}Query existing EC2 resources.
public class Ec2Functions {
// Get AMI by filters
public static Output<GetAmiResult> getAmi(GetAmiArgs args);
public static CompletableFuture<GetAmiResult> getAmiPlain(GetAmiArgs args);
// Get instance information
public static Output<GetInstanceResult> getInstance(GetInstanceArgs args);
public static CompletableFuture<GetInstanceResult> getInstancePlain(GetInstanceArgs args);
// Get instances list
public static Output<GetInstancesResult> getInstances(GetInstancesArgs args);
public static CompletableFuture<GetInstancesResult> getInstancesPlain(GetInstancesArgs args);
// Get security group
public static Output<GetSecurityGroupResult> getSecurityGroup(GetSecurityGroupArgs args);
public static CompletableFuture<GetSecurityGroupResult> getSecurityGroupPlain(GetSecurityGroupArgs args);
}
public class GetAmiArgs {
public static Builder builder() { return new Builder(); }
public static final class Builder {
public Builder mostRecent(Boolean mostRecent);
public Builder owners(List<String> owners);
public Builder filters(List<GetAmiFilterArgs> filters);
public Builder nameRegex(String nameRegex);
public GetAmiArgs build();
}
}import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.aws.ec2.*;
import com.pulumi.aws.ec2.inputs.*;
import java.util.Map;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
// Create a key pair
var keyPair = new KeyPair("my-key", KeyPairArgs.builder()
.keyName("my-key-pair")
.publicKey("ssh-rsa AAAAB3NzaC1...")
.build());
// Create a security group
var securityGroup = new SecurityGroup("web-sg", SecurityGroupArgs.builder()
.name("web-security-group")
.description("Allow HTTP and SSH")
.ingress(
SecurityGroupIngressArgs.builder()
.protocol("tcp")
.fromPort(22)
.toPort(22)
.cidrBlocks("0.0.0.0/0")
.build(),
SecurityGroupIngressArgs.builder()
.protocol("tcp")
.fromPort(80)
.toPort(80)
.cidrBlocks("0.0.0.0/0")
.build()
)
.egress(SecurityGroupEgressArgs.builder()
.protocol("-1")
.fromPort(0)
.toPort(0)
.cidrBlocks("0.0.0.0/0")
.build())
.tags(Map.of("Name", "web-sg"))
.build());
// Look up latest Ubuntu AMI
var ubuntu = Ec2Functions.getAmi(GetAmiArgs.builder()
.mostRecent(true)
.owners("099720109477")
.filters(
GetAmiFilterArgs.builder()
.name("name")
.values("ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*")
.build(),
GetAmiFilterArgs.builder()
.name("virtualization-type")
.values("hvm")
.build()
)
.build());
// Create an EC2 instance
var instance = new Instance("web-server", InstanceArgs.builder()
.ami(ubuntu.applyValue(GetAmiResult::id))
.instanceType("t3.micro")
.keyName(keyPair.keyName())
.vpcSecurityGroupIds(securityGroup.id().applyValue(List::of))
.userData("""
#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl start nginx
""")
.tags(Map.of(
"Name", "web-server",
"Environment", "production"
))
.build());
// Export instance details
ctx.export("instanceId", instance.id());
ctx.export("instancePublicIp", instance.publicIp());
ctx.export("instancePublicDns", instance.publicDns());
}
}