Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

TabMove Lite is offered as a solution that you can deploy on your own infrastructure in a number of ways. From the simplest to the most advanced, these are:

Method

Difficulty

Remarks

From a marketplace (AWS Marketplace, Salesforce AppExchange)

Easiest

This will become the recommended approach, but is not available yet.

As a container image

Moderate

This is the currently recommended approach. In the future, this will be a decent alternative in case specific requirements can’t be met with the marketplace approach.

As an executable

Advanced

On-demand only, for exceptional use-cases.

Review the information below to learn more about each deployment method.

...

Info

TabMove Lite will be made available on the AWS Marketplace in the future.

Salesforce AppExchange

Info

TabMove Lite will be made available on the Salesforce AppExchange in the future.

As a Container Image

...

  1. Download the TabMove Lite docker-compose file (docker-compose.yml). Make note of where you save this file, or place it in a dedicated folder.

  2. On your command prompt, navigate to the location where you saved the file and run the service using:
    docker compose up
    The TabMove Lite service will be made available on port 8080.

  3. Access the app:

    1. If you can connect to your Docker host directly and using http, you can use your browser to reach http://your-docker-host:8080/

    2. Alternatively, using a service like Serveo may make it more convenient to access TabMove Lite. Example command to run on your Docker host VM:
      ssh -R 80:localhost:8080 serveo.net
      Serveo will provide you with a unique URL you can access TabMove at for as long as the SSH connection is maintained.

    3. Otherwise, consider using whichever services of infrastructure you have available to make the application available through HTTPS, e.g.:

      1. A reverse proxy

      2. AWS Cloudfront (?)

On Snowflake with Snowpark Container Services

It is possible to run TabMove Lite on Snowflake’s Snowpark Container Services if you already have a Snowflake environment that is hosted on an AWS commercial region. We recommend you follow the Snowpark tutorials for the Common Setup and for Creating a Service, but we also provide the instructions below as an example.

Warning

These instructions are untested as of yet, and are here purely for future completion.

Common setup

  1. Prerequisites:

    1. A Snowflake account: Note that trial accounts are not supported.

    2. SnowSQL, the command-line client for executing SQL commands (optional): You can use any Snowflake client that supports executing SQL commands and uploading files to a Snowflake stage. The tutorials are tested using the SnowSQL and the Snowsight web interface. For instructions to install this command-line client, see Installing SnowSQL.

    3. Docker Desktop: These tutorials provide instructions for using Docker Desktop. For installation instructions, see https://docs.docker.com/get-docker/ . Note that you can use any OCI-compliant clients to create images, such as Docker, Podman, or Nerdctl.

  2. Creating the required Snowflake objects. Make sure you have ACCOUNTADMIN access to perform these actions. Replace <user_name> with the name of your Snowflake user who will run the service.

    Code Block
    languagesql
    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE tabmove_container_role;
    
    CREATE DATABASE IF NOT EXISTS tabmove_container;
    GRANT OWNERSHIP ON DATABASE tabmove_container TO ROLE tabmove_container_role COPY CURRENT GRANTS;
    
    CREATE OR REPLACE WAREHOUSE tabmove_container_warehouse WITH
      WAREHOUSE_SIZE='X-SMALL';
    GRANT USAGE ON WAREHOUSE tabmove_container_warehouse TO ROLE tabmove_container_role;
    
    GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO ROLE tabmove_container_role;
    
    CREATE COMPUTE POOL tabmove_container_compute_pool
      MIN_NODES = 1
      MAX_NODES = 1
      INSTANCE_FAMILY = CPU_X64_S;
    GRANT USAGE, MONITOR ON COMPUTE POOL tabmove_container_compute_pool TO ROLE tabmove_container_role;
    
    GRANT ROLE tabmove_container_role TO USER <user_name>;
    
    USE ROLE tabmove_container_role;
    USE DATABASE tabmove_container;
    USE WAREHOUSE tabmove_container_warehouse;
    
    CREATE SCHEMA IF NOT EXISTS tabmove_container_schema;
    CREATE IMAGE REPOSITORY IF NOT EXISTS tabmove_container_repository;
    CREATE STAGE IF NOT EXISTS tabmove_container_stage
      DIRECTORY = ( ENABLE = true );
    
    USE SCHEMA tabmove_container_schema;
  3. Verify the objects were created correctly:

    Code Block
    SHOW COMPUTE POOLS;
    SHOW WAREHOUSES;
    SHOW IMAGE REPOSITORIES;
    SHOW STAGES;

