in notebook-teams/multinotebookefs/multinotebookefs_stack.py [0:0]
def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# The code that defines your stack goes here
# VPC
self.vpc = ec2.Vpc(self, "VPC",
max_azs=2,
cidr="10.10.0.0/16",
subnet_configuration=[ec2.SubnetConfiguration(
subnet_type=ec2.SubnetType.PUBLIC,
name="Public",
cidr_mask=24
), ec2.SubnetConfiguration(
subnet_type=ec2.SubnetType.PRIVATE,
name="Private",
cidr_mask=24
)
],
nat_gateways=1
)
# Security group
# self.sg = ec2.SecurityGroup(self, "securityGroup", self.vpc)
self.sg = ec2.SecurityGroup.from_security_group_id(self, "securityGroup", self.vpc.vpc_default_security_group,mutable=False)
# Create EFS inside VPC
self.efs = efs.FileSystem(
self,
"commonEFS4Notebooks",
vpc = self.vpc,
encrypted=True,
enable_automatic_backups=True,
performance_mode=efs.PerformanceMode('MAX_IO'),
throughput_mode=efs.ThroughputMode('BURSTING'),
security_group = self.sg)
# Mount target for EFS
# self.mount = efs.CfnMountTarget(
# self,
# "MountID",
# file_system_id=self.efs.file_system_id,security_groups=[self.sg.security_group_id,],
# subnet_id=self.vpc.private_subnets[0].subnet_id,
# )
# IAM Roles
#Create role for Notebook instance
nRole = iam_.Role(
self,
"notebookAccessRole",
assumed_by = iam_.ServicePrincipal('sagemaker'))
nPolicy = iam_.Policy(
self,
"notebookAccessPolicy",
policy_name = "notebookAccessPolicy",
statements = [iam_.PolicyStatement(actions = ['s3:*',], resources=['*',]),]).attach_to_role(nRole)
#Create notebook instances cluster
# print(self.mount.get_att('attr_ip_address').to_string())
encodedScript = LifecycleScriptStr.format(self.efs.file_system_id)
# print("Adding following script to the lifecycle config..\n___\n\n"+encodedScript)
code = [
{"content": core.Fn.base64(encodedScript)}
]
lifecycleconfig = sm.CfnNotebookInstanceLifecycleConfig(
self,
"LifeCycleConfig",
notebook_instance_lifecycle_config_name=LifeCycleConfigName,
on_create=None, on_start=code)
instances = []
for i in range(num_instances):
nid = 'CDK-Notebook-Instance-User-'+str(i)
instances.append(sm.CfnNotebookInstance(
self,
nid,
instance_type = 'ml.t2.medium',
volume_size_in_gb = 5,
security_group_ids = [self.sg.security_group_id],
subnet_id = self.vpc.private_subnets[0].subnet_id,
notebook_instance_name = nid,
role_arn = nRole.role_arn,
lifecycle_config_name = lifecycleconfig.notebook_instance_lifecycle_config_name
))
core.CfnOutput(self, "VPC_id",value=self.vpc.vpc_id)
core.CfnOutput(self, "EFS_id",value=self.efs.file_system_id)
[core.CfnOutput(self, "NotebookInstance_"+str(c),value=notebook.notebook_instance_name) for c,notebook in enumerate(instances)]