Skip to content

Commit 4b38939

Browse files
committed
content updates
1 parent bea3921 commit 4b38939

File tree

2 files changed

+73
-43
lines changed

2 files changed

+73
-43
lines changed

articles/azure-resource-manager/managed-applications/publish-service-catalog-app.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ Add the following JSON and save the file. It defines the resources to deploy an
142142

143143
## Define your create experience
144144

145-
As a publisher, you define the portal experience for creating the managed application. The _createUiDefinition.json_ file generates the portal interface. You define how users provide input for each parameter using [control elements](create-uidefinition-elements.md) like drop-downs and text boxes.
145+
As a publisher, you define the portal experience to create the managed application. The _createUiDefinition.json_ file generates the portal interface. You define how users provide input for each parameter using [control elements](create-uidefinition-elements.md) like drop-downs and text boxes.
146146

147147
Open Visual Studio Code, create a file with the case-sensitive name _createUiDefinition.json_ and save it. The user interface allows the user to input the App Service name, App Service plan's name, storage account prefix, and storage account type. During deployment, the `uniqueString` function appends a 13 character string to the name prefixes so the names are globally unique across Azure.
148148

@@ -244,9 +244,9 @@ To learn more, see [Get started with CreateUiDefinition](create-uidefinition-ove
244244

245245
## Package the files
246246

247-
Add the two files to a file named _app.zip_. The two files must be at the root level of the _.zip_ file. If you put the files in a folder, when you create the managed application definition, you'll receive an error that states the required files aren't present.
247+
Add the two files to a package file named _app.zip_. The two files must be at the root level of the _.zip_ file. If the files are in a folder, when you create the managed application definition, you receive an error that states the required files aren't present.
248248

249-
Upload the package to an accessible location from where it can be consumed. The storage account name must be globally unique across Azure and the length must be 3-24 characters with only lowercase letters and numbers. In the `Name` parameter, replace the placeholder `demostorageaccount` with your unique storage account name.
249+
Upload _app.zip_ to an Azure storage account so you can use it when you deploy the managed application's definition. The storage account name must be globally unique across Azure and the length must be 3-24 characters with only lowercase letters and numbers. In the `Name` parameter, replace the placeholder `demostorageaccount` with your unique storage account name.
250250

251251
# [PowerShell](#tab/azure-powershell)
252252

@@ -313,27 +313,27 @@ In this section you'll get identity information from Azure Active Directory, cre
313313

314314
### Create an Azure Active Directory user group or application
315315

316-
The next step is to select a user group, user, or application for managing the resources for the customer. This identity has permissions on the managed resource group according to the role that's assigned. The role can be any Azure built-in role like Owner or Contributor. To create a new Active Directory user group, see [Create a group and add members in Azure Active Directory](../../active-directory/fundamentals/active-directory-groups-create-azure-portal.md).
316+
The next step is to select a user, group, or application for managing the resources for the customer. This identity has permissions on the managed resource group according to the assigned role. The role can be any Azure built-in role like Owner or Contributor. To create a new Azure Active Directory user group, go to [Manage Azure Active Directory groups and group membership](../../active-directory/fundamentals/how-to-manage-groups.md).
317317

318318
This example uses a user group, so you need the object ID of the user group to use for managing the resources. Replace the placeholder `mygroup` with your group's name.
319319

320320
# [PowerShell](#tab/azure-powershell)
321321

322322
```azurepowershell-interactive
323-
$groupID=(Get-AzADGroup -DisplayName mygroup).Id
323+
$principalid=(Get-AzADGroup -DisplayName mygroup).Id
324324
```
325325

326326
# [Azure CLI](#tab/azure-cli)
327327

328328
```azurecli-interactive
329-
groupid=$(az ad group show --group mygroup --query id --output tsv)
329+
principalid=$(az ad group show --group mygroup --query id --output tsv)
330330
```
331331

332332
---
333333

334334
### Get the role definition ID
335335

336-
Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, user group, or application. Typically, you use the Owner, Contributor, or Reader role. The following command shows how to get the role definition ID for the Owner role:
336+
Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, group, or application. Typically, you use the Owner, Contributor, or Reader role. The following command shows how to get the role definition ID for the Owner role:
337337

338338
# [PowerShell](#tab/azure-powershell)
339339

@@ -385,7 +385,7 @@ New-AzManagedApplicationDefinition `
385385
-LockLevel ReadOnly `
386386
-DisplayName "Managed Storage Account" `
387387
-Description "Managed Azure Storage Account" `
388-
-Authorization "${groupID}:$roleid" `
388+
-Authorization "${principalid}:$roleid" `
389389
-PackageFileUri $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
390390
```
391391

@@ -405,7 +405,7 @@ az managedapp definition create \
405405
--lock-level ReadOnly \
406406
--display-name "Managed Storage Account" \
407407
--description "Managed Azure Storage Account" \
408-
--authorizations "$groupid:$roleid" \
408+
--authorizations "$principalid:$roleid" \
409409
--package-file-uri "$blob"
410410
```
411411

@@ -419,8 +419,8 @@ Some of the parameters used in the preceding example are:
419419
- **lock level**: The type of lock placed on the managed resource group. It prevents the customer from performing undesirable operations on this resource group. Currently, `ReadOnly` is the only supported lock level. When `ReadOnly` is specified, the customer can only read the resources present in the managed resource group. The publisher identities that are granted access to the managed resource group are exempt from the lock.
420420
- **authorizations**: Describes the principal ID and the role definition ID that are used to grant permission to the managed resource group.
421421

422-
- **Azure PowerShell**: `"${groupid}:$roleid"` or you can use curly braces for each variable `"${groupid}:${roleid}"`. Use a comma to separate multiple values: `"${groupid1}:$roleid1", "${groupid2}:$roleid2"`.
423-
- **Azure CLI**: `"$groupid:$roleid"` or you can use curly braces as shown in PowerShell. Use a space to separate multiple values: `"$groupid1:$roleid1" "$groupid2:$roleid2"`.
422+
- **Azure PowerShell**: `"${principalid}:$roleid"` or you can use curly braces for each variable `"${principalid}:${roleid}"`. Use a comma to separate multiple values: `"${principalid1}:$roleid1", "${principalid2}:$roleid2"`.
423+
- **Azure CLI**: `"$principalid:$roleid"` or you can use curly braces as shown in PowerShell. Use a space to separate multiple values: `"$principalid1:$roleid1" "$principalid2:$roleid2"`.
424424

425425
- **package file URI**: The location of a _.zip_ package file that contains the required files.
426426

articles/azure-resource-manager/managed-applications/publish-service-catalog-bring-your-own-storage.md

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Every managed application definition includes a file named _mainTemplate.json_.
4141

4242
Open Visual Studio Code, create a file with the case-sensitive name _mainTemplate.json_ and save it.
4343

44-
Add the following JSON and save the file. It defines the resources to deploy an App Service, App Service plan, and storage account for the application. This storage account isn't for the managed application definition.
44+
Add the following JSON and save the file. It defines the resources to deploy an App Service, App Service plan, and a storage account for the managed application. This storage account isn't for the managed application definition.
4545

4646
```json
4747
{
@@ -142,7 +142,7 @@ Add the following JSON and save the file. It defines the resources to deploy an
142142

143143
## Define your create experience
144144

145-
As a publisher, you define the portal experience for creating the managed application. The _createUiDefinition.json_ file generates the portal interface. You define how users provide input for each parameter using [control elements](create-uidefinition-elements.md) like drop-downs and text boxes.
145+
As a publisher, you define the portal experience to create the managed application. The _createUiDefinition.json_ file generates the portal interface. You define how users provide input for each parameter using [control elements](create-uidefinition-elements.md) like drop-downs and text boxes.
146146

147147
Open Visual Studio Code, create a file with the case-sensitive name _createUiDefinition.json_ and save it. The user interface allows the user to input the App Service name, App Service plan's name, storage account prefix, and storage account type. During deployment, the `uniqueString` function appends a 13 character string to the name prefixes so the names are globally unique across Azure.
148148

@@ -244,9 +244,9 @@ To learn more, see [Get started with CreateUiDefinition](create-uidefinition-ove
244244

245245
## Package the files
246246

247-
Add the two files to a file named _app.zip_. The two files must be at the root level of the _.zip_ file. If the files are in a folder, when you create the managed application definition, you receive an error that states the required files aren't present.
247+
Add the two files to a package file named _app.zip_. The two files must be at the root level of the _.zip_ file. If the files are in a folder, when you create the managed application definition, you receive an error that states the required files aren't present.
248248

249-
Upload the package to an accessible location from where it can be consumed. The storage account name must be globally unique across Azure and the length must be 3-24 characters with only lowercase letters and numbers. In the `Name` parameter, replace the placeholder `demostorageaccount` with your unique storage account name.
249+
Upload _app.zip_ to an Azure storage account so you can use it when you deploy the managed application's definition. The storage account name must be globally unique across Azure and the length must be 3-24 characters with only lowercase letters and numbers. In the `Name` parameter, replace the placeholder `demostorageaccount` with your unique storage account name.
250250

251251
# [PowerShell](#tab/azure-powershell)
252252

@@ -393,31 +393,31 @@ If you're running CLI commands with Git Bash for Windows, you might get an `Inva
393393

394394
---
395395

396-
The _Appliance Resource Provider_ is a service principal in your Azure Active Directory's tenant. From the Azure portal, you can see if it's registered by going to **Azure Active Directory** > **Enterprise applications** and change the search filter to **Microsoft Applications**. Search for _Appliance Resource Provider_. If it's not found, [register](../troubleshooting/error-register-resource-provider.md) the `Microsoft.Solutions` resource provider.
396+
The _Appliance Resource Provider_ is a service principal in your Azure Active Directory's tenant. From the Azure portal, you can see if it's registered by going to **Azure Active Directory** > **Enterprise applications** and change the search filter to **Microsoft Applications**. Search for _Appliance Resource Provider_. If it isn't found, [register](../troubleshooting/error-register-resource-provider.md) the `Microsoft.Solutions` resource provider.
397397

398398
## Create an Azure Active Directory user group or application
399399

400-
The next step is to select a user group, user, or application for managing the resources for the customer. This identity has permissions on the managed resource group according to the assigned role. The role can be any Azure built-in role like Owner or Contributor. To create a new Active Directory user group, see [Create a group and add members in Azure Active Directory](../../active-directory/fundamentals/active-directory-groups-create-azure-portal.md).
400+
The next step is to select a user, group, or application for managing the resources for the customer. This identity has permissions on the managed resource group according to the assigned role. The role can be any Azure built-in role like Owner or Contributor. To create a new Azure Active Directory user group, go to [Manage Azure Active Directory groups and group membership](../../active-directory/fundamentals/how-to-manage-groups.md).
401401

402402
This example uses a user group, so you need the object ID of the user group to use for managing the resources. Replace the placeholder `mygroup` with your group's name.
403403

404404
# [PowerShell](#tab/azure-powershell)
405405

406406
```azurepowershell-interactive
407-
$groupID=(Get-AzADGroup -DisplayName mygroup).Id
407+
$principalid=(Get-AzADGroup -DisplayName mygroup).Id
408408
```
409409

410410
# [Azure CLI](#tab/azure-cli)
411411

412412
```azurecli-interactive
413-
groupid=$(az ad group show --group mygroup --query id --output tsv)
413+
principalid=$(az ad group show --group mygroup --query id --output tsv)
414414
```
415415

416416
---
417417

418418
## Get the role definition ID
419419

420-
Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, user group, or application. Typically, you use the Owner, Contributor, or Reader role. The following command shows how to get the role definition ID for the Owner role:
420+
Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, group, or application. Typically, you use the Owner, Contributor, or Reader role. The following command shows how to get the role definition ID for the Owner role:
421421

422422
# [PowerShell](#tab/azure-powershell)
423423

@@ -433,7 +433,7 @@ roleid=$(az role definition list --name Owner --query [].name --output tsv)
433433

434434
---
435435

436-
### Deploy the managed application definition with an ARM template
436+
## Create the managed application definition ARM template
437437

438438
Use the following ARM template to deploy the managed application definition in your service catalog. The definition files are stored and maintained in your storage account.
439439

@@ -453,7 +453,7 @@ Add the following JSON and save the file.
453453
"applicationName": {
454454
"type": "string",
455455
"metadata": {
456-
"description": "Managed Application name."
456+
"description": "Name of the managed application definition."
457457
}
458458
},
459459
"definitionStorageResourceID": {
@@ -465,13 +465,13 @@ Add the following JSON and save the file.
465465
"packageFileUri": {
466466
"type": "string",
467467
"metadata": {
468-
"description": "The URI where the .zip package file is located."
468+
"description": "The URI of the .zip package file."
469469
}
470470
},
471471
"principalId": {
472472
"type": "string",
473473
"metadata": {
474-
"description": "Principal ID to access the managed resource group."
474+
"description": "Principal ID with access the managed resource group."
475475
}
476476
},
477477
"roleId": {
@@ -518,19 +518,59 @@ For more information about the template's properties, see [Microsoft.Solutions/a
518518

519519
Parameters used in the template:
520520

521-
- **applicationName**: The name of the the managed application definition.
521+
- **applicationName**: The name of the managed application definition.
522522
- **definitionStorageResourceID**: The resource ID of the managed application definition.
523523
- **lock level**: The type of lock placed on the managed resource group. It prevents the customer from performing undesirable operations on this resource group. Currently, `ReadOnly` is the only supported lock level. `ReadOnly` specifies that the customer can only read the resources present in the managed resource group. The publisher identities that are granted access to the managed resource group are exempt from the lock level.
524524
- **authorizations**: Describes the principal ID and the role definition ID that grant permission to the managed resource group.
525525

526-
- `principalId` is the object ID of the user, group, or service principal.
527-
- `roleDefinitionId`: The role ID for the Owner or Contributor role.
526+
- `principalId`: The object ID of the user, group, or service principal. The `principalid` variable's value.
527+
- `roleDefinitionId`: The role ID for the Owner or Contributor role. The `roleid` variable's value.
528528

529-
- **package file URI**: The location of a _.zip_ package file that contains the required files.
529+
- **package file URI**: The location of the _.zip_ package file that contains the managed application definition's files.
530+
531+
## Create a parameter file
532+
533+
The managed application defintion's template needs input for several parameters. The deployment command will prompt for the values or you can create a parameter file for the values. In this example, we use a parameter file to pass the parameter values to the deployment command.
534+
535+
In Visual Studio Code, create a new file named _azuredeploy-parameters.json_ and save it.
536+
537+
Add the following to your parameter file and save it. Then, replace the `{placeholder values}` including the curly braces, with your values.
538+
539+
```json
540+
{
541+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
542+
"contentVersion": "1.0.0.0",
543+
"parameters": {
544+
"applicationName": {
545+
"value": "{placeholder for managed application name}"
546+
},
547+
"definitionStorageResourceID": {
548+
"value": "{placeholder for you storage account ID}"
549+
},
550+
"packageFileUri": {
551+
"value": "{placeholder for the packageFileUri}"
552+
},
553+
"principalId": {
554+
"value": "{placeholder for principalid value}"
555+
},
556+
"roleId": {
557+
"value": "{placeholder for roleid value}"
558+
}
559+
}
560+
}
561+
```
562+
563+
| Parameter | Value |
564+
| ---- | ---- |
565+
| `applicationName` | Choose a name for your managed application definition. For this example, use _sampleManagedAppDefintion_.|
566+
| `definitionStorageResourceID` | Enter your storage account's resource ID. You created the `storageId` variable with this value in an earlier step. |
567+
| `packageFileUri` | Enter the URI to your _.zip_ package file. Use the URI for the _.zip_ [package file](#package-the-files) you created in an earlier step. The format is `https://yourStorageAccountName.blob.core.windows.net/appcontainer/app.zip`. |
568+
| `principalId` | The publishers Principal ID that needs access to manage resources in the managed resource group. Your `principalid` variable's value. |
569+
| `roleId` | Role ID for permissions to the managed resource group. For example Read, Contributor, Owner. Your `roleid` variable's value. |
530570

531571
### Deploy the definition
532572

533-
When you deploy the definition, you're deploying only the managed application's definition so that it's available in your service catalog. This process doesn't deploy the managed application's resources.
573+
When you deploy the managed application's definition it becomes available in your service catalog. This process doesn't deploy the managed application's resources.
534574

535575
Create a resource group named _byosDefinitionRG_ and deploy the managed application definition to your storage account.
536576

@@ -539,36 +579,26 @@ Create a resource group named _byosDefinitionRG_ and deploy the managed applicat
539579
```azurepowershell-interactive
540580
New-AzResourceGroup -Name byosDefinitionRG -Location eastus
541581
542-
$storageId
543-
544582
New-AzResourceGroupDeployment `
545583
-ResourceGroupName byosDefinitionRG `
546-
-TemplateFile .\azuredeploy.json
584+
-TemplateFile .\azuredeploy.json `
585+
-TemplateParameterFile .\azuredeploy-parameters.json
547586
```
548587

549588
# [Azure CLI](#tab/azure-cli)
550589

551590
```azurecli-interactive
552591
az group create --name byosDefinitionRG --location eastus
553592
554-
echo $storageId
555-
556593
az deployment group create \
557594
--resource-group byosDefinitionRG \
558-
--template-file ./azuredeploy.json
595+
--template-file ./azuredeploy.json \
596+
--parameters ./azuredeploy-parameters.json
559597
```
560598

561599
---
562600

563-
The deployment prompts you to enter parameter values or you can use a parameter file.
564601

565-
| Parameter | Value |
566-
| ---- | ---- |
567-
| `applicationName` | Choose a name for your managed application definition. For this example, use _sampleManagedAppDefintion_.|
568-
| `definitionStorageResourceID` | Enter your storage account's resource ID. You created the `storageId` variable with this value in an earlier step. Don't wrap the resource ID with quotes. |
569-
| `packageFileUri` | Enter the URI to your _.zip_ package file. Use the URI for the _.zip_ [package file](#package-the-files) you created in an earlier step. The format is `https://yourStorageAccountName.blob.core.windows.net/appcontainer/app.zip`. |
570-
| `principalId` | The publishers Principal ID that needs access to manage resources in the managed resource group. |
571-
| `roleId` | Role ID for permissions to the managed resource group. For example Read, Contributor, Owner. |
572602

573603
### Verify definition files storage
574604

0 commit comments

Comments
 (0)