Skip to content

Commit eb63618

Browse files
committed
Merge branch 'main' of https://github.com/MicrosoftDocs/azure-docs-pr into securefw
2 parents e2c128b + ac2d8f1 commit eb63618

File tree

279 files changed

+636
-430
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

279 files changed

+636
-430
lines changed

articles/azure-resource-manager/bicep/data-types.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Data types in Bicep
33
description: This article describes the data types that are available in Bicep.
44
ms.topic: reference
5-
ms.date: 06/30/2025
5+
ms.date: 07/07/2025
66
ms.custom: devx-track-bicep
77
---
88

@@ -437,6 +437,16 @@ The union type has some limitations:
437437

438438
You can use the union type syntax in [user-defined data types](./user-defined-data-types.md).
439439

440+
## Nullable types
441+
442+
You can make any primitive or complex type nullable by appending a `?` to the type name. This allows the parameter, variable, or output to accept null as a valid value. For example:
443+
444+
```bicep
445+
output description string? = null
446+
output config object? = null
447+
output optionalValue int? = null
448+
```
449+
440450
## Secure strings and objects
441451

442452
Secure strings use the same format as string, and secure objects use the same format as object. With Bicep, you add the `@secure()` [decorator](./parameters.md#use-decorators) to a string or object.

articles/azure-resource-manager/templates/template-functions-array.md

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Template functions - arrays
33
description: Describes the functions to use in an Azure Resource Manager template (ARM template) for working with arrays.
44
ms.topic: reference
55
ms.custom: devx-track-arm-template
6-
ms.date: 02/12/2025
6+
ms.date: 07/07/2025
77
---
88

99
# Array functions for ARM templates
@@ -223,6 +223,57 @@ The output from the preceding example with the default values is:
223223
| arrayOutput | String | one |
224224
| stringOutput | String | O |
225225

226+
## indexFromEnd
227+
228+
`indexFromEnd(sourceArray, reverseIndex)`
229+
230+
Returns an element of the array by counting backwards from the end. This is useful when you want to reference elements starting from the end of a list, rather than the beginning. The [`tryIndexFromEnd`](#tryindexfromend) function is a safe version of `indexFromEnd`.
231+
232+
In Bicep, use the [Reserved index accessor](../bicep/operators-access.md#reverse-index-accessor) operator.
233+
234+
### Parameters
235+
236+
| Parameter | Required | Type | Description |
237+
|:--- |:--- |:--- |:--- |
238+
| sourceArray |Yes |array |The value to retrieve the element by counting backwards from the end. |
239+
| reverseIndex |Yes |integer |The one-based index from the end of the array. |
240+
241+
### Return value
242+
243+
A single element from an array, selected by counting backward from the end of the array.
244+
245+
### Example
246+
247+
The following example shows how to use the `indexFromEnd` function.
248+
249+
```json
250+
{
251+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
252+
"contentVersion": "1.0.0.0",
253+
"variables": {
254+
"items": [
255+
"apple",
256+
"banana",
257+
"orange",
258+
"grape"
259+
]
260+
},
261+
"resources": [],
262+
"outputs": {
263+
"secondToLast": {
264+
"type": "string",
265+
"value": "[indexFromEnd(variables('items'), 2)]"
266+
}
267+
}
268+
}
269+
```
270+
271+
The output from the preceding example with the default values is:
272+
273+
| Name | Type | Value |
274+
| ---- | ---- | ----- |
275+
| secondToLast | String | orange |
276+
226277
## indexOf
227278

228279
`indexOf(arrayToSearch, itemToFind)`
@@ -693,6 +744,92 @@ The output from the preceding example with the default values is:
693744
| arrayOutput | Array | ["one", "two"] |
694745
| stringOutput | String | on |
695746

747+
## tryIndexFromEnd
748+
749+
`tryndexFromEnd(sourceArray, reverseIndex)`
750+
751+
The `tryIndexFromEnd` function is a safe version of [`indexFromEnd`](#indexfromend). It retrieves a value from an array by counting backward from the end without throwing an error if the index is out of range.
752+
753+
In Bicep, use the [Reserved index accessor](../bicep/operators-access.md#reverse-index-accessor) operator and the [Safe dereference](../bicep/operator-safe-dereference.md#safe-dereference) operator.
754+
755+
### Parameters
756+
757+
| Parameter | Required | Type | Description |
758+
|:--- |:--- |:--- |:--- |
759+
| sourceArray |Yes |array |The value to retrieve the element by counting backwards from the end. |
760+
| reverseIndex |Yes |integer |The one-based index from the end of the array. |
761+
762+
### Return value
763+
764+
If the index is valid (within array bounds), returns the array element at that reverse index. If the index is out of range, returns null instead of throwing an error.
765+
766+
### Example
767+
768+
The following example shows how to use the `tryIndexFromEnd` function:
769+
770+
```json
771+
{
772+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
773+
"contentVersion": "1.0.0.0",
774+
"variables": {
775+
"items": [
776+
"apple",
777+
"banana",
778+
"orange",
779+
"grape"
780+
]
781+
},
782+
"resources": [],
783+
"outputs": {
784+
"secondToLast": {
785+
"type": "string",
786+
"value": "[tryIndexFromEnd(variables('items'), 2)]"
787+
}
788+
}
789+
}
790+
```
791+
792+
The output from the preceding example with the default values is:
793+
794+
| Name | Type | Value |
795+
| ---- | ---- | ----- |
796+
| secondToLast | String | orange |
797+
798+
The following example shows an out-of-bound scenario:
799+
800+
```json
801+
{
802+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
803+
"languageVersion": "2.0",
804+
"contentVersion": "1.0.0.0",
805+
"parameters": {
806+
"items": {
807+
"type": "array",
808+
"defaultValue": [
809+
"apple",
810+
"banana",
811+
"orange",
812+
"grape"
813+
]
814+
}
815+
},
816+
"resources": {},
817+
"outputs": {
818+
"outOfBound": {
819+
"type": "string",
820+
"nullable": true,
821+
"value": "[tryIndexFromEnd(parameters('items'), 5)]"
822+
}
823+
}
824+
}
825+
```
826+
827+
The output from the preceding example with the default values is:
828+
829+
| Name | Type | Value |
830+
| ---- | ---- | ----- |
831+
| outOfBound | String | (null) |
832+
696833
## union
697834

698835
`union(arg1, arg2, arg3, ...)`

articles/azure-resource-manager/templates/template-functions.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Template functions
33
description: Describes the functions to use in an Azure Resource Manager template (ARM template) to retrieve values, work with strings and numerics, and retrieve deployment information.
44
ms.topic: reference
55
ms.custom: devx-track-arm-template
6-
ms.date: 02/12/2025
6+
ms.date: 07/07/2025
77
---
88

99
# ARM template functions
@@ -29,6 +29,7 @@ The [any function](../bicep/bicep-functions-any.md) is available in Bicep to hel
2929
<a id="createarray" aria-hidden="true"></a>
3030
<a id="empty" aria-hidden="true"></a>
3131
<a id="first" aria-hidden="true"></a>
32+
<a id="indexfromend" aria-hidden="true"></a>
3233
<a id="indexof" aria-hidden="true"></a>
3334
<a id="intersection" aria-hidden="true"></a>
3435
<a id="last" aria-hidden="true"></a>
@@ -39,6 +40,7 @@ The [any function](../bicep/bicep-functions-any.md) is available in Bicep to hel
3940
<a id="range" aria-hidden="true"></a>
4041
<a id="skip" aria-hidden="true"></a>
4142
<a id="take" aria-hidden="true"></a>
43+
<a id="tryindexfromend" aria-hidden="true"></a>
4244
<a id="union" aria-hidden="true"></a>
4345

4446
## Array functions
@@ -51,6 +53,7 @@ Resource Manager provides several functions for working with arrays.
5153
* [createArray](template-functions-array.md#createarray)
5254
* [empty](template-functions-array.md#empty)
5355
* [first](template-functions-array.md#first)
56+
* [indexFromEnd](template-functions-array.md#indexfromend)
5457
* [indexOf](template-functions-array.md#indexof)
5558
* [intersection](template-functions-array.md#intersection)
5659
* [last](template-functions-array.md#last)
@@ -61,6 +64,7 @@ Resource Manager provides several functions for working with arrays.
6164
* [range](template-functions-array.md#range)
6265
* [skip](template-functions-array.md#skip)
6366
* [take](template-functions-array.md#take)
67+
* [tryIndexFromEnd](template-functions-array.md#tryindexfromend)
6468
* [union](template-functions-array.md#union)
6569

6670
For Bicep files, use the [array](../bicep/bicep-functions-array.md) functions.

articles/azure-resource-manager/templates/toc.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ items:
293293
- name: Template best practices
294294
href: best-practices.md
295295
- name: Data types
296+
displayName: nullable types,union type,secure strings,secure objects,data type assignability
296297
href: data-types.md
297298
- name: Frequently asked questions
298299
href: frequently-asked-questions.yml
@@ -469,7 +470,7 @@ items:
469470
- name: All functions
470471
href: template-functions.md
471472
- name: Array functions
472-
displayName: array,concat,contains,createArray,empty,first,indexOf,intersection,last,lastIndexOf,length,max,min,range,skip,take,union
473+
displayName: array,concat,contains,createArray,empty,first,indexFromEnd,indexOf,intersection,last,lastIndexOf,length,max,min,range,skip,take,tryIndexFromEdn,union
473474
href: template-functions-array.md
474475
- name: CIDR functions
475476
displayName: parseCidr,cidrSubnet,cidrHost

articles/cost-management-billing/reservations/prepare-buy-reservation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ms.reviewer: primittal
66
ms.service: cost-management-billing
77
ms.subservice: reservations
88
ms.topic: how-to
9-
ms.date: 03/26/2025
9+
ms.date: 07/08/2025
1010
ms.author: primittal
1111
---
1212

@@ -24,7 +24,7 @@ You can't buy a reservation if you have a custom role that mimics owner role or
2424

2525
Enterprise Agreement (EA) customers can limit purchases to EA admins by disabling the **Reserved Instances** policy option in the [Azure portal](https://portal.azure.com/#blade/Microsoft_Azure_GTM/ModernBillingMenuBlade/BillingAccounts). To change settings, navigate to the **Policies** menu.
2626

27-
Microsoft Customer Agreement (MCA), Billing Profile Owners can restrict the reservation purchase by disabling the **Reserved Instances** policy option in the [Azure portal](https://portal.azure.com/#blade/Microsoft_Azure_GTM/ModernBillingMenuBlade/BillingAccounts). Beginning in June 2025, Microsoft Customer Agreement (MCA), Billing Profile, and Billing Account Owners will have the ability to purchase Reservations even if the Reserved Instances policy option is disabled in the Azure portal. To change settings, navigate to the **Policies** menu under **Billing Profile**.
27+
Microsoft Customer Agreement (MCA), Billing Profile Owners can restrict the reservation purchase by disabling the **Reserved Instances** policy option in the [Azure portal](https://portal.azure.com/#blade/Microsoft_Azure_GTM/ModernBillingMenuBlade/BillingAccounts). Billing Profile, and Billing Account Owners will have the ability to purchase Reservations even if the Reserved Instances policy option is disabled in the Azure portal. You can change the settings in **Policies** menu under **Billing Profile** to control ability to purchase for RBAC users.
2828

2929
EA admins or Billing Profile Owners must have owner or reservation purchaser access on at least one EA or MCA subscription to purchase a reservation. The option is useful for enterprises that want a centralized team to purchase reservations.
3030

12.6 KB
Loading
25.2 KB
Loading
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
title: DNS Record Types and IPv6 Support in Azure Traffic Manager
3+
description: Configure DNS record types in Azure Traffic Manager. Learn how AAAA, A, and CNAME records enable IPv6 and IPv4 support for dual-stack environments. Start routing traffic today.
4+
author: asudbring
5+
ms.topic: concept-article
6+
ms.date: 06/19/2025
7+
ms.author: allensu
8+
#customer intent: As a network administrator, I want to understand which DNS record types Azure Traffic Manager supports, so that I can choose the right configuration for my environment.
9+
---
10+
11+
# DNS record types and IPv6 support in Azure Traffic Manager
12+
13+
Azure Traffic Manager is a DNS-based traffic load balancer that distributes traffic across global Azure regions. To effectively route traffic to your applications, Traffic Manager supports multiple DNS record types that work with both IPv4 and IPv6 protocols.
14+
15+
This article explains the DNS record types that Traffic Manager supports and how they enable dual-stack networking environments. You learn about AAAA records for IPv6 addresses, A records for IPv4 addresses, and CNAME records for domain aliasing. Understanding these record types helps you choose the right configuration for your network infrastructure and ensures optimal traffic routing for your applications.
16+
17+
## AAAA records for IPv6 support
18+
19+
AAAA records map domain names to IPv6 addresses. Azure Traffic Manager supports IPv6 records, enabling traffic routing to services accessible over IPv6 addresses. As the internet transitions towards IPv6, Azure Traffic Manager is equipped to handle this newer protocol, ensuring seamless reachability for services.
20+
21+
Azure Traffic Manager now includes these IPv6 capabilities:
22+
23+
- **IPv6 Maps in DNS Nameservers**: Enables efficient IPv6 address management and resolution by including IPv6 address space in internal DNS maps, providing low-latency resolution for global IPv6 clients.
24+
25+
- **IPv6 Client Subnet (ECS) Support**: Enables geographically accurate traffic routing by using part of the client's IPv6 address through EDNS Client Subnet extension, reducing latency for end users. ECS is used in Performance, Subnet, and Geographic Routing methods.
26+
27+
- **IPv6 Subnet Overrides**: Lets you control traffic routing based on the source IP address of DNS queries, supporting both IPv4 and IPv6 addresses.
28+
29+
These enhancements give full support for IPv6 AAAA record types and provide robust traffic management in IPv6 environments.
30+
31+
## A records for IPv4 addresses
32+
33+
A records map domain names to IPv4 addresses. IPv4 is the backbone of the internet and is still widely used, even as IPv6 adoption grows. Azure Traffic Manager supports IPv4 records, so your existing services and infrastructure stay compatible.
34+
35+
## CNAME records for domain aliasing
36+
37+
CNAME (canonical name) records map an alias name to a `trafficmanager.net` domain name. Azure Traffic Manager supports CNAME records as endpoints, so you can route traffic to a domain name instead of a specific IP address.
38+
39+
CNAME records simplify DNS configuration management. You can handle changes to IP addresses at the authoritative DNS level without changing settings in Azure Traffic Manager, so DNS management is more efficient and scalable.
40+
41+
For example, a domain like `www.contoso.com` can point to `contoso.trafficmanager.net`. You can manage changes to backend service IP addresses centrally without updating the user-facing domain.
42+
43+
## Dual-stack support in Traffic Manager
44+
45+
Azure Traffic Manager is dual stack at the DNS level, so it responds to both A (IPv4) and AAAA (IPv6) DNS queries. This dual stack capability is available only when you use CNAME-based endpoints, because A and AAAA records respond only to their respective query types. Clients connect over the protocol their network or device prefers, based on standard DNS resolution behavior.
46+
47+
For most production scenarios, use DNS-based (CNAME) endpoints. This approach gives you flexibility, simplifies management, and ensures compatibility with both IPv4 and IPv6 clients.
48+
49+
> [!NOTE]
50+
> Traffic Manager doesn't support setting up separate endpoints within the same profile that use different DNS record types (like one A and one AAAA). This setup ensures that DNS responses from Traffic Manager match the record type the client requests.
51+
52+

0 commit comments

Comments
 (0)