PwshAzContainer is a PowerShell binary module built using .NET Core and designed to work with PowerShell Core. It provides cmdlets, written in C#, for interacting with Azure Container Apps, Azure Container App Jobs, and Azure Container Instances.
.NET SDK 8.0.102
PwshAzContainer
depends on the following NuGet packages:
- Azure.Identity (Version 1.10.4)
- Azure.ResourceManager.AppContainers (Version 1.1.1)
- Azure.ResourceManager.ContainerInstance (1.2.0)
- PowerShellStandard.Library (Version 7.0.0-preview.1)
To install the PwshAzContainer module, you can use the PowerShell Gallery:
Install-Module -Name PwshAzContainer -Scope CurrentUser -verbose
PwshAzContainer
provides cmdlets for various Azure Container Apps, Jobs and Instances operations, including creating, getting, updating, and deleting.
first you need to initialize an Azure Resource Manager client.
Clear-AzContext -Force
Connect-AzAccount -Tenant XXXXX
Connect-AzResourceManager -verbose
az login
Connect-AzResourceManager -verbose
$env:MANAGED_IDENTITY_CLIENT_ID = '<user-assigned-managed-identity-client-id'
Connect-AzResourceManager -verbose
Get-AzContainerAppResource -verbose
Get-AzContainerAppResource -ResourceGroupName MyGroup -verbose
Get-AzContainerAppResource -Name MyApp -ResourceGroupName MyGroup -verbose
$IdentityResourceId = '<User-Assigned Managed Identity Resource Id>'
$ContainerAppName = "ca-$(-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}))".ToLower()
$ResourceGroup = '<MyGroup>'
$ContainerRegistryServer = '<Container Registry Server>'
$ContainerImage = "$ContainerRegistryServer/<container-name>:<tag>"
$ContainerName = "$(-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object {[char]$_}))".ToLower()
$EnvironmentName = '<Container App Managed Environment Name>'
$Environment = Get-AzContainerAppEnvironment -Name $EnvironmentName -ResourceGroupName $ResourceGroup
$EnvironmentId = $Environment.id
$Ingress = New-AzContainerAppIngress -External $false -TargetPort 80
$Template = New-AzContainerAppTemplate -ContainerImage $ContainerImage -ContainerName $ContainerName
$Registries = New-AzContainerAppRegistryCredentials -Identity $IdentityResourceId -Server $ContainerRegistryServer
$ContainerApp = New-AzContainerAppResource -Name $ContainerAppName -ResourceGroupName $ResourceGroup -EnvironmentId $EnvironmentId -ConfigIngressObject $ingress -ContainerTemplate $Template -ConfigRegistries $Registries -Identity $IdentityResourceId -verbose
$ContainerApp.Data
Remove-AzContainerAppResource -Name MyApp -ResourceGroupName MyGroup -Verbose
Remove-AzContainerAppResource -ResourceId $ContainerAppResourceId -Verbose
$IdentityResourceId = '<User-Assigned Managed Identity Resource Id>'
$IdentityClientId = '<User-Assigned Managed Identity Client Id>'
$ContainerAppJobName = "caj-$(-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}))".ToLower()
$ResourceGroup = '<MyGroup>'
$ContainerImage = "mcr.microsoft.com/azure-powershell:latest"
$ContainerName = "$(-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object {[char]$_}))".ToLower()
$EnvironmentName = '<Container App Managed Environment Name>'
$Environment = Get-AzContainerAppEnvironment -Name $EnvironmentName -ResourceGroupName $ResourceGroup
$EnvironmentId = $Environment.id
$customObjects = @([PSCustomObject]@{Name = "MANAGED_IDENTITY_CLIENT_ID"; Value = $IdentityClientId})
$Template = New-AzContainerAppJobTemplate -ContainerImage $ContainerImage -ContainerName $ContainerName -ContainerEnv $customObjects -verbose
$ContainerAppJob = New-AzContainerAppJobResource -Name $ContainerAppJobName -ResourceGroupName $ResourceGroup -EnvironmentId $EnvironmentId -ContainerTemplate $Template -Identity $IdentityResourceId -verbose
$ContainerAppJob.Data
Start-AzContainerAppJobResource -Name "MyJob" -ResourceGroupName "MyGroup" -Verbose
$commands = @("pwsh","-c","whoami")
Start-AzContainerAppJobResource -Name "MyJob" -ResourceGroupName "MyGroup" -ContainerCommand $commands -Verbose
$envVariables = @([PSCustomObject]@{Name = "EMAIL_SENDER"; Value = "acccount@<domain>.com"})
$commands = @('pwsh','-c','write-host $env:EMAIL_SENDER')
Start-AzContainerAppJobResource -Name "MyJob" -ResourceGroupName "MyGroup" -ContainerCommand $commands -ContainerEnv $envVariables -Verbose
Get-AzContainerAppJobExecution -JobName "MyJob" -ResourceGroupName "MyGroup" -verbose
Get-AzContainerAppJobExecution -JobName "MyJob" -ResourceGroupName "MyGroup" -ExecutionName "NewExecution" -verbose
$IdentityResourceId = '<User-Assigned Managed Identity Resource Id>'
$ContainerGroupName = "ci-$(-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}))".ToLower()
$ResourceGroup = '<MyGroup>'
$ContainerRegistryServer = '<Container Registry Server>'
$ContainerImage = "$ContainerRegistryServer/<container-name>:<tag>"
$ContainerName = "$(-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object {[char]$_}))".ToLower()
$SubnetId = "/subscriptions/<SubscriptionId>/resourceGroups/<MyRG>/providers/Microsoft.Network/virtualNetworks/<vnet-name>/subnets/<subnet-name>"
$ContainerInstancePorts = @(
$ContainerInstancePort80 = New-AzContainerInstancePort -Port 80 -Protocol 'Tcp'
$ContainerInstancePort443 = New-AzContainerInstancePort -Port 443 -Protocol 'Tcp'
$ContainerInstancePort53 = New-AzContainerInstancePort -Port 53 -Protocol 'Udp'
)
$ContainerGroupPorts = @(
$ContainerGroupPort80 = New-AzContainerGroupPort -Port 80 -Protocol 'Tcp'
$ContainerGroupPort443 = New-AzContainerGroupPort -Port 443 -Protocol 'Tcp'
$ContainerGroupPort53 = New-AzContainerGroupPort -Port 53 -Protocol 'Udp'
)
$Command = @("tail","-f","/dev/null")
$ContainerInstance = New-AzContainerInstanceContainer -Name $ContainerName -Image $ContainerImage -Ports $ContainerInstancePorts -Command $Command
$Registries = New-AzContainerGroupRegistryCredentials -Identity $IdentityResourceId -Server $ContainerRegistryServer
$ContainerGroup = New-AzContainerGroupResource -Name $ContainerGroupName -ResourceGroupName $ResourceGroup -ContainerInstance $ContainerInstance -ImageRegistryCredential $Registries -Ports $ContainerGroupPorts -IpAddressType "Private" -SubnetId $SubnetId -Identity $IdentityResourceId -verbose
$ContainerGroup.Data
$IdentityResourceId = '<User-Assigned Managed Identity Resource Id>'
$ContainerGroupName = "ci-$(-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_}))".ToLower()
$ResourceGroup = '<MyGroup>'
$ContainerRegistryServer = '<Container Registry Server>'
$ContainerImage = "$ContainerRegistryServer/<container-name>:<tag>"
$ContainerName = "$(-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object {[char]$_}))".ToLower()
$SubnetId = "/subscriptions/<SubscriptionId>/resourceGroups/<MyRG>/providers/Microsoft.Network/virtualNetworks/<vnet-name>/subnets/<subnet-name>"
$ContainerInstancePorts = @(
$ContainerInstancePort80 = New-AzContainerInstancePort -Port 80 -Protocol 'Tcp'
$ContainerInstancePort443 = New-AzContainerInstancePort -Port 443 -Protocol 'Tcp'
$ContainerInstancePort53 = New-AzContainerInstancePort -Port 53 -Protocol 'Udp'
)
$ContainerGroupPorts = @(
$ContainerGroupPort80 = New-AzContainerGroupPort -Port 80 -Protocol 'Tcp'
$ContainerGroupPort443 = New-AzContainerGroupPort -Port 443 -Protocol 'Tcp'
$ContainerGroupPort53 = New-AzContainerGroupPort -Port 53 -Protocol 'Udp'
)
$Command = @("tail","-f","/dev/null")
$envVariables = @([PSCustomObject]@{Name = "SITE_FQDN"; Value = "<mydomain>[.]com"})
$ContainerInstance = New-AzContainerInstanceContainer -Name $ContainerName -Image $ContainerImage -Ports $ContainerInstancePorts -Command $Command -ContainerEnv $envVariables
$Registries = New-AzContainerGroupRegistryCredentials -Identity $IdentityResourceId -Server $ContainerRegistryServer
$ContainerGroup = New-AzContainerGroupResource -Name $ContainerGroupName -ResourceGroupName $ResourceGroup -ContainerInstance $ContainerInstance -ImageRegistryCredential $Registries -Ports $ContainerGroupPorts -IpAddressType "Public" -Identity $IdentityResourceId -verbose
$ContainerGroup.Data
Contributions are welcome! If you find any issues or have suggestions for improvements, feel free to open an issue or submit a pull request.
This project is licensed under the MIT License.
- https://github.com/Azure/azure-sdk-for-net/blob/Azure.ResourceManager.ContainerService_1.2.0-beta.2/sdk/containerapps/Azure.ResourceManager.AppContainers/README.md
- https://www.nuget.org/packages/Azure.ResourceManager.AppContainers
- https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.appcontainers?view=azure-dotnet
- https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.appcontainers.containerappresource.start?view=azure-dotnet
- https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.containerinstance?view=azure-dotnet
- https://github.com/Azure/azure-rest-api-specs-examples/tree/main/specification/containerinstance/resource-manager/Microsoft.ContainerInstance/stable/2023-05-01/examples-dotnet