向 Snowflake Marketplace 发布应用程序的准则¶
This topic describes the criteria for publishing a Snowflake Native App to the Snowflake Marketplace.
向 Snowflake Marketplace 发布应用程序¶
When your application package is ready to be published on the Snowflake Marketplace, you must submit it to Snowflake for approval.
Note
The approval process required to publish an app on the Snowflake Marketplace is in addition to the automated security scan that is run when the DISTRIBUTION property of an application package is set to EXTERNAL.
Before creating a listing, verify that you understand the enforced requirements and ensure that your application package follows each requirement. If an application package does not follow these requirements, your submission may be rejected.
如果您收到针对所提交应用程序包的拒绝通知,请执行建议的更改,然后重新提交应用程序包以供审批。
向 Snowflake Marketplace 提交 Snowflake Native Apps 的准则¶
Snowflake 提供的平台允许提供商构建和分发应用程序并从中获利。
Snowflake 审查成确保了发布到 Snowflake Marketplace 的应用程序的质量。为确保简化审查流程,针对发布到 Snowflake Marketplace 的应用程序,Snowflake 提供了以下要求和准则。
- Immediate utility:
应用程序功能必须在使用者账户中提供,并且应用程序在安装后必须可以正常运行。
- Standalone:
应用程序必须在 Snowflake 上提供产品体验,并通过 Snowflake 功能满足外部需求。
- Data-centric:
应用程序应该基于以数据为中心的用例,此类用例应利用存储在 Snowflake 中的数据。
- Transparent and simple:
应用程序必须使用 Snowflake 功能来披露应用程序的资源和访问要求,并简化使用者的配置流程。
强制要求
Snowflake uses the following guidelines to determine if a Snowflake Native App meets the requirements for publication on the Snowflake Marketplace. These requirements are verified when you submit a listing with an attached application package to the Snowflake Marketplace.
-
立即可供使用
- 应用程序不得是宣传功能的外壳应用程序。应用程序必须提供宣传的功能。
- 应用程序必须包含使用应用程序功能的清晰框架和说明。
- 应用程序不应崩溃、冻结或存在其他功能异常。
- Apps must list all required credentials and providers must share required credentials with Snowflake at submission for testing.
- If apps are not immediately actionable, they must document the expected workflow for a consumer, allowing consumers to fully install and configure the app.
-
独立
- Apps must not be pass-through. For example, they must not redirect consumers to an external service to enable the app’s core functionality.
- 安装后,必须可直接从 Snowflake 访问应用程序界面。
- Apps cannot require consumers to create users or roles that provide access to an external service in the Snowflake consumer’s account.
- Apps cannot use the Snowflake Marketplace as a distribution platform for cross-selling external applications or services.
-
以数据为中心
- 应用程序必须通过以下方式之一来利用 Snowflake 数据:
- 共享来自应用程序提供商账户的数据。
- 使用来自 Snowflake Marketplace 的数据集。
- 访问消费者账户中的数据。
- 应用程序必须通过以下方式之一来利用 Snowflake 数据:
-
透明
-
All account-level privileges and references that the app requires must be listed in the application package manifest file.
-
All resource requirements for the Snowflake Native App must be listed in the marketplace.yml file of the app. The app must create these resources as part of installation and setup.
-
All account-level privileges and references listed in the application package manifest file must be requested from the consumer through Snowsight or the Python Permission SDK.
-
Apps must provide a readme file. Apps that do not include a Streamlit or custom user interface must include the following information in the readme file:
- 对应用程序功能的描述。
- 安装应用程序后,使用者为配置应用程序而必须执行的步骤。
- 应用程序使用的存储过程和用户定义的函数。
- 应用程序所需的权限。
- 向使用者展示如何使用应用程序的示例 SQL 命令。
-
所有必需的 SQL 命令都必须使用 Snowflake 传送并格式化为代码块。
-
如果应用程序提供示例数据,则必须包括有关如何使用示例数据的过程。
-
If an application package contains a Streamlit app but does not contain a
readmefile, you must configure a default Streamlit app.
-
Best practices when publishing a Snowflake Native App¶
In addition to the requirements for submitting an application package to the Snowflake Marketplace, Snowflake also recommends the following best practices when publishing a Snowflake Native App:
-
Ensure that all required files are uploaded to the named stage for the version of the app you are submitting, including:
- The manifest file.
- 安装脚本。
- The README file.
- 应用程序包需要的任何外部存储过程或用户定义的函数。
- 应用程序包需要的任何 Streamlit 文件。
- 任意外部源代码,包括 Python、Java 等。
-
Ensure that the version of the app you are developing passes the automated security scan.
-
Test the new version of your application package by creating the application object locally by using the CREATE APPLICATION command.
-
Do not add a new version to your application package or set the DISTRIBUTION property to EXTERNAL while you are developing and testing an app. These actions trigger the automated security scan which delays the development cycle.
Instead, create the application object using files on a named stage.
-
If your app includes a Streamlit app, test the application in Snowsight to ensure the Streamlit app works as expected.
-
Verify that interactions between the Streamlit app and Snowflake Worksheets are seamless and that the consumer does not have to navigate excessively between the two.
-
-
在提交列表以进行审批之前,请先审查列表的所有部分。
-
Ensure that there are no typos or other textual errors in the listing,
readmefile, and Streamlit app.
针对试用列表的建议
在应用程序试用列表到期时,Snowflake 会自动暂停该应用程序,以避免使用者承担额外的计算成本。Snowflake 仅会暂停应用程序所拥有的、当前处于活动状态的对象。Snowflake 不会修改已暂停对象的状态。
When a trial listing is converted to a full or paid listing, Snowflake attempts to re-enable the
app by resuming tasks, containers, and compute pools. Snowflake only resumes services and compute pools
that have the auto_resume property set to false.
针对具有容器的应用程序的建议
- Compute pools should be set to automatically suspend in combination with Snowpark Container Services jobs to avoid idle compute nodes.
- For higher availability during upgrades and to reduce cold start latency, Snowflake recommends that you
set the
MIN_NODESparameter greater than 1. - If connections across different services are required in the same app, use the DNS name of the service instead of configuring an external access integration.
针对事件共享的建议
- Providers should configure an app to emit log messages and trace events that conform to supported event definitions to ensure that consumers understand what information is collected.
- Mandatory event definitions should be limited to the log messages and trace events required by the app. Excessive or unnecessary mandatory event definitions should be avoided.
- Adding new mandatory event definitions in a version upgrade must require the consumer re-enable event definitions for the app.
- Use the Python Permission SDK to allow consumers to share optional events.