snow app run¶
Creates an application package in your Snowflake account, uploads code files to its stage, then creates or upgrades an application object from the application package.
Syntax¶
snow app run
--version <version>
--patch <patch>
--from-release-directive
--interactive / --no-interactive
--force
--validate / --no-validate
--package-entity-id <package_entity_id>
--app-entity-id <app_entity_id>
--project <project_definition>
--env <env_overrides>
--connection <connection>
--host <host>
--port <port>
--account <account>
--user <user>
--password <password>
--authenticator <authenticator>
--private-key-file <private_key_file>
--token-file-path <token_file_path>
--database <database>
--schema <schema>
--role <role>
--warehouse <warehouse>
--temporary-connection
--mfa-passcode <mfa_passcode>
--enable-diag
--diag-log-path <diag_log_path>
--diag-allowlist-path <diag_allowlist_path>
--format <format>
--verbose
--debug
--silent
Arguments¶
None
Options¶
--version TEXT
The version defined in an existing application package from which you want to create an application object. The application object and application package names are determined from the project definition file.
--patch INTEGER
The patch number under the given
--version
defined in an existing application package that should be used to create an application object. The application object and application package names are determined from the project definition file.--from-release-directive
Creates or upgrades an application object to the version and patch specified by the release directive applicable to your Snowflake account. The command fails if no release directive exists for your Snowflake account for a given application package, which is determined from the project definition file. Default: unset. Default: False.
--interactive / --no-interactive
When enabled, this option displays prompts even if the standard input and output are not terminal devices. Defaults to True in an interactive shell environment, and False otherwise.
--force
When enabled, this option causes the command to implicitly approve any prompts that arise. You should enable this option if interactive mode is not specified and if you want perform potentially destructive actions. Defaults to unset. Default: False.
--validate / --no-validate
When enabled, this option triggers validation of a deployed Snowflake Native App’s setup script SQL. Default: True.
--package-entity-id TEXT
The ID of the package entity on which to operate when definition_version is 2 or higher.
--app-entity-id TEXT
The ID of the application entity on which to operate when definition_version is 2 or higher.
-p, --project TEXT
Path where Snowflake project resides. Defaults to current working directory.
--env TEXT
String in format of key=value. Overrides variables from env section used for templates. Default: [].
--connection, -c, --environment TEXT
Name of the connection, as defined in your
config.toml
file. Default:default
.--host TEXT
Host address for the connection. Overrides the value specified for the connection.
--port INTEGER
Port for the connection. Overrides the value specified for the connection.
--account, --accountname TEXT
Name assigned to your Snowflake account. Overrides the value specified for the connection.
--user, --username TEXT
Username to connect to Snowflake. Overrides the value specified for the connection.
--password TEXT
Snowflake password. Overrides the value specified for the connection.
--authenticator TEXT
Snowflake authenticator. Overrides the value specified for the connection.
--private-key-file, --private-key-path TEXT
Snowflake private key file path. Overrides the value specified for the connection.
--token-file-path TEXT
Path to file with an OAuth token that should be used when connecting to Snowflake.
--database, --dbname TEXT
Database to use. Overrides the value specified for the connection.
--schema, --schemaname TEXT
Database schema to use. Overrides the value specified for the connection.
--role, --rolename TEXT
Role to use. Overrides the value specified for the connection.
--warehouse TEXT
Warehouse to use. Overrides the value specified for the connection.
--temporary-connection, -x
Uses connection defined with command line parameters, instead of one defined in config. Default: False.
--mfa-passcode TEXT
Token to use for multi-factor authentication (MFA).
--enable-diag
Run Python connector diagnostic test. Default: False.
--diag-log-path TEXT
Diagnostic report path. Default: <temporary_directory>.
--diag-allowlist-path TEXT
Diagnostic report path to optional allowlist.
--format [TABLE|JSON]
Specifies the output format. Default: TABLE.
--verbose, -v
Displays log entries for log levels
info
and higher. Default: False.--debug
Displays log entries for log levels
debug
and higher; debug logs contain additional information. Default: False.--silent
Turns off intermediate output to console. Default: False.
--help
Displays the help text for this command.
Usage notes¶
Note
This command does not accept a role or warehouse overrides to your config.toml
file. Please add them to the native app definition in the snowflake.yml
or snowflake.local.yml
instead.
This command relies on the resolved project definition to determine the stage to which to upload files, which files to upload, and the name of the objects to create. For guidance on defaults, please refer to About Snowflake Native App projects and snow init usage notes. You can also change them to be according to your own preference, though it is your responsibility to check if there is any clash with existing objects in your account.
Objects created by Snowflake CLI are tagged with a special comment
GENERATED_BY_SNOWCLI
.The role(s) used to create the application package and instance must have the proper account-level privileges to work with Snowflake Native Applications. See Create an application package and Install and test an app locally for more information.
By default, the snow app run
command creates an application package in your Snowflake account, uploads code files to its stage, validates the setup script SQL, and then creates (or upgrades) a development-mode instance of that application. You should keep the following in mind when running the default command:
All files specified under
nativeapp.project.artifacts
in the project definition file(s) are uploaded to the Snowflake stage. This artifact must include amanifest.yml
file and its related setup script(s).All files specified under
nativeapp.project.artifacts
must have already been compiled and packaged separately, if needed, before callingsnow app run
. Snowflake CLI does not offer any feature to perform these intermediate tasks for you, so you have full control over your build process by executing it in your own scripts.Snowflake CLI uses default application package name, stage name, and application name when creating those objects.
Subsequent runs of
snow app run
after the initial one compare the state of your uploaded files to the files in your local directory, and selectively upload only the modified files to save you time. If any files have changed, the application is upgraded based on the new contents of the stage.If the application package already exists and its distribution property is
INTERNAL
, the command checks if the package was created by the Snowflake CLI. If it was not, the command throws an error. If the distribution of the application package isEXTERNAL
, no such check is performed.The command warns you if the application package you are working with has a different value for distribution than is set in your resolved project definition, but continues execution.
The application instance is created or upgraded in development mode. Specifically, it uses the staged files.
If you specify a --version
, --patch
or --from-release-directive
option, this command upgrades your existing application instance, or creates one if the application does not exist. It does not create an application package in this scenario.
If Snowflake CLI is not able to update your application for any reason, such as trying to upgrade an application initially installed in loose files mode to use release directives instead, it attempts to drop the existing application and create a new one using the desired installation strategy. The command prompts you to confirm the drop before performing the action.
If you do not want to interact with the command and instead force all actions, use the
--force
option to bypass all prompts, which proxies as a yes to all the inputs asking whether to proceed with destructive actions.Snowflake CLI tries to determine if you are running the commands in an interactive shell. If
--force
is not provided and you are executing commands in the interactive shell, it automatically chooses the interactive option for you.If you want to force Snowflake CLI to interact with you even if not in an interactive shell, use the
--interactive
option.
Examples¶
These examples assume you have made the necessary changes to your code files and added them to your snowflake.yml
or snowflake.local.yml
files.
If you want to create an application package and an application using staged files, you can execute:
cd my_app_project my_app_project_build_script.sh snow app run --connection="dev"
If you already have an application package with a version and a patch, want to create an application from this version and patch, and invoke the interactive mode, you can execute:
snow app run --version V1 --patch 12 --interactive --connection="dev"
Here, version
V1
and patch12
are used as an example only.If you have an existing release directive set on an application package, want to create an application from it and bypass the interactive mode, you can execute:
snow app run --from-release-directive --force --connection="dev"
This example shows how to pass in multiple environment variables using the
--env
option:snow app run --env source_folder="src/app" --env stage_name=mystage