Service Plans
The a9s Service Broker can provide different services and service plans. Which services and service plans are provided can be configured in the specific service config for each service e.g. the config/postgresql.yml.example.
Service Plan Configuration
The configuration for each service plan looks the same. That's why we will have a exemplary look at the configuration of the postgresql-single-small plan of a9s PostgreSQL 13:
plans:
postgresql-single-small:
guid: a6747d74-580f-4520-98c5-5ffe3dc20b5a
description: 'a small single instance'
free: true
ssl: false
template_name: postgresql13-single
template_name_v2: postgresql13-single
default_placeholder_values:
vm_type: a9svs-postgresql-single-small
persistent_disk_type: a9svs-postgresql-single-small
migration_paths:
- postgresql-single-medium
- postgresql-single-big
- postgresql-replica-small
- postgresql-replica-medium
- postgresql-replica-big
Each service plan has the following properties:
name
: The name of the service plan. Has to be unique within the service but can be used in other services as service plan name too. In this examplepostgresql-single-small
.guid
: The distinct identifier of the service plan. Has to be unique across all services and service plans.description
: The description of the service plan.free
: If the plan can be used for free or not.ssl
: If the service instance is using SSL or not. Valid values:true
/false
. Default value:false
.- [Deprecated]
template_name
: The name of the template that should be used when a service instance of this service plan is created. template_name_v2
: The name of the template that should be used when a service instance of this service plan is created.
In the following we will have a more detailed look at the properties default_placeholder_values
and migration_paths
.
Default Placeholder Values
The property default_placeholder_values
is a list of values that will be replaced in the template that is used for the given service plan.
The templates itself are YAML files that contain ERB tags with variables that can be replaced.
This is an example extract of the postgresql13-single
template:
jobs:
- name: pg
vm_type: <%= vm_type %>
instances: 1
azs: [z3,z2,z1]
stemcell: ((stemcell_alias))
persistent_disk_type: <%= persistent_disk_type %>
networks:
- <%= network_type || "((service_network))" %>
Currently the a9s Service Broker supports the following placeholder values:
vm_type
: The VM type that should be used for the service instance. Has to match one of the VM types that are defined in thecloud-config
of your setup.persistent_disk_type
: The persistent disk type that should be used for the service instance. Has to match one of the disk types that are defined in thecloud-config
of your setup.network_type
: The network that should be used in the service instance. Has to match one of the networks that are defined in thecloud-config
of your setup.
Custom Parameter Configuration
Some SPIs allow the platform operator to give default values to custom parameters in the SPI configuration. If the platform operator doesn't configure the SPI configuration, the anynines defaults get used as described in the individual SPI configuration pages:
- a9s PostgreSQL SPI Configuration
- a9s LogMe SPI Configuration
- a9s MongoDB SPI Configuration
- a9s Redis SPI Configuration
You can configure those properties per plan under the property
custom_param_config
. The same configuration structure applies.
For example, the following configuration for the plan postgresql-single-nano
would set the max_connections
custom parameter default value to 100
and would not allow the application developer to modify this value:
...
plans:
postgresql-single-nano:
custom_param_config:
max_connections:
default_value: 100
modifiable: false
...
IMPORTANT: When the platform operator configures the SPI's and a plan's custom parameter configuration, the plan's custom parameter configuration will completely replace the SPI's custom parameter configuration for that specific plan.
Let's take the following example for a SPI and plan configuration:
postgresql-spi:
service_instance:
custom_param_config:
max_connections:
default_value: 200
modifiable: true
metric_pg_database_size:
default_value: 600
modifiable: false
...
plans:
postgresql-single-nano:
custom_param_config:
max_connections:
default_value: 100
modifiable: false
...
In this case, an instance of plan postgresql-single-nano
would be configured
to set the max_connections
default value to 100
and be not modifiable for the
application developer. The custom parameter metric_pg_database_size
would not
be set to the values configured in the SPI configuration, but the SPI default
values for that custom parameter.
Migration Paths
The migration_paths
property defines to which service plans the given
service plan can be migrated. In the example above the
postgresql-single-small
plan can be migrated to the plans:
postgresql-single-medium
postgresql-single-big
postgresql-replica-small
postgresql-replica-medium
postgresql-replica-big
Migration Limitations
The following limitations apply to all of the a9s Data Services:
You can only migrate to service plans of the same service. For example it is not possible to migrate a PostgreSQL 11 single-small service instance to a PostgreSQL 13 single-medium service instance.
The a9s Data Services do not support the migration to service plans with a smaller VM type, a smaller persistent disk type, or from clustered instances to single instances.
Currently, the a9s Data Services do not support plan upgrades from Non-SSL/TLS to SSL/TLS instances. We recommend that you create a new instance with SSL/TLS enabled and migrate your data to the new instance.
Redis 6 and Newer
a9s Redis 6 and newer do not support:
- migration from single to cluster plans
- non-SSL to SSL plans
Network Per Plan
In order to configure a different network per service plan, it is necessary to
modify the service configuration and add network_type
property under the
default_placeholder_values
property in each desired plan.
Example
In the following configuration snippet, the plan postgresql-single-nano
has
been configured to use the netwokk <your_desired_network>
:
---
postgresql_service:
services:
a9s-postgresql13:
(...)
plans:
postgresql-single-nano:
default_placeholder_values:
network_type: "<your_desired_network>"
vm_type: a9svs-postgresql-single-nano
(...)
postgresql-single-small:
default_placeholder_values:
vm_type: a9svs-postgresql-single-small
(...)
On the other hand, the plan postgresql-single-small
in the above example will
be deployed to the default network, given by the template variable
service_network
in the a9s Template Uploader errand configuration, since
the property network_type
has not been set.
Available Templates
The templates that can be used for the different service plans are provided by
the template-uploader-errand
. There are templates for each a9s Data
Service.
Important: Service plans using templates that include no-logging
in the
template name, do not provide logs and metrics streaming.
a9s Elasticsearch
template name | description |
---|---|
elasticsearch2-cluster-ssl | A clustered Elasticsearch 2 instance with ssl enabled |
elasticsearch2-cluster | A clustered Elasticsearch 2 instance |
elasticsearch2-single-no-logging-ssl | A single Elasticsearch 2 instance without Logstash with ssl enabled |
elasticsearch2-single-no-logging | A single Elasticsearch 2 instance without Logstash |
elasticsearch2-single-ssl | A single Elasticsearch 2 instance with ssl enabled |
elasticsearch2-single | A single Elasticsearch 2 instance |
elasticsearch5-cluster-ssl | A clustered Elasticsearch 2 instance with ssl enabled |
elasticsearch5-cluster | A clustered Elasticsearch 2 instance with ssl enabled |
elasticsearch5-single-no-logging-ssl | A single Elasticsearch 5 instance without Logstash with ssl enabled |
elasticsearch5-single-no-logging | A single Elasticsearch 5 instance without Logstash |
elasticsearch5-single-ssl | A single Elasticsearch 5 instance with ssl enabled |
elasticsearch5-single | A single Elasticsearch 5 instance |
elasticsearch6-cluster-ssl | A clustered Elasticsearch 6 instance with ssl enabled |
elasticsearch6-cluster | A clustered Elasticsearch 6 instance |
elasticsearch6-single-no-logging-ssl | A single Elasticsearch 6 instance without Logstash with ssl enabled |
elasticsearch6-single-no-logging | A single Elasticsearch 6 instance without Logstash |
elasticsearch6-single-ssl | A single Elasticsearch 6 instance with ssl enabled |
elasticsearch6-single | A single Elasticsearch 6 instance with ssl enabled |
elasticsearch7-cluster-ssl | A clustered Elasticsearch 7 instance with ssl enabled |
elasticsearch7-cluster | A clustered Elasticsearch 7 instance |
elasticsearch7-single-no-logging-ssl | A single Elasticsearch 7 instance without Logstash with ssl enabled |
elasticsearch7-single-no-logging | A single Elasticsearch 7 instance without Logstash |
elasticsearch7-single-ssl | A single Elasticsearch 7 instance with ssl enabled |
elasticsearch7-single | A single Elasticsearch 7 instance with ssl enabled |
a9s MongoDB
template name | description |
---|---|
mongodb32-replica | A MongoDB 3.2 replica set |
mongodb32-single-no-logging | A MongoDB 3.2 single instance without Logstash |
mongodb32-single | A MongoDB 3.2 single instance |
mongodb34-replica-ssl | A MongoDB 3.4 replica set with ssl enabled |
mongodb34-replica | A MongoDB 3.4 replica set |
mongodb34-single-no-logging-ssl | A MongoDB 3.4 single instance without Logstash with ssl |
mongodb34-single-no-logging | A MongoDB 3.4 single instance without Logstash |
mongodb34-single-ssl | A MongoDB 3.4 single instance with ssl enabled |
mongodb34-single | A MongoDB 3.4 single instance |
mongodb36-replica-ssl | A MongoDB 3.6 replica set with ssl enabled |
mongodb36-replica | A MongoDB 3.6 replica set |
mongodb36-single-no-logging-ssl | A MongoDB 3.6 single instance without Logstash with ssl |
mongodb36-single-no-logging | A MongoDB 3.6 single instance without Logstash |
mongodb36-single-ssl | A MongoDB 3.6 single instance with ssl enabled |
mongodb36-single | A MongoDB 3.6 single instance |
mongodb40-replica-ssl | A MongoDB 4.0 replica set with ssl enabled |
mongodb40-replica | A MongoDB 4.0 replica set |
mongodb40-single-no-logging-ssl | A MongoDB 4.0 single instance without Logstash with ssl |
mongodb40-single-no-logging | A MongoDB 4.0 single instance without Logstash |
mongodb40-single-ssl | A MongoDB 4.0 single instance with ssl enabled |
mongodb40-single | A MongoDB 4.0 single instance |
a9s MariaDB
template name | description |
---|---|
mysql101-cluster | A MariaDB Galera cluster |
mysql101-single-no-logging | A MariaDB single instance without Logstash |
mysql101-single | A MariaDB single instance |
mysql104-cluster | A MariaDB Galera cluster |
mysql104-cluster-ssl | A MariaDB Galera cluster with ssl enabled |
mysql104-single-no-logging | A MariaDB single instance without Logstash |
mysql104-single-no-logging-ssl | A MariaDB single instance without Logstash with ssl enabled |
mysql104-single | A MariaDB single instance |
mysql104-single-ssl | A MariaDB single instance with ssl enabled |
mariadb106-cluster | A MariaDB Galera cluster |
mariadb106-cluster-ssl | A MariaDB Galera cluster with ssl enabled |
mariadb106-single-no-logging | A MariaDB single instance without Logstash |
mariadb106-single-no-logging-ssl | A MariaDB single instance without Logstash with ssl enabled |
mariadb106-single | A MariaDB single instance |
mariadb106-single-ssl | A MariaDB single instance with ssl enabled |
a9s PostgreSQL
template name | description |
---|---|
postgresql13-replica-ssl | A clustered PostgreSQL 13 instance with ssl enabled |
postgresql13-replica | A clustered PostgreSQL 13 instance |
postgresql13-single-no-logging-ssl | A single PostgreSQL 13 instance without Logstash with ssl enabled |
postgresql13-single-no-logging | A single PostgreSQL 13 instance without Logstash |
postgresql13-single-ssl | A single PostgreSQL 13 instance with ssl enabled |
postgresql13-single | A single PostgreSQL 13 instance |
postgresql11-replica-ssl | A clustered PostgreSQL 11 instance with ssl enabled |
postgresql11-replica | A clustered PostgreSQL 11 instance |
postgresql11-single-no-logging-ssl | A single PostgreSQL 11 instance without Logstash with ssl enabled |
postgresql11-single-no-logging | A single PostgreSQL 11 instance without Logstash |
postgresql11-single-ssl | A single PostgreSQL 11 instance with ssl enabled |
postgresql11-single | A single PostgreSQL 11 instance |
postgresql10-replica-ssl | A clustered PostgreSQL 10 instance with ssl enabled |
postgresql10-replica | A clustered PostgreSQL 10 instance |
postgresql10-single-no-logging-ssl | A single PostgreSQL 10 instance without Logstash with ssl enabled |
postgresql10-single-no-logging | A single PostgreSQL 10 instance without Logstash |
postgresql10-single-ssl | A single PostgreSQL 10 instance with ssl enabled |
postgresql10-single | A single PostgreSQL 10 instance |
postgresql94-replica-ssl | A clustered PostgreSQL 9.4 instance with ssl enabled |
postgresql94-replica | A clustered PostgreSQL 9.4 instance |
postgresql94-single-no-logging-ssl | A single PostgreSQL 9.4 instance without Logstash with ssl enabled |
postgresql94-single-no-logging | A single PostgreSQL 9.4 instance without Logstash |
postgresql94-single-ssl | A single PostgreSQL 9.4 instance with ssl enabled |
postgresql94-single | A single PostgreSQL 9.4 instance |
a9s Messaging
template name | description |
---|---|
rabbitmq36-replica-ssl | A single RabbitMQ 3.6 instance with ssl |
rabbitmq36-replica | A single RabbitMQ 3.6 instance |
rabbitmq36-single-no-logging-ssl | A single RabbitMQ 3.7 instance without Logstash with ssl enabled |
rabbitmq36-single-no-logging | A single RabbitMQ 3.6 instance without Logstash |
rabbitmq36-single-ssl | A single RabbitMQ 3.6 instance with ssl enabled |
rabbitmq36-single | A single RabbitMQ 3.6 instance |
rabbitmq37-replica-ssl | A clustered RabbitMQ 3.7 instance with ssl enabled |
rabbitmq37-replica | A clustered RabbitMQ 3.7 instance |
rabbitmq37-single-no-logging-ssl | A single RabbitMQ 3.7 instance without Logstash with ssl enabled |
rabbitmq37-single-no-logging | A single RabbitMQ 3.7 instance without Logstash |
rabbitmq37-single-ssl | A single RabbitMQ 3.7 instance with ssl enabled |
rabbitmq37-single | A single RabbitMQ 3.7 instance |
messaging38-replica-ssl | A clustered Messaging 3.8 instance with ssl enabled |
messaging38-replica | A clustered Messaging 3.8 instance |
messaging38-single-no-logging-ssl | A single Messaging 3.8 instance without Logstash with ssl enabled |
messaging38-single-no-logging | A single Messaging 3.8 instance without Logstash |
messaging38-single-ssl | A single Messaging 3.8 instance with ssl enabled |
messaging38-single | A single Messaging 3.8 instance |
a9s Redis
template name | description |
---|---|
redis-cluster | A clustered Redis 3.2 instance |
redis-single-no-logging | A single Redis 3.2 instance without Logstash |
redis-single | A single Redis 3.2 instance |
redis40-cluster | A clustered Redis 4.0 instance |
redis40-single-no-logging | A single Redis 4.0 instance without Logstash |
redis40-single | A single Redis 4.0 instance |
redis50-cluster | A clustered Redis 5.0 instance |
redis50-single-no-logging | A single Redis 5.0 instance without Logstash |
redis50-single | A single Redis 5.0 instance |
redis6-cluster | A clustered Redis 6 instance |
redis6-single-no-logging | A single Redis 6 instance without Logstash |
redis6-single | A single Redis 6 instance |
redis6-cluster-ssl | A clustered Redis 6 instance with ssl enabled |
redis6-single-no-logging-ssl | A single Redis 6 instance without Logstash with ssl enabled |
redis6-single-ssl | A single Redis 6 instance with ssl enabled |
a9s LogMe
template name | description |
---|---|
logme-cluster | A clustered LogMe instance with 3 Elasticsearch nodes |
logme-platform-logging | A clustered LogMe instance with 5 Elasticsearch nodes |
logme-single | A single LogMe instance |
a9s Prometheus
template name | description |
---|---|
prometheus-plattform | A single Prometheus instance for platform logging that can only deployed once |
prometheus-single | A single Prometheus instance |
promgraf-single | A single Prometheus instance containing Grafana v8 |
Add New Service Plans
If you want to provide another service plan that is not offered by default, you can add your new service plan to the service config. Currently, it is only possible to add plans that differ in the VM type and the persistent disk type.
For the new service plan you have to define the same properties like for the default service plans:
guid
description
free
template_name_v2
default_placeholder_values
migration_paths
A new plan with a bigger VM and persistent disk could look the following way:
postgresql-single-ultra:
guid: 8abb159a-b79e-41ee-a374-0a7dccf6723a
description: 'a ultra single instance'
free: true
template_name_v2: postgresql10-single
default_placeholder_values:
vm_type: a9svs-postgresql-single-ultra
persistent_disk_type: a9svs-postgresql-single-ultra
migration_paths: []
NOTE: You have to use one of the existing templates for the new service plan.
NOTE2: If you want to use other VM types or disk types you have to add them
also to your cloud-config
.
IMPORTANT: The a9s Data Services do not support the migration to
service plans with smaller VM type or smaller persistent disk type or from
clustered instances to single instances. So you have to be careful when you
define the migration_paths
for a new service plan.
Deleting service plans
It is also possible to delete service plans for a given service. These service plans won't be provided by the a9s Service Broker. To do this you have to remove the configuration for the service plan you want to delete from the specific service config. Then you have to redeploy the service with the new service config.
NOTE: Currently, it is not possible to delete a service plan, which has an existing service instance. Only unused service plans can be deleted.
Customizing the Documentation and Support URLs
If you want to customize the Documentation and/or Support URLs of a service,
you can do so by replacing the values of supportUrl
and documentationUrl
with
your own. These are located in the metadata
property, on the service config, as
shown below:
metadata:
displayName: "a9s PostgreSQL 13"
supportUrl: https://dssupport.anynines.com
documentationUrl: https://docs.anynines.com
shareable: true