Storage

For stateful applications with persistent storage, you can use:

  • EBS volumes
  • EC2 instance storage

Using EBS Volumes

Initialize a new Senza definition YAML, e.g. for the “hello-world” app:

$ senza init hello-world.yaml

Create an EBS volume with a unique “Name” tag, e.g. “my-volume”:

$ aws ec2 create-volume --availability-zone eu-west-1a --size 2 # GiB
{
    "Size": 2,
    "Encrypted": false,
    "SnapshotId": "",
    "CreateTime": "2015-06-26T11:30:30.200Z",
    "AvailabilityZone": "eu-west-1a",
    "VolumeId": "vol-12345678",
    "VolumeType": "standard",
    "State": "creating"
}
$ aws ec2 create-tags --resources vol-12345678 --tags Key=Name,Value=my-volume

Add the needed IAM policy to allow attaching the EBS volume:

PERMISSIONS_POLICY=/tmp/policy
cat << EOF > "$PERMISSIONS_POLICY"
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "ec2:DescribeVolumes",
            "ec2:AttachVolume",
            "ec2:DetachVolume"
        ],
        "Resource": "*"
    }
}
EOF

aws iam put-role-policy --role-name "app-hello-world" \
    --policy-name "AllowUsingEBS" --policy-document "file://$PERMISSIONS_POLICY"

A fresh volume needs to be formatted before using it ( ebs-using-volumes ). Otherwise you may run into issues like You must specify the file type .

Change the Senza definition (“hello-world.yaml”) to mount the EBS volume:

  • Add “AvailabilityZones: [eu-west-1a]” below “Type: Senza::StupsAutoConfiguration”
  • Add “volumes” and “mounts” below the “TaupageConfig” section

The resulting Senza definition YAML might look like:

SenzaComponents:
  - Configuration:
      Type: Senza::StupsAutoConfiguration
      AvailabilityZones: [eu-west-1a] # use EBS volume's AZ

  - AppServer:
      Type: Senza::TaupageAutoScalingGroup
      # ...
      TaupageConfig:
        runtime: Docker
        source: "..."
        # ...
        volumes:
          ebs:
            /dev/sdf: my-volume
        mounts:
          /data:
            partition: /dev/xvdf

Note

You either need to format the EBS volume manually the first time or use the “erase_on_boot” Taupage option.