Create an addon¶
This tutorial guides you through the creation of a simple addon. The addon that we create in this tutorial is an example for enabling SSH access on a container.
Write the addon metadata¶
In a new ssh-addon
directory, create a manifest.yaml
file with the following content:
name: ssh
description: |
Enable SSH access when starting a container
Add a hook¶
Next to your manifest.yaml
file in the ssh-addon
directory, create a hooks
directory. This is where we’ll put the hooks we want to implement.
Hooks can be implemented in any language, but we are using a bash script here.
In the hooks
directory, create a pre-start
file with the following content:
#!/bin/bash
if [ "$INSTANCE_TYPE" = "regular" ]; then
exit 0
fi
mkdir -p ~/.ssh
cat "$ADDON_DIR"/ssh-addon-key.pub >> ~/.ssh/authorized_keys
Make the file executable. To do so, enter the following command (in the ssh-addon
directory):
chmod +x hooks/pre-start
Tip
Supported hooks are
pre-start
,post-start
andpost-stop
.Use the
INSTANCE_TYPE
variable to distinguish between regular and base instances.
See Hooks for more information.
Create an SSH key in your addon directory and move the private key to a location outside of the addon directory (for example, your home directory):
ssh-keygen -f ssh-addon-key -t ecdsa -b 521
mv ssh-addon-key ~/
Alternatively, you can use an existing key and move the public key into the addon directory.
Create the addon¶
Your addon structure currently looks like this:
ssh-addon
├── hooks
│ └── pre-start
├── manifest.yaml
└── ssh-addon-key.pub
Create the addon with amc
by entering the following command (in the directory that contains the ssh-addon
directory):
amc addon add ssh ./ssh-addon
When your addon is created, you can view it with:
amc addon list
Use the addon in an application¶
Create an application manifest file (my-application/manifest.yaml
) and include the addon name under addons
:
name: my-application
resources:
cpus: 4
memory: 3GB
disk-size: 3GB
addons:
- ssh
Then create your application:
application_id=$(amc application create ./my-application)
amc wait "$application_id" -c status=ready
The amc wait
command returns when your application is ready to launch. You can now launch an instance of your application:
amc launch my-application --service +ssh
Note
The SSH port 22 is closed by default. In the above command, we open it by exposing its service by using --service
. See How to expose services on an instance for more information.
You can now access your container via SSH:
ssh -i ~/ssh-addon-key root@<container_ip> -p <exposed port>
Note
The exposed port can be found be running amc ls
, under the ENDPOINTS
column. Exposed ports usually start around port 10000.