package core.aws.task.ec2; import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest; import com.amazonaws.services.ec2.model.CreateTagsRequest; import core.aws.client.AWS; import core.aws.env.Context; import core.aws.resource.ec2.SecurityGroup; import core.aws.util.Threads; import core.aws.workflow.Action; import java.time.Duration; /** * @author neo */ @Action("create-sg") public class CreateSGTask extends core.aws.workflow.Task<SecurityGroup> { public CreateSGTask(SecurityGroup securityGroup) { super(securityGroup); } @Override public void execute(Context context) throws Exception { EC2TagHelper tags = new EC2TagHelper(context.env); String description = context.env.name + ":" + resource.id; CreateSecurityGroupRequest request = new CreateSecurityGroupRequest(resource.name, description); if (resource.vpc != null) request.withVpcId(resource.vpc.remoteVPC.getVpcId()); resource.remoteSecurityGroup = AWS.ec2.createSecurityGroup(request); Threads.sleepRoughly(Duration.ofSeconds(5)); // wait small period of time, for sg to be visible for creating tag AWS.ec2.createTags(new CreateTagsRequest() .withResources(resource.remoteSecurityGroup.getGroupId()) .withTags(tags.env(), tags.resourceId(resource.id), tags.name(resource.id))); } }