I do not manage to pass parameter from my azure yaml to my cloudformation yaml. I got the following error:
##[error]ValidationError: Parameters: [EnvironmentType] must have values
Nothing called "EnvironmentType" is passed through azure yml to cloudformation yml.
azure-pipeline.yaml
pool:
name: AWS
variables:
ArtifactName: update-email
stages:
- stage: Build
displayName: Build Stage
...
- stage: DeployToDev
displayName: 'Deploy To Dev'
variables:
EnvironmentType: 'dev'
AwsCredentials: '${{ variables.EnvironmentType }}-xx'
AwsRegion: 'eu-central-1'
CodeBucket: 's3-$(EnvironmentType)-xx'
BucketPrefix: 'xx-$(ArtifactName)'
StackName: 'clf-$(EnvironmentType)-xx'
jobs:
- job: DeployToDev
steps:
...
- task: AmazonWebServices.aws-vsts-tools.CloudFormationCreateOrUpdateStack.CloudFormationCreateOrUpdateStack@1
displayName: 'Create/Update Stack: $(StackName)'
inputs:
awsCredentials: ${{ variables.AwsCredentials }}
regionName: $(AwsRegion)
stackName: $(StackName)
templateFile: '$(ArtifactName)/clf-xx-$(EnvironmentType).yml'
parameters: |
EnvironmentType=$(EnvironmentType)
clf.yaml
Parameters:
EnvironmentType:
Description: The deployment environment type.
Type: String
AllowedValues:
- dev
- prod
Resources:
xx:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub "lbd-${EnvironmentType}-xx"
...
What I also tried:
- task: AmazonWebServices.aws-vsts-tools.CloudFormationCreateOrUpdateStack.CloudFormationCreateOrUpdateStack@1
displayName: 'Create/Update Stack: $(StackName)'
inputs:
awsCredentials: ${{ variables.AwsCredentials }}
regionName: $(AwsRegion)
stackName: $(StackName)
templateFile: '$(ArtifactName)/clf-xx-$(EnvironmentType).yml'
templateParameters: |
- ParameterKey: EnvironmentType
ParameterValue: ${{variables.EnvironmentType}}
use "parameters"
- task: AmazonWebServices.aws-vsts-tools.CloudFormationCreateOrUpdateStack.CloudFormationCreateOrUpdateStack@1 displayName: 'Create/Update Stack: $(StackName)' inputs: awsCredentials: ${{ variables.AwsCredentials }} regionName: $(AwsRegion) stackName: $(StackName) templateFile: '$(ArtifactName)/clf-xx-$(EnvironmentType).yml' parameters: | - ParameterKey: EnvironmentType ParameterValue: ${{variables.EnvironmentType}}Add templateParametersSource: inline and remove '/' in templateParameters got error
A sequence was not expected, which point to the "ParameterKey" line- task: AmazonWebServices.aws-vsts-tools.CloudFormationCreateOrUpdateStack.CloudFormationCreateOrUpdateStack@1 displayName: 'Create/Update Stack: $(StackName)' inputs: awsCredentials: ${{ variables.AwsCredentials }} regionName: $(AwsRegion) stackName: $(StackName) templateFile: '$(ArtifactName)/clf-xx-$(EnvironmentType).yml' templateParametersSource: inline templateParameters: - ParameterKey: EnvironmentType ParameterValue: 'dev'
I know that I can use ssm but here I am wondering if I want to stay with the solution using CloudFormationCreateOrUpdateStack task.
Am I missing anything here ? Is it possible to pass parameter from azure yml to cloudformation yml through CloudFormationCreateOrUpdateStack task ?
Thanks in advance
There is no property "parameters" in "AWS CloudFormation Create/Update Stack task".
If want to pass parameters to your AWS template, you should set "Template Parameters Source" to inline as suggested by erik258. In addition you can also use template parameters file. For example:
You can see the detailed info from Use Azure DevOps Parameters to Switch Between Your AWS Accounts.
Update
Or