Skip to content

Commit 78543a8

Browse files
authored
Merge pull request #182651 from MicrosoftDocs/master
Merge master to live, 4 AM
2 parents 4ef9bc0 + f2b3beb commit 78543a8

30 files changed

+1256
-232
lines changed

articles/active-directory/develop/tutorial-v2-nodejs-console.md

Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ manager: CelesteDG
99
ms.service: active-directory
1010
ms.subservice: develop
1111
ms.topic: tutorial
12-
ms.date: 02/17/2021
12+
ms.date: 12/12/2021
1313
ms.author: marsma
1414
---
1515

@@ -45,63 +45,75 @@ Use the following settings for your app registration:
4545

4646
## Create the project
4747

48-
Create a folder to host your application, for example *NodeConsoleApp*.
4948

50-
1. First, change to your project directory in your terminal and then run the following NPM commands:
49+
1. Start by creating a directory for this Node.js tutorial project. For example, *NodeConsoleApp*.
5150

52-
```console
51+
1. In your terminal, change into the directory you created (the project root), and then run the following commands:
52+
53+
```console
5354
npm init -y
5455
npm install --save dotenv yargs axios @azure/msal-node
55-
```
56+
```
5657

57-
2. Next, create a folder named *bin*. Then, inside this folder, create file named *index.js* and add the following code:
58+
1. Next, edit the *package.json* file in the project root and prefix the value of `main` with `bin/`, like this:
5859

59-
```JavaScript
60-
#!/usr/bin/env node
60+
```json
61+
"main": "bin/index.js",
62+
```
6163

62-
// read in env settings
63-
require('dotenv').config();
64+
1. Now create the *bin* directory, and inside *bin*, add the following code to a new file named *index.js*:
6465

65-
const yargs = require('yargs');
66+
```JavaScript
67+
#!/usr/bin/env node
6668

67-
const fetch = require('./fetch');
68-
const auth = require('./auth');
69+
// read in env settings
70+
require('dotenv').config();
6971

70-
const options = yargs
71-
.usage('Usage: --op <operation_name>')
72-
.option('op', { alias: 'operation', describe: 'operation name', type: 'string', demandOption: true })
73-
.argv;
72+
const yargs = require('yargs');
7473

