Appearance
Azure Pipelines
To implement automated migration using Azure DevOps, follow these steps:
Configure Pipeline Definition
Create or update ado-pipeline.yml
with the following settings:
- Trigger on main branch changes
- Optional profile parameter support
- Environment configuration via
env.json
Setup Pipeline Steps
- Environment Setup
- Install Node.js
- Run
npm ci
to install dependencies
- Data Generation
- Execute
generate
script - Use specified profile (if provided)
- Migration Execution
- Run
migrate
script - Apply profile settings as configured
TIP
The pipeline can run with or without a specified profile, providing flexibility for different deployment scenarios.
Sample Pipeline Definition
Place the below in a ado-pipeline.yml
file.
yaml
trigger: none
variables:
devCredentials: "dev"
preprodCredentials: "preprod"
prodCredentials: "prod"
devRegion: "us-east-1"
preprodRegion: "us-east-1"
prodRegion: "us-east-1"
devInstanceArn: "arn:aws:connect:us-east-1:851725609954:instance/ec4fc4db-091f-4681-a822-faef743247c6"
preprodInstanceArn: "arn:aws:connect:us-east-1:381492093169:instance/893c4767-9162-4345-ab26-20f8c8f78657"
prodInstanceArn: "arn:aws:connect:us-east-1:851725609954:instance/ec4fc4db-091f-4681-a822-faef743247c6"
stages:
# Development to Pre-Production stage
- stage: DevToPreProd
displayName: "Deploy from Development to Pre-Production"
jobs:
- deployment: DeployDevToPreProd
displayName: "Deploy from Dev to PreProd Environment"
environment: "PreProd"
pool:
vmImage: "ubuntu-latest"
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: AWSShellScript@1
name: setDevOutputVariables
inputs:
awsCredentials: "$(devCredentials)"
regionName: $(devRegion)
scriptType: inline
inlineScript: |
echo "##vso[task.setvariable variable=SOURCE_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
echo "##vso[task.setvariable variable=SOURCE_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
echo "##vso[task.setvariable variable=SOURCE_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
- task: AWSShellScript@1
name: setPreprodOutputVariables
inputs:
awsCredentials: "$(preprodCredentials)"
regionName: $(preprodRegion)
scriptType: inline
inlineScript: |
echo "##vso[task.setvariable variable=DEST_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
echo "##vso[task.setvariable variable=DEST_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
echo "##vso[task.setvariable variable=DEST_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
- task: NodeTool@0
inputs:
versionSpec: "20.11.1"
displayName: "Install Node.js"
- script: |
npm ci
displayName: "Install dependencies"
workingDirectory: "deployments/migration-tool"
- script: |
echo "Running data generation"
npm run generate
echo 'Now running migration script'
npm run migrate
workingDirectory: "deployments/migration-tool"
env:
SOURCE_AWS_ACCESS_KEY_ID: $(setDevOutputVariables.SOURCE_AWS_ACCESS_KEY_ID)
SOURCE_AWS_SECRET_ACCESS_KEY: $(setDevOutputVariables.SOURCE_AWS_SECRET_ACCESS_KEY)
SOURCE_AWS_SESSION_TOKEN: $(setDevOutputVariables.SOURCE_AWS_SESSION_TOKEN)
SOURCE_INSTANCE_ARN: "$(devInstanceArn)"
SOURCE_AWS_REGION: "$(devRegion)"
DEST_AWS_ACCESS_KEY_ID: $(setPreprodOutputVariables.DEST_AWS_ACCESS_KEY_ID)
DEST_AWS_SECRET_ACCESS_KEY: $(setPreprodOutputVariables.DEST_AWS_SECRET_ACCESS_KEY)
DEST_AWS_SESSION_TOKEN: $(setPreprodOutputVariables.DEST_AWS_SESSION_TOKEN)
DEST_INSTANCE_ARN: "$(preprodInstanceArn)"
DEST_AWS_REGION: "$(preprodRegion)"
displayName: "Generate & Migrate"
# Pre-Production to Production stage
- stage: PreProdToProd
displayName: "Deploy from Pre-Production to Production"
dependsOn: DevToPreProd
jobs:
- deployment: DeployPreProdToProd
displayName: "Deploy from PreProd to Prod Environment"
environment: "Prod"
pool:
vmImage: "ubuntu-latest"
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: AWSShellScript@1
name: setPreprodOutputVariables
inputs:
awsCredentials: "$(preprodCredentials)"
regionName: $(devRegion)
scriptType: inline
inlineScript: |
echo "##vso[task.setvariable variable=SOURCE_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
echo "##vso[task.setvariable variable=SOURCE_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
echo "##vso[task.setvariable variable=SOURCE_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
- task: AWSShellScript@1
name: setProdOutputVariables
inputs:
awsCredentials: "$(prodCredentials)"
regionName: $(preprodRegion)
scriptType: inline
inlineScript: |
echo "##vso[task.setvariable variable=DEST_AWS_ACCESS_KEY_ID;isOutput=true]$AWS_ACCESS_KEY_ID"
echo "##vso[task.setvariable variable=DEST_AWS_SECRET_ACCESS_KEY;isOutput=true]$AWS_SECRET_ACCESS_KEY"
echo "##vso[task.setvariable variable=DEST_AWS_SESSION_TOKEN;isOutput=true]$AWS_SESSION_TOKEN"
- task: NodeTool@0
inputs:
versionSpec: "20.11.1"
displayName: "Install Node.js"
- script: |
npm ci
displayName: "Install dependencies"
workingDirectory: "deployments/migration-tool"
- script: |
echo "Running data generation"
npm run generate
echo 'Now running migration script'
npm run migrate
workingDirectory: "deployments/migration-tool"
env:
SOURCE_AWS_ACCESS_KEY_ID: $(setPreprodOutputVariables.SOURCE_AWS_ACCESS_KEY_ID)
SOURCE_AWS_SECRET_ACCESS_KEY: $(setPreprodOutputVariables.SOURCE_AWS_SECRET_ACCESS_KEY)
SOURCE_AWS_SESSION_TOKEN: $(setPreprodOutputVariables.SOURCE_AWS_SESSION_TOKEN)
SOURCE_INSTANCE_ARN: "$(preprodInstanceArn)"
SOURCE_AWS_REGION: "$(preprodRegion)"
DEST_AWS_ACCESS_KEY_ID: $(setProdOutputVariables.DEST_AWS_ACCESS_KEY_ID)
DEST_AWS_SECRET_ACCESS_KEY: $(setProdOutputVariables.DEST_AWS_SECRET_ACCESS_KEY)
DEST_AWS_SESSION_TOKEN: $(setProdOutputVariables.DEST_AWS_SESSION_TOKEN)
DEST_INSTANCE_ARN: "$(prodInstanceArn)"
DEST_AWS_REGION: "$(prodRegion)"
displayName: "Generate & Migrate"