Skip to content

Commit eba6df6

Browse files
authored
Merge branch 'main' into main
2 parents 387b538 + 59404bb commit eba6df6

File tree

47 files changed

+10210
-258
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+10210
-258
lines changed

cpp/example_code/medical-imaging/start_dicom_import_job.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
\param outputBucketName: The name of the S3 bucket for the output.
3030
\param outputDirectory: The directory in the S3 bucket to store the output.
3131
\param roleArn: The ARN of the IAM role with permissions for the import.
32-
\param importConfigJson: The import configuration JSON string (optional).
3332
\param importJobId: A string to receive the import job ID.
3433
\param clientConfig: Aws client configuration.
3534
\return bool: Function succeeded.
@@ -38,7 +37,6 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob(
3837
const Aws::String &dataStoreID, const Aws::String &inputBucketName,
3938
const Aws::String &inputDirectory, const Aws::String &outputBucketName,
4039
const Aws::String &outputDirectory, const Aws::String &roleArn,
41-
const Aws::String &importConfigJson,
4240
Aws::String &importJobId,
4341
const Aws::Client::ClientConfiguration &clientConfig) {
4442
Aws::MedicalImaging::MedicalImagingClient medicalImagingClient(clientConfig);
@@ -50,20 +48,8 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob(
5048
startDICOMImportJobRequest.SetInputS3Uri(inputURI);
5149
startDICOMImportJobRequest.SetOutputS3Uri(outputURI);
5250

53-
if (!importConfigJson.empty()) {
54-
Aws::Utils::Json::JsonValue jsonValue(importConfigJson);
55-
if (jsonValue.WasParseSuccessful()) {
56-
startDICOMImportJobRequest.SetImportConfiguration(
57-
Aws::MedicalImaging::Model::ImportConfiguration(jsonValue));
58-
}
59-
else {
60-
std::cerr << "Failed to parse import configuration JSON" << std::endl;
61-
return false;
62-
}
63-
}
64-
65-
Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome =
66-
medicalImagingClient.StartDICOMImportJob(startDICOMImportJobRequest);
51+
Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome = medicalImagingClient.StartDICOMImportJob(
52+
startDICOMImportJobRequest);
6753

6854
if (startDICOMImportJobOutcome.IsSuccess()) {
6955
importJobId = startDICOMImportJobOutcome.GetResult().GetJobId();

javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,13 @@ import { medicalImagingClient } from "../libs/medicalImagingClient.js";
1313
* @param {string} dataAccessRoleArn - The Amazon Resource Name (ARN) of the role that grants permission.
1414
* @param {string} inputS3Uri - The URI of the S3 bucket containing the input files.
1515
* @param {string} outputS3Uri - The URI of the S3 bucket where the output files are stored.
16-
* @param {Object} importConfiguration - The configuration for digital pathology import.
1716
*/
1817
export const startDicomImportJob = async (
1918
jobName = "test-1",
2019
datastoreId = "12345678901234567890123456789012",
2120
dataAccessRoleArn = "arn:aws:iam::xxxxxxxxxxxx:role/ImportJobDataAccessRole",
2221
inputS3Uri = "s3://medical-imaging-dicom-input/dicom_input/",
2322
outputS3Uri = "s3://medical-imaging-output/job_output/",
24-
importConfiguration = {
25-
digitalPathologyImportConfiguration: {
26-
qualityFactor: 85,
27-
fileMetadataMappings: [
28-
{
29-
imageFilePath: "image.svs",
30-
metadataFilePath: "metadata.json",
31-
},
32-
],
33-
},
34-
},
3523
) => {
3624
const response = await medicalImagingClient.send(
3725
new StartDICOMImportJobCommand({
@@ -40,7 +28,6 @@ export const startDicomImportJob = async (
4028
dataAccessRoleArn: dataAccessRoleArn,
4129
inputS3Uri: inputS3Uri,
4230
outputS3Uri: outputS3Uri,
43-
importConfiguration: importConfiguration,
4431
}),
4532
);
4633
console.log(response);

javav2/example_code/autoscale/pom.xml

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
<version>1.0-SNAPSHOT</version>
99
<properties>
1010
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
11-
<java.version>21</java.version>
12-
<maven.compiler.target>21</maven.compiler.target>
13-
<maven.compiler.source>21</maven.compiler.source>
11+
<java.version>17</java.version>
12+
<maven.compiler.target>17</maven.compiler.target>
13+
<maven.compiler.source>17</maven.compiler.source>
1414
</properties>
1515
<build>
1616
<plugins>
@@ -30,13 +30,6 @@
3030
<type>pom</type>
3131
<scope>import</scope>
3232
</dependency>
33-
<dependency>
34-
<groupId>org.apache.logging.log4j</groupId>
35-
<artifactId>log4j-bom</artifactId>
36-
<version>2.23.1</version>
37-
<type>pom</type>
38-
<scope>import</scope>
39-
</dependency>
4033
</dependencies>
4134
</dependencyManagement>
4235
<dependencies>
@@ -50,47 +43,38 @@
5043
<groupId>software.amazon.awssdk</groupId>
5144
<artifactId>secretsmanager</artifactId>
5245
</dependency>
53-
<dependency>
54-
<groupId>com.google.code.gson</groupId>
55-
<artifactId>gson</artifactId>
56-
<version>2.10.1</version>
57-
</dependency>
5846
<dependency>
5947
<groupId>software.amazon.awssdk</groupId>
60-
<artifactId>autoscaling</artifactId>
48+
<artifactId>cloudformation</artifactId>
6149
</dependency>
6250
<dependency>
6351
<groupId>software.amazon.awssdk</groupId>
6452
<artifactId>ec2</artifactId>
6553
</dependency>
6654
<dependency>
6755
<groupId>software.amazon.awssdk</groupId>
68-
<artifactId>auth</artifactId>
56+
<artifactId>netty-nio-client</artifactId>
6957
</dependency>
7058
<dependency>
71-
<groupId>software.amazon.awssdk</groupId>
72-
<artifactId>sso</artifactId>
59+
<groupId>com.google.code.gson</groupId>
60+
<artifactId>gson</artifactId>
61+
<version>2.10.1</version>
7362
</dependency>
7463
<dependency>
7564
<groupId>software.amazon.awssdk</groupId>
76-
<artifactId>ssooidc</artifactId>
77-
</dependency>
78-
<dependency>
79-
<groupId>org.apache.logging.log4j</groupId>
80-
<artifactId>log4j-core</artifactId>
65+
<artifactId>autoscaling</artifactId>
8166
</dependency>
8267
<dependency>
83-
<groupId>org.slf4j</groupId>
84-
<artifactId>slf4j-api</artifactId>
85-
<version>2.0.13</version>
68+
<groupId>software.amazon.awssdk</groupId>
69+
<artifactId>auth</artifactId>
8670
</dependency>
8771
<dependency>
88-
<groupId>org.apache.logging.log4j</groupId>
89-
<artifactId>log4j-slf4j2-impl</artifactId>
72+
<groupId>software.amazon.awssdk</groupId>
73+
<artifactId>sso</artifactId>
9074
</dependency>
9175
<dependency>
92-
<groupId>org.apache.logging.log4j</groupId>
93-
<artifactId>log4j-1.2-api</artifactId>
76+
<groupId>software.amazon.awssdk</groupId>
77+
<artifactId>ssooidc</artifactId>
9478
</dependency>
9579
</dependencies>
9680
</project>

javav2/example_code/autoscale/src/main/java/com/example/autoscaling/scenario/AutoScalingScenario.java

Lines changed: 112 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,21 @@
2929
import software.amazon.awssdk.services.autoscaling.model.TerminateInstanceInAutoScalingGroupRequest;
3030
import software.amazon.awssdk.services.autoscaling.model.DescribeAutoScalingInstancesRequest;
3131
import software.amazon.awssdk.services.ec2.Ec2Client;
32+
import software.amazon.awssdk.services.ec2.model.CreateLaunchTemplateVersionRequest;
33+
import software.amazon.awssdk.services.ec2.model.CreateLaunchTemplateVersionResponse;
34+
import software.amazon.awssdk.services.ec2.model.DescribeSubnetsRequest;
35+
import software.amazon.awssdk.services.ec2.model.DescribeSubnetsResponse;
36+
import software.amazon.awssdk.services.ec2.model.DescribeVpcsRequest;
37+
import software.amazon.awssdk.services.ec2.model.DescribeVpcsResponse;
38+
import software.amazon.awssdk.services.ec2.model.Ec2Exception;
39+
import software.amazon.awssdk.services.ec2.model.Filter;
40+
import software.amazon.awssdk.services.ec2.model.ModifyLaunchTemplateRequest;
41+
import software.amazon.awssdk.services.ec2.model.RequestLaunchTemplateData;
42+
import software.amazon.awssdk.services.ec2.model.ResponseLaunchTemplateData;
43+
import software.amazon.awssdk.services.ec2.model.Vpc;
3244

3345
import java.util.List;
46+
import java.util.Map;
3447
// snippet-end:[autoscale.java2.create_scaling_scenario.import]
3548

3649
// snippet-start:[autoscale.java2.create_scaling_scenario.main]
@@ -65,41 +78,42 @@
6578

6679
public class AutoScalingScenario {
6780
public static final String DASHES = new String(new char[80]).replace("\0", "-");
68-
81+
private static final String ROLES_STACK = "MyCdkAutoScaleStack";
6982
public static void main(String[] args) throws InterruptedException {
7083
final String usage = """
7184
7285
Usage:
73-
<groupName> <launchTemplateName> <vpcZoneId>
86+
<groupName>
7487
7588
Where:
7689
groupName - The name of the Auto Scaling group.
77-
launchTemplateName - The name of the launch template.\s
78-
vpcZoneId - A subnet Id for a virtual private cloud (VPC) where instances in the Auto Scaling group can be created.
7990
""";
8091

81-
//if (args.length != 3) {
82-
// System.out.println(usage);
83-
// System.exit(1);
84-
// }
85-
86-
String groupName = "Scott250" ; //rgs[0];
87-
String launchTemplateName = "MyTemplate5" ;//args[1];
88-
String vpcZoneId = "subnet-0ddc451b8a8a1aa44" ; //args[2];
89-
92+
String groupName = "MyAutoScalingGroup2";
9093
AutoScalingClient autoScalingClient = AutoScalingClient.builder()
91-
.region(Region.US_EAST_1)
94+
.region(Region.US_WEST_2)
9295
.build();
9396

94-
Ec2Client ec2 = Ec2Client.create();
97+
Ec2Client ec2 = Ec2Client.builder()
98+
.region(Region.US_WEST_2)
99+
.build();
95100

96101
System.out.println(DASHES);
97102
System.out.println("Welcome to the Amazon EC2 Auto Scaling example scenario.");
98103
System.out.println(DASHES);
99104

100105
System.out.println(DASHES);
106+
System.out.println("First, we will create a launch template using a CloudFormation script");
107+
CloudFormationHelper.deployCloudFormationStack(ROLES_STACK);
108+
Map<String, String> stackOutputs = CloudFormationHelper.getStackOutputsAsync(ROLES_STACK).join();
109+
String launchTemplateName = stackOutputs.get("LaunchTemplateNameOutput");
110+
String vpcZoneId = getVPC(ec2);
111+
updateTemlate(ec2, launchTemplateName );
112+
System.out.println("The VPC zone id created by the CloudFormation stack is"+vpcZoneId);
113+
101114
System.out.println("1. Create an Auto Scaling group named " + groupName);
102-
createAutoScalingGroup(autoScalingClient, groupName, launchTemplateName, vpcZoneId);
115+
createAutoScalingGroup(autoScalingClient, ec2, groupName, launchTemplateName, vpcZoneId);
116+
103117
System.out.println(
104118
"Wait 1 min for the resources, including the instance. Otherwise, an empty instance Id is returned");
105119
Thread.sleep(60000);
@@ -170,7 +184,8 @@ public static void main(String[] args) throws InterruptedException {
170184
System.out.println(DASHES);
171185

172186
System.out.println(DASHES);
173-
System.out.println("13. Delete the Auto Scaling group");
187+
System.out.println("13. Delete the Auto Scaling group and cloud formation resources");
188+
CloudFormationHelper.destroyCloudFormationStack(ROLES_STACK);
174189
deleteAutoScalingGroup(autoScalingClient, groupName);
175190
System.out.println(DASHES);
176191

@@ -181,6 +196,56 @@ public static void main(String[] args) throws InterruptedException {
181196
autoScalingClient.close();
182197
}
183198

199+
public static String getVPC(Ec2Client ec2) {
200+
try {
201+
DescribeVpcsRequest request = DescribeVpcsRequest.builder()
202+
.filters(f -> f.name("isDefault").values("true"))
203+
.build();
204+
205+
DescribeVpcsResponse response = ec2.describeVpcs(request);
206+
207+
if (!response.vpcs().isEmpty()) {
208+
Vpc defaultVpc = response.vpcs().get(0);
209+
System.out.println("Default VPC ID: " + defaultVpc.vpcId());
210+
return defaultVpc.vpcId();
211+
} else {
212+
System.out.println("No default VPC found.");
213+
return null; // Return null if no default VPC is found
214+
}
215+
216+
} catch (Ec2Exception e) {
217+
System.err.println("EC2 error: " + e.awsErrorDetails().errorMessage());
218+
return null; // Return null in case of an error
219+
}
220+
}
221+
222+
223+
public static void updateTemlate(Ec2Client ec2, String launchTemplateName ) {
224+
// Step 1: Create new launch template version
225+
String newAmiId = "ami-0025f0db847eb6254";
226+
RequestLaunchTemplateData launchTemplateData = RequestLaunchTemplateData.builder()
227+
.imageId(newAmiId)
228+
.build();
229+
230+
CreateLaunchTemplateVersionRequest createVersionRequest = CreateLaunchTemplateVersionRequest.builder()
231+
.launchTemplateName(launchTemplateName)
232+
.versionDescription("Updated with valid AMI")
233+
.sourceVersion("1")
234+
.launchTemplateData(launchTemplateData)
235+
.build();
236+
237+
CreateLaunchTemplateVersionResponse createResponse = ec2.createLaunchTemplateVersion(createVersionRequest);
238+
int newVersionNumber = createResponse.launchTemplateVersion().versionNumber().intValue();
239+
240+
// Step 2: Modify default version
241+
ModifyLaunchTemplateRequest modifyRequest = ModifyLaunchTemplateRequest.builder()
242+
.launchTemplateName(launchTemplateName)
243+
.defaultVersion(String.valueOf(newVersionNumber))
244+
.build();
245+
246+
ec2.modifyLaunchTemplate(modifyRequest);
247+
System.out.println("Updated launch template to version " + newVersionNumber + " with AMI " + newAmiId);
248+
}
184249

185250

186251
// snippet-start:[autoscale.java2.describe_scaling_activites.main]
@@ -226,36 +291,55 @@ public static void setDesiredCapacity(AutoScalingClient autoScalingClient, Strin
226291

227292
// snippet-start:[autoscale.java2.create_autoscalinggroup.main]
228293
public static void createAutoScalingGroup(AutoScalingClient autoScalingClient,
229-
String groupName,
230-
String launchTemplateName,
231-
String vpcZoneId) {
294+
Ec2Client ec2Client,
295+
String groupName,
296+
String launchTemplateName,
297+
String vpcId) {
232298
try {
233-
AutoScalingWaiter waiter = autoScalingClient.waiter();
299+
// Step 1: Get one subnet ID in the given VPC
300+
DescribeSubnetsRequest subnetRequest = DescribeSubnetsRequest.builder()
301+
.filters(Filter.builder().name("vpc-id").values(vpcId).build())
302+
.build();
303+
304+
DescribeSubnetsResponse subnetResponse = ec2Client.describeSubnets(subnetRequest);
305+
306+
if (subnetResponse.subnets().isEmpty()) {
307+
throw new RuntimeException("No subnets found in VPC: " + vpcId);
308+
}
309+
310+
String subnetId = subnetResponse.subnets().get(0).subnetId(); // Use first subnet
311+
System.out.println("Using subnet: " + subnetId);
312+
313+
// Step 2: Create launch template reference
234314
LaunchTemplateSpecification templateSpecification = LaunchTemplateSpecification.builder()
235315
.launchTemplateName(launchTemplateName)
236316
.build();
237317

318+
// Step 3: Create Auto Scaling group
238319
CreateAutoScalingGroupRequest request = CreateAutoScalingGroupRequest.builder()
239320
.autoScalingGroupName(groupName)
240-
.availabilityZones("us-east-1a")
241321
.launchTemplate(templateSpecification)
242-
.maxSize(1)
243322
.minSize(1)
244-
.vpcZoneIdentifier(vpcZoneId)
323+
.maxSize(1)
324+
.vpcZoneIdentifier(subnetId) // Correct: subnet ID, not VPC ID
245325
.build();
246326

247327
autoScalingClient.createAutoScalingGroup(request);
328+
329+
// Step 4: Wait until group is created
330+
AutoScalingWaiter waiter = autoScalingClient.waiter();
248331
DescribeAutoScalingGroupsRequest groupsRequest = DescribeAutoScalingGroupsRequest.builder()
249332
.autoScalingGroupNames(groupName)
250333
.build();
251334

252-
WaiterResponse<DescribeAutoScalingGroupsResponse> waiterResponse = waiter
253-
.waitUntilGroupExists(groupsRequest);
335+
WaiterResponse<DescribeAutoScalingGroupsResponse> waiterResponse =
336+
waiter.waitUntilGroupExists(groupsRequest);
337+
254338
waiterResponse.matched().response().ifPresent(System.out::println);
255339
System.out.println("Auto Scaling Group created");
256340

257-
} catch (AutoScalingException e) {
258-
System.err.println(e.awsErrorDetails().errorMessage());
341+
} catch (Ec2Exception | AutoScalingException e) {
342+
System.err.println("Error: " + e.awsErrorDetails().errorMessage());
259343
System.exit(1);
260344
}
261345
}

0 commit comments

Comments
 (0)