Blog

So erstellen Sie Microsoft SQLServer Datenbanken und Benutzer mit AWS Cloudformation

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 16, 2025
3 Minuten

In diesem Blog zeige ich Ihnen, wie Sie mit einem benutzerdefinierten Ressourcenanbieter Microsoft SQLServer-Anmeldungen, Datenbanken und Benutzer in Cloudformation,
, erstellen.

CloudFormation erstellt Microsoft SQLServer-Datenbankinstanzen. Es wird eine Datenbank
und ein Master-Login erstellt, das die volle Kontrolle über die Instanz gewährt. Wenn Sie mehrere Teams
auf einer einzigen Datenbankinstanz hosten möchten, müssen Sie die Teams isolieren.
Dies kann geschehen, indem Sie jedem Team eine eigene Datenbank und ein eigenes Login zuweisen.
Dieser benutzerdefinierte MSSQL-Ressourcenanbieter automatisiert die Bereitstellung von MSSQL-Datenbanken,
Logins und Benutzern.

Wie kann ich eine MSSQL-Datenbank erstellen?

Um mit Cloudformation eine logische Datenbank auf einem Microsoft SQLServer zu erstellen, können Sie die Ressource
Custom::MSSQLDatabase verwenden:

  KongDatabase:
    Type: Custom::MSSQLDatabase
    DeletionPolicy: Retain
    Properties:
      Name: kong
      Server:
        URL: !Sub 'mssql://sa@${Database.Endpoint.Address}:${Database.Endpoint.Port}'
        PasswordParameterName: !GetAtt DBPassword.ParameterName
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-mssql-resource-provider-${VPC}'

Sie geben lediglich den Namen der Datenbank und den Server an, auf dem sie gehostet wird. Der benutzerdefinierte Anbieter
unterstützt zwar die Umbenennung der Datenbank, aber Sie können sie nicht auf einen anderen Server "verschieben".

Wie kann ich einen MSSQL-Benutzer erstellen?

Obwohl es 13 Arten von Benutzern auf Microsoft SQLServer gibt, erstellt der Anbieter nur
einen Datenbankbenutzer für eine Anmeldung zur Serverauthentifizierung. Nachfolgend sehen Sie ein Beispiel, das die Ressourcen Custom::MSSQLLogin und Custom::MSSQLUser verwendet.

  KongLogin:
    Type: Custom::MSSQLLogin
    Properties:
      LoginName: kong
      DefaultDatabase: !GetAtt KongDatabase.Name
      PasswordParameterName: !GetAtt KongPassword.ParameterName
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-mssql-resource-provider-${VPC}'
      Server:
        URL: !Sub 'mssql://sa@${Database.Endpoint.Address}:${Database.Endpoint.Port}'
        PasswordParameterName: !Ref DBPassword.ParameterName

  KongUser:
    Type: Custom::MSSQLUser
    Properties:
      UserName: kong
      LoginName: !GetAtt KongLogin.LoginName
      Server:
        URL: !Sub 'mssql://${Database.Endpoint.Address}:${Database.Endpoint.Port}/${KongDatabase.Name}'
        PasswordParameterName: !GetAtt DBPassword.ParameterName
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-mssql-resource-provider-${VPC}'

Der benutzerdefinierte Anbieter unterstützt die Umbenennung des Anmeldenamens und des Benutzernamens. Außerdem können Sie
den Benutzer in eine andere Datenbank verschieben, indem Sie den Datenbanknamen in der Server-URL ändern.
aber Sie können sie nicht auf einen anderen Server verschieben.

Schließlich verwenden Sie Custom::MSSQLDatabaseGrant, um dem Benutzer Rechte in der Datenbank zu gewähren.
In diesem Fall gewähren wir dem Benutzer alle Rechte in der Datenbank, so dass ein Team die Datenbank
schema selbst verwalten kann.

  KongDatabaseGrant:
    Type: Custom::MSSQLDatabaseGrant
    Properties:
      Permission: ALL
      UserName: !GetAtt KongUser.UserName
      Database: !GetAtt KongDatabase.Name
      Server:
        URL: !Sub 'mssql://${Database.Endpoint.Address}:${Database.Endpoint.Port}/${KongDatabase.Name}'
        PasswordParameterName: !GetAtt DBPassword.ParameterName
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-mssql-resource-provider-${VPC}'

Das ist alles, was es zu sagen gibt!

Installation

Um diesen benutzerdefinierten SQLServer-Ressourcenanbieter zu installieren, geben Sie ein:

read -p "VPC ID:" VPC_ID
read -p "private subnet ids:" SUBNET_IDS
read -p "default security group:" SG_ID
aws cloudformation create-stack 
    --capabilities CAPABILITY_IAM 
    --stack-name cfn-mssql-resource-provider 
    --template-body file://cloudformation/cfn-resource-provider.yaml  
    --parameters 
                ParameterKey=VPC,ParameterValue=$VPC_ID 
                ParameterKey=Subnets,ParameterValue=$SUBNET_IDS 
                ParameterKey=SecurityGroup,ParameterValue=$SG_ID

aws cloudformation wait stack-create-complete  --stack-name cfn-mssql-resource-provider 

Da der Provider eine Verbindung zum Datenbankserver herstellen muss, verbinden wir die Lambda-Funktion mit den privaten
Subnetzen der VPC und versehen sie mit einer Sicherheitsgruppe, die den Zugriff gewährt. Installieren Sie den benutzerdefinierten Ressourcenanbieter
auf jeder VPC, die in der Lage sein soll, Datenbanken, Anmeldungen und Benutzer zu erstellen.

Diese CloudFormation-Vorlage verwendet unseren vorgefertigten Provider von s3://binxio-public/lambdas/cfn-mssql-resource-provider-0.2.4.zip.

Demo

Um die Demo des Custom Resource Providers zu installieren, installieren Sie zunächst den Secret Provider:

## install the secret provider
aws cloudformation create-stack 
  --stack-name cfn-secret-provider 
  --capabilities CAPABILITY_IAM 
  --template-url https://binxio-public-eu-central-1.s3.eu-central-1.amazonaws.com/lambdas/cfn-secret-provider-2.0.1.yaml
aws cloudformation wait stack-create-complete --stack-name cfn-secret-provider

Um die Demo einzurichten, geben Sie jetzt ein:

aws cloudformation create-stack --stack-name cfn-database-user-provider-demo 
  --template-body https://raw.githubusercontent.com/binxio/cfn-mssql-resource-provider/main/cloudformation/demo-stack.yaml
aws cloudformation wait stack-create-complete  --stack-name cfn-database-user-provider-demo

Es wird auch ein Microsoft SQLServer-Datenbankserver erstellt, was einige Zeit in Anspruch nehmen wird.

Fazit

Mit dieser Lösung können Sie Microsoft SQLServer-Datenbanken und -Benutzer mit Cloudformation erstellen.
Es ermöglicht Ihnen, mehrere Teams auf demselben Server zu hosten, indem Sie ihnen ihre eigene Datenbank
und Datenbankbenutzer zur Verfügung stellen.

Foto von Uriel SC auf Unsplash

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.