This post is part of a bigger topic Autoscaling Publishers in AWS.
Tridion Publishers need a license that matches the name of the host machine they run on. Each Publisher must have a different name. This means that when using autoscaling, we must know in advance which license to copy into the instance (at first start up time) and also we must rename that machine's hostname to match the license. This is needed because otherwise the instance machine name is always the one set in the AMI.
The script below executed by the Amazon Launch Configuration service when the publisher instance starts. It is backed by a database that contains the available licenses, each with a host name. The script takes the first license available and then changes the host name to match the name specified in the license.
Additionally, the script then downloads the correct license files from their s3 location and copies them in the right folder under the Tridion installation.
Finally the script instructs the server to join the Active Directory domain that is supposed to be part of. This logic is tricky, and sometimes it doesn't work within a single server restart. So two restarts might be needed: first to change the host name, then second to join the domain.
The license that is used is marked as 'unavailable', so the next instance of publisher that starts up cannot use the same license again. We will see in a later post that when a publisher is decommissioned, the license is marked as available again and the db table is updated accordingly.
Tridion Publishers need a license that matches the name of the host machine they run on. Each Publisher must have a different name. This means that when using autoscaling, we must know in advance which license to copy into the instance (at first start up time) and also we must rename that machine's hostname to match the license. This is needed because otherwise the instance machine name is always the one set in the AMI.
The script below executed by the Amazon Launch Configuration service when the publisher instance starts. It is backed by a database that contains the available licenses, each with a host name. The script takes the first license available and then changes the host name to match the name specified in the license.
Additionally, the script then downloads the correct license files from their s3 location and copies them in the right folder under the Tridion installation.
Finally the script instructs the server to join the Active Directory domain that is supposed to be part of. This logic is tricky, and sometimes it doesn't work within a single server restart. So two restarts might be needed: first to change the host name, then second to join the domain.
The license that is used is marked as 'unavailable', so the next instance of publisher that starts up cannot use the same license again. We will see in a later post that when a publisher is decommissioned, the license is marked as available again and the db table is updated accordingly.
$connectionString = "Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;" $query = "SELECT * FROM licenses WHERE licenses.available = 'true' and licenses.type = 'publisher'" $connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = $connectionString $connection.Open() Write-Host "Begin SQL Transaction" $transaction = $connection.BeginTransaction("LicenseTransaction") $sqlCmd = New-Object System.Data.SqlClient.SqlCommand $sqlCmd.CommandText = $query $sqlCmd.Transaction = $transaction $sqlCmd.Connection = $connection $sqlReader = $sqlCmd.ExecuteReader() $sqlReader.Read() $license_id = $sqlReader["id"] $license_hostname = $sqlReader["hostname"] $license_file = $sqlReader["license_file"] $license_cd_file = $sqlReader["license_cd_file"] $sqlReader.close() Write-Host $license_id Write-Host $license_hostname Write-Host $license_file Write-Host $license_cd_file $query_lock = "UPDATE licenses SET licenses.available = 'false' WHERE licenses.id = $license_id" $sqlCmd.CommandText = $query_lock $sqlCmd.Transaction = $transaction $result = $SqlCmd.ExecuteNonQuery() Write-Host "Result UPDATE: " $result Write-Host "End Transaction" $transaction.Commit() $connection.Close() LogWrite("New hostname selected.") LogWrite($newHostName) aws s3 cp $license_file "D:\SDL Web\bin\license.xml" aws s3 cp $license_cd_file "D:\SDL Web\config\cd_licenses.xml" echo "Selected hostname is: "$license_hostname LogWrite("Creating Name tag...") Set-DefaultAWSRegion $AWSRegion $client = New-Object System.Net.WebClient $instanceId = $client.DownloadString("http://169.254.169.254/latest/meta-data/instance-id") $Tag = New-Object amazon.EC2.Model.Tag $Tag.Key = "Name" $Tag.Value = $license_hostname New-EC2Tag -Resource $instanceId -Tag $Tag
Comments