CAM Azure Stack utilizes Microsoft Azure services and resources to provide the ability to move documents and content and sync metadata between multiple Document Management Systems (DMS). CAM Content Mover and Data Sync (Content Sync) use Azure storage blobs as an intermediary place while moving content between the supported Document Management Systems.
To deploy the CAM Azure Stack, you need to deploy the Azure template into your Azure environment. The template deploys a complete solution that contains multiple resources such as function apps, MySQL instances, Blob Storages, and others. These resources are provided and hosted by Microsoft Azure in your Azure account to provide more control over moving content.
Azure & CAM Integration Notes
As of January 30, 2021, Azure is not allowing custom token expiry settings. The conditional access policies determine how the token expires are configured. This requires at least a P1 license in Azure. See the Microsoft link here.
CAM Azure Stack Architecture
Content Mover in CAM uses REST APIs to work with 7 functions, 4 queues, and two triggers to move content.
Data Sync (Content Sync) uses REST APIs to work with 3 functions, 1 queue, and one trigger to sync content.
Prerequisites to the CAM Azure Stack Deployment
Deploying and Configuring the CAM Azure Stack
Updating the Client Stack
Prerequisites
Azure CLI: Ensure Azure CLI is installed on your machine. You can download it from Microsoft here: https://learn.microsoft.com/en-us/cli/azure/
Administrator Access: Open Powershell with the “Run as administrator“ privilege.
Go to the Github repo: https://github.com/Prosperoware/cam-azure-deployment .
Download functionAppsCodeUpdate.ps1
Function App: The function app should already be created in the Client stack otherwise this Powershell script will fail.
Important notes:
a). Ensure that there is only one function app of each type in the resource group.
E.g. There must be only one {}-contentsync-api Function app.
Having multiple function apps of the same type will cause the script to upgrade the jar file in the incorrect function app.
b) A .log file will be created automatically if you execute this script for the first time.
Executing the Script
Azure login:
If you haven’t logged in via
az login
, The script will prompt you to log in through a browser. Please use the Azure account associated with your client stack deployment.If the wrong account is used , you will be prompted to log in again , with up to three attempts allowed.
Resource group Input:
The script will prompt you to enter the resource group name where your stack is deployed.
If an incorrect resource group is entered, you will be prompted to re-enter the correct name, with up to three attempts allowed.
Function App Identification:
The script will list all function apps targeted for the JAR upgrade.
It will automatically determine whether to update ETL (Content Mover), ContentSync (Data Sync), or both options, based on the function apps present in your resource group.
Logging:
The script will maintain a log file named
CAM_Azure_Stack_log_timestamp.txt
to record the latest operationsOlder logs will be deleted each time the script runs.
File Management:
The script will download and upload the ZIP file from the same directory where 'functionAppsCodeUpdate.ps1' is located.
Upgrading Jar Files:
After running the functionappsCodeupdate script the jar files will be updated automatically.
Storage Bucket Retention Rules and Deletions
When using Azure Stack, Azure Storage bucket retention rules are used to delete the files from the at rest data using Data Sync or Data Uploader appropriately.
The rules are:
#NameOfRule - Example DeleteAfter30Days
#NumberOfDays - 30
#BlobContainerName - Example : tenantname-contentsync-cmk-encrypted-bucket
#daysafterModificationGreaterThan: = #NumberofDays
"rules": [
{
"enabled": true,
"name": "<#NameOfRule>",
"type": "Lifecycle",
"definition": {
"actions": {
"baseBlob": {
"delete": {
"daysAfterModificationGreaterThan": <#NumberOfDays | Integer>
}
}
},
"filters": {
"blobTypes": [
"blockBlob"
],
"prefixMatch": [
"<#BlobContainerName>/etl-action",
"<#BlobContainerName>/etl-process"
]
}
}
}
]
}
Azure Pricing and Cost Calculator
CAM Azure Stack Security
While upgrading your Azure Stack deployment with a new build, you can find the parameters of your past deployments on the Inputs tab of the Microsoft Templates page.
SSL for the MySQL Database
To Setup SSL on the MYSQL database, set the following on the appconfig.yml in Content Mover:
useSSL = True
requireSSL = True
Creating a Personal Access Token:
Log into Azure DevOps at the https://dev.azure.com/
In the right-hand corner select User Settings and then Personal access tokens
Create the PAT for the deployment - This token will be used only for the setup and the Expiration can be set for only 1 day.
a. Select the New Token option.
b. Select a Name for the token, and organization where you will deploy, and expiration. For the expiration select one day using the Custom Defined option.
c. In the scope section select:
Agent Pools | Read & manage |
Build | Read & execute |
Code | Read & write |
Connected Server | Connected Server |
Deployment Groups | Read & manage |
Environment | Read & manage |
Project & Team | Read, write & manage |
Release | Read, write, execute & manage |
Secure Files | Read, create & manage |
Service Connections | Read, query & manage |
Variable Groups | Read, create & manage |
Create PAT for push code (Service account)
a. Select New Token”option.
b. Select a Name for the token, organization where you will deploy, and expiration. For the expiration, select at least 12 months. This token will have to be rotated when it is close to the expiration date.
c. In the scope section select:
Code | Read & write |
Configuring a token expiration of one year is recommended for security purposes. Upon expiration of the token, the token must be refreshed with CAM manually or updates of the Content Mover software will be prevented from automatically deploying to your environment.
Caution: By design, after successfully adding a client token, the userid and password details associated with that user will show empty if a user tries to edit that client token.