75-
async function main() {
76-
console.log(`You have selected: ${options.op}`);
74+
const fetch = require('./fetch');
75+
const auth = require('./auth');
7776

78-
switch (yargs.argv['op']) {
79-
case 'getUsers':
77+
const options = yargs
78+
.usage('Usage: --op <operation_name>')
79+
.option('op', { alias: 'operation', describe: 'operation name', type: 'string', demandOption: true })
80+
.argv;
8081

81-
try {
82-
// here we get an access token
83-
const authResponse = await auth.getToken(auth.tokenRequest);
82+
async function main() {
83+
console.log(`You have selected: ${options.op}`);
8484

85-
// call the web API with the access token
86-
const users = await fetch.callApi(auth.apiConfig.uri, authResponse.accessToken);
85+
switch (yargs.argv['op']) {
86+
case 'getUsers':
8787

88-
// display result
89-
console.log(users);
90-
} catch (error) {
91-
console.log(error);
92-
}
88+
try {
89+
// here we get an access token
90+
const authResponse = await auth.getToken(auth.tokenRequest);
9391

94-
break;
95-
default:
96-
console.log('Select a Graph operation first');
97-
break;
98-
}
99-
};
92+
// call the web API with the access token
93+
const users = await fetch.callApi(auth.apiConfig.uri, authResponse.accessToken);
10094

101-
main();
102-
```
95+
// display result
96+
console.log(users);
97+
} catch (error) {
98+
console.log(error);
99+
}
100+
101+
break;
102+
default:
103+
console.log('Select a Graph operation first');
104+
break;
105+
}
106+
};
107+
108+
main();
109+
```
110+
111+
The *index.js* file you just created references two other node modules that you'll create next:
112+
113+
- *auth.js* - Uses MSAL Node for acquiring access tokens from the Microsoft identity platform.
114+
- *fetch.js* - Requests data from the Microsoft Graph API by including access tokens (acquired in *auth.js*) in HTTP requests to the API.
103115

104-
This file references two other node modules: *auth.js* which contains an implementation of MSAL Node for acquiring access tokens, and *fetch.js* which contains a method for making an HTTP request to Microsoft Graph API with an access token. After completing the rest of the tutorial, the file and folder structure of your project should look similar to the following:
116+
At the end of the tutorial, your project's file and directory structure should look similar to this:
105117

106118
```
107119
NodeConsoleApp/
@@ -115,7 +127,7 @@ NodeConsoleApp/
115127
116128
## Add authentication logic
117129
118-
Inside the *bin* folder, create another file named *auth.js* and add the following code for acquiring an access token to present when calling the Microsoft Graph API.
130+
Inside the *bin* directory, add the following code to a new file named *auth.js*. The code in *auth.js* acquires an access token from the Microsoft identity platform for including in Microsoft Graph API requests.
119131
120132
```JavaScript
121133
const msal = require('@azure/msal-node');
@@ -128,7 +140,7 @@ const msal = require('@azure/msal-node');
128140
const msalConfig = {
129141
auth: {
130142
clientId: process.env.CLIENT_ID,
131-
authority: process.env.AAD_ENDPOINT + process.env.TENANT_ID,
143+
authority: process.env.AAD_ENDPOINT + '/' + process.env.TENANT_ID,
132144
clientSecret: process.env.CLIENT_SECRET,
133145
}
134146
};

articles/azure-monitor/logs/private-link-configure.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,6 @@ So far we covered the configuration of your network, but you should also conside
9393
Go to the Azure portal. In your resource's menu, there's a menu item called **Network Isolation** on the left-hand side. This page controls both which networks can reach the resource through a Private Link, and whether other networks can reach it or not.
9494

9595

96-
> [!NOTE]
97-
> Starting September 2021, Network Isolation will be strictly enforced. Resources set to block queries from public networks, and that aren't connected to any private network (through an AMPLS) will stop accepting queries from any network.
98-
9996
![LA Network Isolation](./media/private-link-security/ampls-network-isolation.png)
10097

10198
### Connected Azure Monitor Private Link scopes

articles/azure-monitor/logs/private-link-design.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ms.date: 08/01/2021
1111

1212
Before you set up your Azure Monitor Private Link, consider your network topology, and specifically your DNS routing topology.
1313

14-
As discussed in [How it works](./private-link-security.md#how-it-works), setting up a Private Link affects traffic to all Azure Monitor resources. That's especially true for Application Insights resources. Additionally, it affects not only the network connected to the Private Endpoint but also all other networks sharing the same DNS.
14+
As discussed in the [Azure Monitor Private Link overview article](private-link-security.md), setting up a Private Link affects traffic to all Azure Monitor resources. That's especially true for Application Insights resources. Additionally, it affects not only the network connected to the Private Endpoint but also all other networks sharing the same DNS.
1515

1616
The simplest and most secure approach would be:
1717
1. Create a single Private Link connection, with a single Private Endpoint and a single AMPLS. If your networks are peered, create the Private Link connection on the shared (or hub) VNet.

articles/azure-monitor/logs/private-link-security.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ With Private Link you can:
2424

2525
For more information, see [Key Benefits of Private Link](../../private-link/private-link-overview.md#key-benefits).
2626

27-
## How it works
28-
29-
### Overview
27+
## How it works: main principles
3028
An Azure Monitor Private Link connects a Private Endpoint to a set of Azure Monitor resources - Log Analytics workspaces and Application Insights resources. That set is called an Azure Monitor Private Link Scope (AMPLS).
3129

3230
![Diagram of basic resource topology](./media/private-link-security/private-link-basic-topology.png)
@@ -37,7 +35,7 @@ An Azure Monitor Private Link connects a Private Endpoint to a set of Azure Moni
3735
* Control networks access to your Azure Monitor resources - configure each of your workspaces or components to accept or block traffic from public networks. You can apply different settings for ingestion and query requests.
3836

3937

40-
### Azure Monitor Private Links rely on your DNS
38+
## Azure Monitor Private Links rely on your DNS
4139
When you set up a Private Link connection, your DNS zones map Azure Monitor endpoints to private IPs in order to send traffic through the Private Link. Azure Monitor uses both resource-specific endpoints and shared global / regional endpoints to reach the workspaces and components in your AMPLS.
4240

4341
> [!WARNING]
@@ -46,7 +44,7 @@ When you set up a Private Link connection, your DNS zones map Azure Monitor endp
4644
The use of shared endpoints also means you should use a single AMPLS for all networks that share the same DNS. Creating multiple AMPLS resources will cause Azure Monitor DNS zones to override each other, and break existing environments. See [Plan by network topology](./private-link-design.md#plan-by-network-topology) to learn more.
4745

4846

49-
#### Shared global and regional endpoints
47+
### Shared global and regional endpoints
5048
When configuring Private Link even for a single resource, traffic to the below endpoints will be sent through the allocated Private IPs.
5149

5250
* All Application Insights endpoints - endpoints handling ingestion, live metrics, profiler, debugger etc. to Application Insights endpoints are global.
@@ -57,14 +55,14 @@ When configuring Private Link even for a single resource, traffic to the below e
5755
> Creating a Private Link affects traffic to **all** monitoring resources, not only resources in your AMPLS. Effectively, it will cause all query requests as well as ingestion to Application Insights components to go through private IPs. However, it does not mean the Private Link validation applies to all these requests.</br>
5856
> Resources not added to the AMPLS can only be reached if the AMPLS access mode is 'Open' and the target resource accepts traffic from public networks. While using the private IP, **Private Link validations don't apply to resources not in the AMPLS**. See [Private Link access modes](#private-link-access-modes-private-only-vs-open) to learn more.
5957
60-
#### Resource-specific endpoints
58+
### Resource-specific endpoints
6159
Log Analytics endpoints are workspace-specific, except for the query endpoint discussed earlier. As a result, adding a specific Log Analytics workspace to the AMPLS will send ingestion requests to this workspace over the Private Link, while ingestion to other workspaces will continue to use the public endpoints.
6260

6361
> [!IMPORTANT]
6462
> Starting December 1, 2021, the Private Endpoints DNS configuration will use the Endpoint Compression mechanism, which allocates a single private IP address for all workspaces in the same region. This improves the supported scale (up to 300 workspaces and 1000 components per AMPLS) and reduces the total number of IPs taken from the network's IP pool.
6563
6664

67-
### Private Link access modes: Private Only vs Open
65+
## Private Link access modes: Private Only vs Open
6866
As discussed in [Azure Monitor Private Link relies on your DNS](#azure-monitor-private-links-rely-on-your-dns), only a single AMPLS resource should be created for all networks that share the same DNS. As a result, organizations that use a single global or regional DNS in fact have a single Private Link to manage traffic to all Azure Monitor resources, across all global, or regional networks.
6967

7068
For Private Links created before September 2021, that means -

articles/data-factory/concepts-data-flow-expression-builder.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,17 @@ A cached lookup allows you to do an inline lookup of the output of a cached sink
8383

8484
### Locals
8585

86-
If you are sharing logic across multiple columns or want to compartmentalize your logic, you can create a local within a derived column\. To reference a local, either click on the local from the **Expression elements** view or reference it with a colon in front of its name. For example, a local called local1 would be referenced by `:local1`. Learn more about locals in the [derived column documentation](data-flow-derived-column.md#locals).
86+
If you are sharing logic across multiple columns or want to compartmentalize your logic, you can create a local variable. A local is a set of logic that doesn't get propagated downstream to the following transformation. Locals can be created within the expression builder by going to **Expression elements** and selecting **Locals**. Create a new one by selecting **Create new**.
87+
88+
:::image type="content" source="media/data-flow/create-local.png" alt-text="Create local":::
89+
90+
Locals can reference any expression element including functions, input schema, parameters, and other locals. When referencing other locals, order does matter as the referenced local needs to be "above" the current one.
91+
92+
:::image type="content" source="media/data-flow/create-local-2.png" alt-text="Create local 2":::
93+
94+
To reference a local in a transformation, either click on the local from the **Expression elements** view or reference it with a colon in front of its name. For example, a local called local1 would be referenced by `:local1`. To edit a local definition, hover over it in the expression elements view and click on the pencil icon.
95+
96+
:::image type="content" source="media/data-flow/using-locals.png" alt-text="Using locals":::
8797

8898
## Preview expression results
8999

articles/data-factory/concepts-data-flow-flowlet.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ ms.date: 11/11/2021
2222
> [!NOTE]
2323
> The Flowlet feature in mapping data flow is currently in public preview
2424
25+
> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RWQK3m]
26+
2527
## Getting started
2628
To create a flowlet, click the new flowlet action from the mapping data flow menu options.
2729

@@ -72,4 +74,4 @@ If you have mulit-select turned on, you can also select multiple mapping data fl
7274
## Running a flowlet inside of a mapping data flow
7375
Once the flowlet is created, you can run the flowlet from your mapping data flow activity with the flowlet transformation.
7476

75-
For more information, see [Flowlet transformation in mapping data flow | Microsoft Docs](data-flow-flowlet.md)
77+
For more information, see [Flowlet transformation in mapping data flow | Microsoft Docs](data-flow-flowlet.md)

articles/data-factory/control-flow-power-query-activity.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ms.author: makromer
66
ms.service: data-factory
77
ms.subservice: data-flows
88
ms.topic: conceptual
9-
ms.date: 08/12/2021
9+
ms.date: 12/12/2021
1010
---
1111

1212
# Power Query activity in Azure Data Factory
@@ -61,6 +61,10 @@ To achieve scale with your Power Query activity, Azure Data Factory translates y
6161

6262
Choose the dataset you wish to use for landing your transformed data once the Power Query M script has been executed on Spark. For more details on configuring sinks, visit the documentation for [data flow sinks](data-flow-sink.md).
6363

64+
You have the option to sink your output to multiple destinations. Click on the plus (+) button to add more sinks to your query. You can also direct each individual query output from your wrangling Power Query activity to different destinations.
65+
66+
![Screenshot that shows Power Query multiple sinks.](media/data-flow/pq-multi-output.png)
67+
6468
## Mapping
6569

6670
In the Mapping tab, you can configure column mapping from the output of your Power Query activity to the target schema of your chosen sink. Read more about column mapping from the [data flow sink mapping documentation](data-flow-sink.md#field-mapping).

articles/data-factory/data-flow-derived-column.md

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ ms.service: data-factory
88
ms.subservice: data-flows
99
ms.topic: conceptual
1010
ms.custom: synapse
11-
ms.date: 09/09/2021
11+
ms.date: 12/10/2021
1212
---
1313

1414
# Derived column transformation in mapping data flow
@@ -49,20 +49,6 @@ For more information on handling complex types in data flow, see [JSON handling
4949

5050
:::image type="content" source="media/data-flow/derive-complex-column.png" alt-text="Add complex column":::
5151

52-
### Locals
53-
54-
If you are sharing logic across multiple columns or want to compartmentalize your logic, you can create a local within a derived column transformation. A local is a set of logic that doesn't get propagated downstream to the following transformation. Locals can be created within the expression builder by going to **Expression elements** and selecting **Locals**. Create a new one by selecting **Create new**.
55-
56-
:::image type="content" source="media/data-flow/create-local.png" alt-text="Create local":::
57-
58-
Locals can reference any expression element a derived column including functions, input schema, parameters, and other locals. When referencing other locals, order does matter as the referenced local needs to be "above" the current one.
59-
60-
:::image type="content" source="media/data-flow/create-local-2.png" alt-text="Create local 2":::
61-
62-
To reference a local in a derived column, either click on the local from the **Expression elements** view or reference it with a colon in front of its name. For example, a local called local1 would be referenced by `:local1`. To edit a local definition, hover over it in the expression elements view and click on the pencil icon.
63-
64-
:::image type="content" source="media/data-flow/using-locals.png" alt-text="Using locals":::
65-
6652
## Data flow script
6753

6854
### Syntax

articles/data-factory/data-flow-flowlet.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Use the flowlet transformation to run a previously create mapping data flow flow
2222
> [!NOTE]
2323
> The flowlet transformation in Azure Data Factory and Synapse Analytics pipelines is currently in public preview
2424
25+
> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RWQK3m]
2526
2627
## Configuration
2728

41 KB
Loading

0 commit comments

Comments
 (0)