Blog

Erstellen Sie einen Self-Service Sagemaker mit AWS Service Catalog

Thijs de Vries

Thijs de Vries

Aktualisiert Oktober 21, 2025
4 Minuten

Im Rahmen des Data Lake arbeite ich an Sagemaker-Instanzen für Datenanalysten zur Ausführung von Analyseaufträgen.
Diese Instanzen werden bei Bedarf benötigt, nämlich dann, wenn Analysten Daten verarbeiten oder untersuchen.
Eine Lösung könnte darin bestehen, diese Instanzen im Voraus zu erstellen, gleich zu Beginn des Auftrags, und die Instanzen zu bereinigen, sobald der Auftrag abgeschlossen ist.
Diese Instanzen verursachen jedoch Kosten, selbst wenn sie durch EBS-Volumes angehalten werden. Außerdem werden Betriebssystem-Patches im gestoppten Zustand nicht angewendet. Wir möchten, dass die Analysten in der Lage sind, diese Instanzen zu erstellen, und zwar so groß, wie sie sie brauchen, und wann sie sie brauchen.
Natürlich nicht ganz umsonst. Der Service Catalog in der AWS-Konsole bietet genau die Möglichkeit, dies richtig zu tun.
Und so können die Benutzer, die Datenanalysten, mit den Ressourcen interagieren, die sie benötigen.
Ich habe den Analysten eine umfassende Anleitung gegeben, indem ich die von Sagemaker benötigten Infrastrukturen und Eigenschaften beschrieben habe.
Indem ich die Einstellungen in einem Skript gespeichert habe, konnte ich den Analysten in einer bestimmten Rolle ermöglichen, eine Instanz mit einem einzigen Klick zu starten.
Genau hier kommt der AWS Service Catalog ins Spiel, indem er das gespeicherte CloudFormation-Skript ausführt, das als CloudFormation-Produkt geliefert wird.

Portfolio, Produkt & Portfolio Produktverband

Die folgenden Schnipsel beschreiben, wie ich den Sagemaker-Teil im Data Lake zum Laufen gebracht habe. Die Cloudformation wird in einem separaten S3-Bucket gespeichert. Nach der Erstellung kann der Benutzer den Stack starten.

DatalakePortfolio:
  Type: "AWS::ServiceCatalog::Portfolio"
  Properties:
    content: "A portfolio of self-service Datalake."
    DisplayName: "Datalake Portfolio"
    ProviderName: "Datalake"

SagemakerProduct:
  Type: AWS::ServiceCatalog::CloudFormationProduct
  Properties:
    content: "Sagemaker Product"
    Distributor: "Datalake"
    Name: "Sagemaker"
    Owner: "binx"
    ProvisioningArtifactParameters:
    - content: "Initial version"
      DisableTemplateValidation: False
      Info:
        LoadTemplateFromURL: "https://s3.amazonaws.com/<>/products/sagemaker-instance.yml"
      Name: "v1"
    SupportEmail: "datalake@binx.nl"
    SupportUrl: "https://confluence.binx.nl/display/DLAKE/Service+Catalog"

SagemakerPortfolioProductAssociation:
  Type: "AWS::ServiceCatalog::PortfolioProductAssociation"
  Properties:
    PortfolioId:
      Ref: DatalakePortfolio
    ProductId:
      Ref: SagemakerProduct

Portfolio Principal Association

Verknüpfen Sie das Portfolio mit dem zuvor erstellten Principal. Dies kann ein IAM-Benutzer, eine Gruppe oder eine Rolle sein.
In unserem Fall ist es an eine SAML-authentifizierte IAM-Rolle gebunden, die ein Datenanalyst erhält.

DatalakePortfolioPrincipalPUAssociation:
  Type: "AWS::ServiceCatalog::PortfolioPrincipalAssociation"
  Properties:
    PortfolioId:
      Ref: DatalakePortfolio
    PrincipalARN: "${PrincipalARN}"
    PrincipalType: "IAM"

Portfolio-Beschränkung

Um das Produkt einzuführen und abzubauen, benötigen wir eine Rolle, die Service Catalog übernehmen kann.
Diese Rolle verfügt über alle Richtlinien, die zum Erstellen und Entfernen des Produkts erforderlich sind.
Mit der Einschränkung LaunchRoleConstraint haben wir eine Produkt/Portfolio-Kombination an eine Rolle gebunden.

SagemakerLaunchRoleConstraint:
  Type: AWS::ServiceCatalog::LaunchRoleConstraint
  Properties:
    content: "Constraint to run Sagemaker and S3 in Cloudformation."
    PortfolioId:
      Ref: DatalakePortfolio
    ProductId:
      Ref: SagemakerProduct
    RoleArn:
      Fn::GetAtt: [ LaunchConstraintRole, Arn ]
  DependsOn: [ DatalakePortfolioPrincipalAssociation, LaunchConstraintRole ]

LaunchConstraintRole:
  Type: “AWS::IAM::Role”
  Properties:
    Path: “/“
    AssumeRolePolicyDocument:
      Version: “2012-10-17”
      Statement:
        - Effect: “Allow”
          Principal:
            Service: “servicecatalog.amazonaws.com”
          Action: “sts:AssumeRole”
    Policies:
      - PolicyName: “AllowProductLaunch”
        PolicyDocument:
          Version: 2012-10-17
          Statement:
            - Resource: ‘*’
              Effect: “Allow”
              Action:
                # Permissions required for the provisioning of the Sagemaker
                - cloudformation:GetTemplateSummary
                - s3:GetObject
                - sagemaker:*
                - s3:*
                - iam:Get*
                - iam:PassRole
                - ec2:*
                - kms:*
            - Resource:
                - “arn:aws:iam::*:role/SC-*”
                - “arn:aws:sts::*:assumed-role/datalake-service-catalog-LaunchConstraintRole-*”
                - “arn:aws:iam::*:role/sagemaker-notebook-iam-role”
              Effect: “Allow”
              Action:
                - iam:*
            - Resource:
                - “arn:aws:cloudformation:*:*:stack/SC-*”
                - “arn:aws:cloudformation:*:*:changeSet/SC-*”
              Effect: “Allow”
              Action:
                # Permissions required by AWS Service Catalog to create stack
                - cloudformation:CreateStack
                - cloudformation:DeleteStack
                - cloudformation:DescribeStackEvents
                - cloudformation:DescribeStacks
                - cloudformation:SetStackPolicy
                - cloudformation:ValidateTemplate
                - cloudformation:UpdateStack

Bitte verwenden Sie diesen Link, um die vollständigen Skripte herunterzuladen, damit Sie sofort loslegen können.
Stellen Sie sicher, dass Sie die IAM-Richtlinien überprüfen, bevor Sie sie in die Praxis umsetzen.

Fazit

Die Cloud-Infrastruktur sollte in Code sein. Das wissen wir alle.
Die kleinste manuelle Eingabe neigt dazu, viel kaputt zu machen und macht die Dinge unberechenbar. Damit haben wir alle schon zu tun gehabt.
Aber manchmal bietet die AWS-Konsole eine gute Möglichkeit für Benutzer, mit Cloud-Ressourcen zu interagieren.
Die Verwendung des AWS Service Catalog ermöglicht es uns, Ressourcen nach Bedarf zu erstellen, sie aber dennoch in einer definierten, strukturierten Weise zu gruppieren.
So können wir den Benutzern die Freiheit geben, zu arbeiten, wann sie wollen, und mit einer Vielzahl von Produkten. Und gleichzeitig können wir Kosten sparen.

Verfasst von

Thijs de Vries

Contact

Let’s discuss how we can support your journey.