发布到 Azure Stack Hub 市场的每个项都使用 Azure 库包 (.azpkg) 格式。 使用 Azure Gallery Packager 工具可以创建自定义 Azure 库包,然后可将此包上传到 Azure Stack Hub 市场供用户下载。 部署过程使用 Azure 资源管理器模板。
市场项
本文中的示例演示如何创建 Windows 或 Linux 类型的单个 VM 市场产品/服务。
先决条件
在创建 VM 市场项之前,请执行以下操作:
- 按照 将 VM 映像添加到 Azure Stack Hub 中的说明,将自定义 VM 映像上传到 Azure Stack Hub 门户。
- 按照本文中的说明打包映像(创建 .azpkg),并将其上传到 Azure Stack Hub 市场。
创建市场项
若要创建自定义市场项,请执行以下操作:
下载 Azure 图库打包器工具:
该工具包含采用 .azpkg 格式的示例包,必须先提取。 可以将文件扩展名从“.azpkg”重命名为“.zip”,或使用所选的存档器工具:
提取后,.zip 文件包含可用的 Linux 或 Windows Azure 资源管理器模板。 可以重复使用预先制作的资源管理器模板,并使用将在 Azure Stack Hub 门户中显示的项的产品详细信息修改相应的参数。 或者,可以重复使用 .azpkg 文件并跳过以下步骤来自定义自己的图库包。
创建 Azure 资源管理器模板,或使用适用于 Windows/Linux 的示例模板。 在步骤 1 下载的打包器工具 .zip 文件中已提供这些示例模板。 可以使用模板并更改文本字段,也可以从 GitHub 下载预配置的模板。 有关 Azure 资源管理器模板的详细信息,请参阅 Azure 资源管理器模板。
库包应包含以下结构:
将 Manifest.json 模板中的以下突出显示值(带数字的值)替换为 上传自定义图像时提供的值。
注释
切勿在 Azure 资源管理器模板中硬编码任何机密,例如产品密钥、密码或任何客户身份信息。 一旦在库中发布,模板 JSON 文件便可以无需身份验证访问。 将所有机密存储在 Key Vault 中,并从模板中调用它们。
建议在发布自己的自定义模板之前,尝试按原样发布示例,确保示例在你的环境中正常工作。 验证此步骤有效后,请从库中删除该示例,并进行迭代更改,直到对结果满意为止。
以下模板是 Manifest.json 文件的示例:
{ "$schema": "https://gallery.azure.com/schemas/2015-10-01/manifest.json#", "name": "Test", (1) "publisher": "<Publisher name>", (2) "version": "<Version number>", (3) "displayName": "ms-resource:displayName", (4) "publisherDisplayName": "ms-resource:publisherDisplayName", (5) "publisherLegalName": "ms-resource:publisherDisplayName", (6) "summary": "ms-resource:summary", "longSummary": "ms-resource:longSummary", "description": "ms-resource:description", "longDescription": "ms-resource:description", "links": [ { "displayName": "ms-resource:documentationLink", "uri": "http://go.microsoft.com/fwlink/?LinkId=532898" } ], "artifacts": [ { "isDefault": true } ], "images": [{ "context": "ibiza", "items": [{ "id": "small", "path": "icons\\Small.png", (7) "type": "icon" }, { "id": "medium", "path": "icons\\Medium.png", "type": "icon" }, { "id": "large", "path": "icons\\Large.png", "type": "icon" }, { "id": "wide", "path": "icons\\Wide.png", "type": "icon" }] }] }
以下列表解释了示例模板中的上述带有编号的值:
- (1)- 优惠的名称。
- (2) - 发布者的名称,没有空格。
- (3) - 模板的版本,没有空格。
- (4) - 客户看到的名称。
- (5) - 客户看到的发布者名称。
- (6) - 发布者法定名称。
- (7) - 每个图标的路径和名称。
对于引用 ms-resource 的所有字段,必须在 strings/resources.json 文件中更改相应的值:
{ "displayName": "<OfferName.PublisherName.Version>", "publisherDisplayName": "<Publisher name>", "summary": "Create a simple VM", "longSummary": "Create a simple VM and use it", "description": "<p>This is just a sample of the type of description you could create for your gallery item!</p><p>This is a second paragraph.</p>", "documentationLink": "Documentation" }
部署模板文件结构如下所示:
将 createuidefinition.json 文件中图像的值替换为上传自定义映像时提供的值。
为确保资源可以成功部署,请使用 Azure Stack Hub API 测试该模板。
如果模板依赖于虚拟机(VM)映像,请按照说明将 VM 映像添加到 Azure Stack Hub。
将 Azure Resource Manager 模板保存在 /Contoso.TodoList/DeploymentTemplates/ 文件夹中。
为市场项选择图标和文本。 将图标添加到“图标”文件夹,并将文本添加到 Strings 文件夹中的资源文件。 对图标使用 小型、 中、 大和 宽 命名约定。 有关这些大小的详细说明,请参阅市场项 UI 参考。
注释
为了正确构建 Marketplace 项,需要提供所有四种图标大小(小、中、大、宽)。
若要进一步编辑 Manifest.json,请参阅参考:市场项 manifest.json。
修改完文件后,请将其转换为 .azpkg 文件。 可以使用 AzureGallery.exe 工具以及前面下载的示例库包来执行转换。 运行下面的命令:
.\AzureStackHubGallery.exe package -m c:\<path>\<gallery package name>\manifest.json -o c:\Temp
注释
输出路径可以是你选择的任何路径,不必在 C: 驱动器下。 但是,manifest.json 文件和输出包的完整路径必须存在。 例如,如果输出路径为
C:\<path>\galleryPackageName.azpkg
,则文件夹C:\<path>
必须存在。
发布市场产品
使用 PowerShell 或 Azure 存储资源管理器将市场项 (.azpkg) 上传到 Azure Blob 存储。 可以上传到本地 Azure Stack Hub 存储或上传到 Azure 存储,即包的临时位置。 请确保 blob 可公开访问。
若要将图库包导入 Azure Stack Hub,第一步是通过 RDP 远程连接到客户端 VM,以便将刚在 VM 上创建的文件复制到 Azure Stack Hub。
添加上下文:
$ArmEndpoint = "https://adminmanagement.local.azurestack.external" Add-AzEnvironment -Name "AzureStackAdmin" -ArmEndpoint $ArmEndpoint Connect-AzAccount -EnvironmentName "AzureStackAdmin"
运行以下脚本,将资源导入库中:
Add-AzsGalleryItem -GalleryItemUri ` https://sample.blob.core.windows.net/<temporary blob name>/<offerName.publisherName.version>.azpkg -Verbose
如果在运行 Add-AzsGalleryItem 时遇到错误,则可能安装了两个
gallery.admin
版本的模块。 删除模块的所有版本,并安装最新版本。 有关卸载 PowerShell 模块的步骤,请参阅 卸载 Azure Stack Hub PowerShell 模块的现有版本。确认是否可以提供一个有效的存储帐户来存储项。 可以从 Azure Stack Hub 管理员门户获取
GalleryItemURI
值。 选择“存储帐户”->“Blob 属性”->“URL”,扩展名为 .azpkg。 存储帐户仅供暂时使用,以便能够发布到市场。完成库包并使用 Add-AzsGalleryItem 将其上传之后,自定义 VM 现在应会显示在市场中以及“创建资源”视图中。 请注意,自定义画廊包在 市场管理中不可见。
成功将项发布到市场后,可以删除存储帐户中的内容。
现在,无需身份验证,即可通过以下 URL 访问所有默认的库项目和自定义库项目:
https://galleryartifacts.adminhosting.[Region].[externalFQDN]/artifact/20161101/[TemplateName]/DeploymentTemplates/Template.json
https://galleryartifacts.hosting.[Region].[externalFQDN]/artifact/20161101/[TemplateName]/DeploymentTemplates/Template.json
可以使用 Remove-AzGalleryItem cmdlet 删除市场项。 例如:
Remove-AzsGalleryItem -Name <Gallery package name> -Verbose
注释
删除项后,市场 UI 可能会显示错误。 若要修复此错误,请单击门户中的 “设置 ”。 然后,在门户自定义下选择“放弃修改”。
参考:市场项 manifest.json
标识信息
名称 | 必选 | 类型 | 约束 | DESCRIPTION |
---|---|---|---|---|
名称 | X | 字符串 | [A-Za-z0-9]+ | |
发布者 | X | 字符串 | [A-Za-z0-9]+ | |
版本 | X | 字符串 | SemVer v2 |
元数据
名称 | 必选 | 类型 | 约束 | DESCRIPTION |
---|---|---|---|---|
DisplayName | X | 字符串 | 建议使用 80 个字符 | 如果项名称超过 80 个字符,门户可能无法正确显示项目名称。 |
PublisherDisplayName | X | 字符串 | 建议不要超过 30 个字符 | 如果发布者名称超过 30 个字符,门户可能无法正确显示发布者名称。 |
出版商法定名称 | X | 字符串 | 最多 256 个字符 | |
概要 | X | 字符串 | 60 到 100 个字符 | |
LongSummary | X | 字符串 | 140 到 256 个字符 | 尚不适用于 Azure Stack Hub。 |
DESCRIPTION | X | HTML | 500 到 5,000 个字符 |
映像
市场使用以下图标:
名称 | 宽度 | 高度 | 注释 |
---|---|---|---|
Wide | 255 像素 | 115 像素 | 始终必需 |
大型 | 115 像素 | 115 像素 | 始终必需 |
中等 | 90 像素 | 90 像素 | 始终必需 |
小型 | 40 px | 40 px | 始终必需 |
屏幕截图 | 533 像素 | 324 像素 | 可选 |
类别
应为每个市场项标记一个类别,用于标识项在门户 UI 上显示的位置。 可以选择 Azure Stack Hub 中的一个现有类别(计算、 数据 + 存储等),或选择一个新类别。
链接
每个市场项可以包含指向其他内容的各种链接。 链接指定为名称和 URI 的列表:
名称 | 必选 | 类型 | 约束 | DESCRIPTION |
---|---|---|---|---|
DisplayName | X | 字符串 | 最多 64 个字符。 | |
Uri | X | URI |
其他属性
除了上述元数据之外,市场作者还可以采用以下形式提供自定义键/值对数据:
名称 | 必选 | 类型 | 约束 | DESCRIPTION |
---|---|---|---|---|
DisplayName | X | 字符串 | 最多 25 个字符。 | |
价值 | X | 字符串 | 最多 30 个字符。 |
HTML 清理
对于允许 HTML 的任何字段, 允许以下元素和属性:
h1, h2, h3, h4, h5, p, ol, ul, li, a[target|href], br, strong, em, b, i
参考:市场项 UI
Azure Stack Hub 门户中所示的市场项的图标和文本如下所示。
创建刀片
创建 Blade - Azure Stack Hub 市场商品