constructor()

in packages/constructs/L3/ai/sm-studio-domain-l3-construct/lib/sm-studio-domain-l3-construct.ts [217:283]


  constructor(scope: Construct, id: string, props: SagemakerStudioDomainL3ConstructProps) {
    super(scope, id, props);
    this.props = props;

    const resolvableDefaultExecutionRole = props.domain.defaultExecutionRole
      ? this.props.roleHelper.resolveRoleRefWithRefId(props.domain.defaultExecutionRole, 'ex-role')
      : undefined;

    const defaultExecutionRole = resolvableDefaultExecutionRole
      ? MdaaRole.fromRoleArn(this, 'ex-role', resolvableDefaultExecutionRole.arn())
      : this.createDefaultExecutionRole();

    const resolvableDeploymentRole = props.domain.domainBucket
      ? this.props.roleHelper.resolveRoleRefWithRefId(
          props.domain.domainBucket.assetDeploymentRole,
          `asset-deployment-role`,
        )
      : undefined;

    const assetDeploymentRole = resolvableDeploymentRole
      ? MdaaRole.fromRoleArn(this, `asset-deployment-role`, resolvableDeploymentRole.arn())
      : this.createAssetDeploymentRole();

    this.kmsKey = props.domain.kmsKeyArn
      ? Key.fromKeyArn(this, 'kmsKey', props.domain.kmsKeyArn)
      : this.createDomainEfsKmsKey(defaultExecutionRole, assetDeploymentRole);

    const notebookSharingPrefix = props.domain.notebookSharingPrefix || 'sharing/';
    const assetPrefix = props.domain.assetPrefix || 'lifecycle-assets';

    const domainBucket: IBucket = props.domain.domainBucket
      ? Bucket.fromBucketName(this, 'existing-domain-bucket', props.domain.domainBucket.domainBucketName)
      : this.createDomainBucket(
          this.kmsKey,
          defaultExecutionRole,
          notebookSharingPrefix,
          assetPrefix,
          assetDeploymentRole,
        );

    this.securityGroup = props.domain.securityGroupId
      ? SecurityGroup.fromSecurityGroupId(this, `domain-sg`, props.domain.securityGroupId)
      : this.createDomainSecurityGroup(
          this.props.domain.vpcId,
          this.props.domain.subnetIds,
          this.props.domain.securityGroupIngress,
          this.props.domain.securityGroupEgress,
        );

    this.domain = this.createDomain(
      defaultExecutionRole,
      this.securityGroup,
      this.kmsKey,
      domainBucket,
      assetPrefix,
      assetDeploymentRole,
      props.domain.assetDeploymentMemoryLimitMB,
    );
    this.createBasicExecutionPolicy(this.domain.attrDomainId, defaultExecutionRole, this.kmsKey);
    this.createSageMakerStudioUserProfiles(
      defaultExecutionRole,
      this.kmsKey,
      domainBucket,
      this.domain.attrDomainId,
      notebookSharingPrefix,
    );
  }