0

I use AWS Tools for Powershell to set and get the Default AWS region using modules. I used Set-DefaultAWSRegion -Region us-east-2 to set the defaultAWSRegion in azure-pipelines.yaml using task. However, when trying to read the value using Get-DefaultAWSRegion I get no response.

If I write a PowerShell script and run the script in azure-pipelines.yaml, I get the region value.

Here is the yaml file:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
variables:
  - group: app-one
  - name: region
    value: 'us-east-2'
  - name: profile
    value: 'PSProfile'
trigger:
  - install-awstools
  
pool:
    vmImage: ubuntu-latest
  
steps:
  - task: PowerShell@2
    displayName: 'Check and install AWS.Tools.Installer and AWS.Tools.Common modules'
    inputs:
      filePath: '$(build.sourcesdirectory)/install-aws-tools-powershell/InstallAWSTools.ps1'
  - task: PowerShell@2
    displayName: 'Set AWS Credentail'
    inputs:
      targetType: 'inline'
      script: 'Set-AWSCredential -AccessKey $(access_key) `
                -SecretKey $(secret_key) `
                -StoreAs $(profile)'
  - task: PowerShell@2
    displayName: 'Run region test'
    inputs:
      filePath: '$(build.sourcesdirectory)/install-aws-tools-powershell/regiontest.ps1'
  - task: PowerShell@2
    displayName: 'Set AWS DefaultRegion'
    inputs:
      targetType: 'inline'
      script: 'Set-DefaultAWSRegion -Region $(region)'
  - task: PowerShell@2
    displayName: 'Get AWS DefaultRegion'
    inputs:
      targetType: 'inline'
      script: 'Get-DefaultAWSRegion'
    continueOnError: true

However, when I call the functions via a powershell script like:

Set-DefaultAWSRegion -Region us-east-2
Get-DefaultAWSRegion

I get the desired behavior.

Region    Name           IsShellDefault
------    ----           --------------
us-east-2 US East (Ohio)           True

What am I missing?

After some more research: The below code snippet works:

  - task: PowerShell@2
    displayName: 'Set AWS DefaultRegion'
    inputs:
      targetType: 'inline'
      script: |
        Set-DefaultAWSRegion -Region $(region)
        $RegionValue = (Get-DefaultAWSRegion) | Out-String
        Write-Host "Value of AWS DefaultRegion: $RegionValue"

But when I break the script into two tasks, as shown below, it does not work:

  - task: PowerShell@2
    displayName: 'Set AWS DefaultRegion'
    inputs:
      targetType: 'inline'
      script: |
        Set-DefaultAWSRegion -Region $(region)

  - task: PowerShell@2
    displayName: 'Get AWS DefaultRegion'
    inputs:
      targetType: 'inline'
      script: |
        $RegionValue = (Get-DefaultAWSRegion) | Out-String
        Write-Host "Value of AWS DefaultRegion: $RegionValue"
    continueOnError: true

The DefaultAWSRegion value does not persist beyond a task.

Sourav Kundu
  • 408
  • 2
  • 14
  • Per AWS-Docs (https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html), This setting persists only for the current session. To apply the setting to all of your PowerShell sessions, add this command to your PowerShell profile as you did for the Import-Module command. – Sourav Kundu Sep 16 '22 at 03:58

0 Answers0