Blog
So erstellen Sie Microsoft SQLServer Datenbanken und Benutzer mit AWS Cloudformation

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.
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.
Unsere Ideen
Weitere Blogs
Contact



