2222import software .amazon .awscdk .services .ec2 .IMachineImage ;
2323import software .amazon .awscdk .services .ec2 .ISecurityGroup ;
2424import software .amazon .awscdk .services .ec2 .IVpc ;
25- import software .amazon .awscdk .services .ec2 .InstanceClass ;
26- import software .amazon .awscdk .services .ec2 .InstanceSize ;
27- import software .amazon .awscdk .services .ec2 .InstanceType ;
25+
2826import software .amazon .awscdk .services .ec2 .MachineImage ;
2927import software .amazon .awscdk .services .ec2 .Peer ;
3028import software .amazon .awscdk .services .ec2 .Port ;
4139import software .amazon .awscdk .services .lambda .Code ;
4240import software .amazon .awscdk .services .lambda .Function ;
4341import software .amazon .awscdk .services .lambda .Runtime ;
44- import software .amazon .awscdk .services .logs .LogGroup ;
45- import software .amazon .awscdk .services .logs .RetentionDays ;
42+
4643import software .amazon .awscdk .services .secretsmanager .Secret ;
4744import software .amazon .awscdk .services .secretsmanager .SecretStringGenerator ;
4845import software .amazon .awscdk .services .ssm .CfnDocument ;
5451import java .io .IOException ;
5552import java .nio .file .Files ;
5653import java .nio .file .Path ;
57- import java .time .LocalDateTime ;
58- import java .time .format .DateTimeFormatter ;
54+
5955import java .util .ArrayList ;
6056import java .util .Arrays ;
6157import java .util .HashMap ;
@@ -180,6 +176,7 @@ public VSCodeIde(final Construct scope, final String id, final VSCodeIdeProps pr
180176 // props.getRole().addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("AdministratorAccess"));
181177 props .getRole ().addManagedPolicy (ManagedPolicy .fromAwsManagedPolicyName ("ReadOnlyAccess" ));
182178 props .getRole ().addManagedPolicy (ManagedPolicy .fromAwsManagedPolicyName ("AmazonSSMManagedInstanceCore" ));
179+ props .getRole ().addManagedPolicy (ManagedPolicy .fromAwsManagedPolicyName ("CloudWatchAgentServerPolicy" ));
183180
184181 var filePath = props .getAdditionalIamPolicyPath ();
185182 if (Files .exists (Path .of (getClass ().getResource (filePath ).getPath ()))) {
@@ -191,15 +188,8 @@ public VSCodeIde(final Construct scope, final String id, final VSCodeIdeProps pr
191188 props .getRole ().addManagedPolicy (policy );
192189 }
193190
194- DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMdd-HHmmss" );
195- String timestamp = LocalDateTime .now ().format (formatter );
196-
197- // Set up logging
198- LogGroup logGroup = LogGroup .Builder .create (this , "IdeLogGroup" )
199- .retention (RetentionDays .ONE_WEEK )
200- .logGroupName (props .getInstanceName () + "-bootstrap-log-" + timestamp )
201- .build ();
202- logGroup .grantWrite (props .getRole ());
191+ // Log group will be created dynamically by CloudWatch agent at runtime
192+ // No pre-created log group needed - avoids hardcoded timestamp issues
203193
204194 // Create prefix List of CloudFront IP for EC2 instance segurity Group
205195 Function prefixListFunction = Function .Builder .create (this , "IdePrefixListFunction" )
@@ -448,7 +438,8 @@ public VSCodeIde(final Construct scope, final String id, final VSCodeIdeProps pr
448438 Map .entry ("readmeUrl" , props .getReadmeUrl ()),
449439 Map .entry ("environmentContentsZip" , props .getEnvironmentContentsZip ()),
450440 Map .entry ("extensions" , String .join ("," , props .getExtensions ())),
451- Map .entry ("terminalOnStartup" , String .valueOf (props .isTerminalOnStartup ()))
441+ Map .entry ("terminalOnStartup" , String .valueOf (props .isTerminalOnStartup ())),
442+ Map .entry ("logGroupPrefix" , props .getInstanceName () + "-bootstrap" )
452443 ))
453444 ));
454445
@@ -502,8 +493,8 @@ public VSCodeIde(final Construct scope, final String id, final VSCodeIdeProps pr
502493 .serviceToken (bootstrapFunction .getFunctionArn ())
503494 .properties (Map .of (
504495 "InstanceId" , instanceId ,
505- "SsmDocument" , ssmDocument .getRef (),
506- " LogGroupName" , logGroup . getLogGroupName ()
496+ "SsmDocument" , ssmDocument .getRef ()
497+ // LogGroupName removed - will be created dynamically by CloudWatch agent
507498 ))
508499 .build ();
509500 }
0 commit comments