in cdk/cdk-domainless-mode/cdk/cdk_stack.py [0:0]
def launch_windows_instance(self, instance_tag: str, password: str,
domain_name: str,
key_name: str,
number_of_gmsa_accounts: int,
s3_bucket_name: str):
# Add user_data_script to user_data
user_data = ec2.UserData.for_windows(persist=True)
user_data = cdk.Fn.base64(user_data.render())
# Create an instance role
role = iam.Role(
self, "InstanceRole",
assumed_by=iam.ServicePrincipal("ec2.amazonaws.com"),
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonS3FullAccess"),
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSSMDirectoryServiceAccess"),
iam.ManagedPolicy.from_aws_managed_policy_name("AWSDirectoryServiceFullAccess"),
iam.ManagedPolicy.from_aws_managed_policy_name("SecretsManagerReadWrite"),
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSSMManagedInstanceCore"),
],
)
# https://github.com/aws/aws-cdk/issues/4057
# Domain-join works if SSM agent is reachable and SSM association can pick it up
association = cdk.CfnResource(
self, "Association",
type="AWS::SSM::Association",
properties={
"Targets": [
{
"Key": "tag:Name",
"Values": [instance_tag]
}
],
"Parameters": {
"directoryName": [domain_name],
"directoryId": [self.cfn_microsoft_AD.ref]
},
"Name": "AWS-JoinDirectoryServiceDomain"
}
)
association.node.add_dependency(self.cfn_microsoft_AD)
iam_instance_profile = iam.CfnInstanceProfile(self, "InstanceProfile", roles=[role.role_name])
instance = ec2.CfnInstance(
self,
"MyCfnInstance",
instance_type=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.XLARGE).to_string(),
image_id=ec2.WindowsImage(version=ec2.WindowsVersion.WINDOWS_SERVER_2022_ENGLISH_FULL_SQL_2022_ENTERPRISE).get_image(self).image_id,
security_group_ids=[self.security_group.security_group_id],
subnet_id=self.subnet_1.subnet_id,
tags=[cdk.CfnTag(key="Name", value=instance_tag)],
key_name = key_name,
iam_instance_profile = iam_instance_profile.ref
)
instance_id = instance.ref
instance.node.add_dependency(self.cfn_microsoft_AD)
instance.node.add_dependency(self.vpc)
return instance