Define the container service

We can define the TabMove container service (and its postgres dependency) in a way that is very similar to a Docker compose file:

Code Block
CREATE SERVICE tabmove_service
  IN COMPUTE POOL tabmove_container_compute_pool
  FROM SPECIFICATION $$
spec:
  containers:
  - name: tabmove_lite
    ports: "8080:8501"
    image: europe-west1-docker.pkg.dev/biztory-works/tabmove/tabmove-lite:latest
    env:
      POSTGRES_HOST: "tabmove_db"
      POSTGRES_PORT: "5432"
      POSTGRES_DB: "tabmove_self_service"
      POSTGRES_USER: "tabmove_self_service"
      POSTGRES_PASSWORD: "EXwyWyafsHbRLDy2MUj8sCCKoNasdfgpN"
      POSTGRES_SSL_MODE: "disable"
      CRYPTOLENS_BIZTORY_ACCESS_TOKEN: "WyI4NzcyMTU2MCIsIk1BVk9VNTd4MTluRklFb29LMVhud3lDeWhjUm50L2w3N0tmdVB6cUQiXQ=="
      CRYPTOLENS_BIZTORY_RSA_PUBLIC_KEY: "<RSAKeyValue><Modulus>yjnQ01qKzfwGx11KImlT/a8nQyyKmxIzoPX2e+LN88GWkxz3QKR8/YQZrKWwVzn7mkFhX1QKq29SOiHMk/nE9kmdz/ibuumnqLVJYpaYaw0GRjCeYYl80keXMDzILd2lPZLq3tDtrbdKb42YZ8XlvoR/pdpNDMCBXEkUErdtMZyKV2pPIYUjxR96/Cza8xutVUMYEDTNPqJAJxZbw4S1kdS0tkWgcBRqNSmtVj/BpazpPw38CiwtyTRAmPMLdEXzBUIZkVQ1+aSiQLn++AJqd92wR+Yp1P340/JmohjokwODbnl/uQll8fIDQ3xlX3JHdrgY1QWTgOexCb9zmdgvhw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
      CRYPTOLENS_PRODUCT_CODE: "25970"
      CRYPTOLENS_MAX_OVERDRAFT: "1"
      CRYPTOLENS_FLOATINGTIME_INTERVAL_SECONDS: "600"
    links:
      - tabmove_db
    depends_on:
      - tabmove_db
  - name: tabmove_db:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data/pgdata
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata/
      POSTGRES_HOST: "tabmove_db"
      POSTGRES_PORT: "5432"
      POSTGRES_DB: "tabmove_self_service"
      POSTGRES_USER: "tabmove_self_service"
      POSTGRES_PASSWORD: "EXwyWyafsHbRLDy2MUj8sCCKoNasdfgpN"
      POSTGRES_SSL_MODE: "disable"
  endpoints:
  - name: tabmove_lite
    port: 8080
    public: true
  volumes:
  - name postgres_data:
$$
  MIN_INSTANCES=1
  MAX_INSTANCES=1
;
GRANT USAGE ON SERVICE tabmove_service TO ROLE tabmove_container_role;

Access the service

We can first list the services in our account to verify it was created correctly:

Code Block
SHOW SERVICES;

Then, what we need to access the service is its endpoint:

Code Block
SHOW ENDPOINTS IN SERVICE tabmove_service;

The ingress_url is the URL we can use to access the TabMove service.

AWS Elastic Container Service (ECS)

...