Backend Configuration
The backend configuration defines the place where Kusion stores its state data file. By default, Kusion uses the local type of backend to store the state on the local disk, while for team collaboration projects, the state can be stored on a remote type of backend, such as database, oss and s3 to allow multiple users access it.
Configuring State Backend
Kusion configures the storage of state through command line parameters or the backend field in the project.yaml file.
Command Line Parameters
Users can specify the type of backend with the option --backend-type, and configure the detailed information with --backend-config or -C, for instance:
kusion apply --backend-type local --backend-config path=kusion_state.json
kusion destroy --backend-type local --backend-config path=kusion_state.json
Configuration File
Users can configure the storage of the state with the backend field in the project.yaml file:
# project.yaml
backend:
storageType: local
config:
path: kusion_state.json
In this case, storageType is used to declare the type of storage for the state backend, and config is used to declare the required parameters for the corresponding storage type.
Configuration Combination
When both of the config field in the project.yaml and the --backend-config option in the command line are configured, Kusion will merge the entire configuration, combining both the project.yaml file and the command line options. When there comes a conflict between the options in the project.yaml file and the command line, the options in the command line will take precedence. This way, users can pass the sensitive information like accessKeyID and accessKeySecret to Kusion through command line parameters.
Available Backend
- local
- oss
- s3
- db
Default Backend
When neither the project.yaml file nor the command line parameters declare the backend configuration, Kusion by default uses the local.
local
The local storage type stores the state on the local file system, which is suitable for local operations while not ideal for multi-user collaboration.
Here is an example:
# project.yaml
backend:
storageType: local
config:
path: kusion_state.json
- storageType - local, using local file system to store the state
- path -
optionalspecify the local file path to store the state
oss
The oss storage type stores the state on the Alicloud Object Storage Service (OSS).
Here is an example:
# project.yaml
backend:
storageType: oss
config:
endpoint: oss-cn-beijing.aliyuncs.com
bucket: kusion-oss
kusion apply -C accessKeyID=******* -C accessKeySecret=*******
kusion destroy -C accessKeyID=******* -C accessKeySecret=*******
- storageType - oss, using alicloud oss as the storage backend for state
- endpoint -
requiredspecify the access endpoint for alicloud oss bucket - bucket -
requiredspecify the name of the alicloud oss bucket - accessKeyID -
requiredspecify the alicloud account accessKeyID - accessKeySecret -
requiredspecify the alicloud account accessKeySecret
s3
The s3 storage type stores the state on the AWS Simple Storage Service (S3).
Here is an example:
# project.yaml
backend:
storageType: s3
config:
endpoint: s3.us-east-1.amazonaws.com
bucket: kusion-s3
region: us-east-1
kusion apply -C accessKeyID=******* -C accessKeySecret=*******
kusion destroy -C accessKeyID=******* -C accessKeySecret=*******
- storageType - s3, using aws s3 as the storage backend for state
- endpoint -
requiredspecify the access endpoint for aws s3 bucket - bucket -
requiredspecify the name of the aws s3 bucket - accessKeyID -
requiredspecify the aws account accessKeyID - accessKeySecret -
requiredspecify the aws account accessKeySecret
db
The db storage type stores the state into a database.
Here is an example:
# project.yaml
backend:
storageType: db
config:
dbHost: 127.0.0.1
dbName: kusion-db
dbPort: 3306
kusion apply -C dbUser=******* -C dbPassword=*******
- storageType - db, using database as the storage backend for state
- dbHost -
requiredthe access address for the database - dbName -
requiredthe name of the database - dbPort -
requiredthe port of the database - dbUser -
requiredthe user name of the database - dbPassword -
requiredthe password of the database
Note that the table name in the database used by Kusion is state. Below is an example SQL statement for creating this table:
CREATE TABLE `state` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`tenant` varchar(100) DEFAULT NULL COMMENT 'tenant',
`project` varchar(100) NOT NULL COMMENT 'project',
`kusion_version` varchar(50) DEFAULT NULL COMMENT 'kusion version',
`version` int(10) unsigned NOT NULL COMMENT 'current state format version,may upgrade in the future',
`serial` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'modification times for state,can be used in concurrent control',
`operator` varchar(100) DEFAULT NULL COMMENT 'last modifier',
`resources` longtext DEFAULT NULL COMMENT 'state of the resources,json array',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'creation time',
`modified_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'update time',
`stack` varchar(100) DEFAULT NULL COMMENT 'stack',
`cluster` varchar(100) DEFAULT NULL COMMENT 'logical isolation in a stack,usually clustername__cellname',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_state_latest` (`tenant`, `project`, `stack`, `serial`, `cluster`),
KEY `idx_tenant` (`tenant`),
KEY `idx_project` (`project`),
KEY `idx_kusion_version` (`kusion_version`),
KEY `idx_version` (`version`),
KEY `idx_create_time` (`create_time`),
KEY `idx_modified_time` (`modified_time`),
KEY `idx_stack` (`stack`),
KEY `idx_cluster` (`cluster`)
);