Skip to main content

NPM version PyPI version Release

cdk-spot-one

One spot instance with EIP and defined duration. No interruption.

Install

Use the npm dist tag to opt in CDKv1 or CDKv2:

// for CDKv2
npm install cdk-spot-one
or
npm install cdk-spot-one@latest

// for CDKv1
npm install cdk-spot-one@cdkv1

Why

Sometimes we need an Amazon EC2 instance with static fixed IP for testing or development purpose for a duration of time(probably hours). We need to make sure during this time, no interruption will occur and we don't want to pay for on-demand rate. cdk-spot-one helps you reserve one single spot instance with pre-allocated or new Elastic IP addresses(EIP) with defined blockDuration, during which time the spot instance will be secured with no spot interruption.

Behind the scene, cdk-spot-one provisions a spot fleet with capacity of single instance for you and it associates the EIP with this instance. The spot fleet is reserved as spot block with blockDuration from one hour up to six hours to ensure the high availability for your spot instance.

Multiple spot instances are possible by simply specifying the targetCapacity construct property, but we only associate the EIP with the first spot instance at this moment.

Enjoy your highly durable one spot instance with AWS CDK!

Constructs

This library provides two major constructs:

SpotInstance

  • Create a spot instance without any fleet
  • Does NOT support Spot Block
  • Support stop or hibernate instance

Scenario: To leverage the stop or hibernate capabilities of the spot instance to persist the data in the ebs volume.

SpotFleet

  • Create a spot instance with a Spot Fleet
  • Support Spot Block
  • Does NOT support stop or hibernate instance

Scenario: To ensure the availability with no disruption with defined period up to 6 hours.

Sample

SpotInstance

import { SpotInstance, AmazonMachineImage } from 'cdk-spot-one';

// Default use Amazon Linux 2
new SpotInstance(stack, 'SpotInstance');


// Custom Id use Ubuntu 20.04 Arm64 Server.
new SpotInstance(stack, 'SpotInstanceUbuntu', {
      vpc,
      customAmiId: AmazonMachineImage.UBUNTU_20_04_ARM64.getImage(stack).imageId,
      defaultInstanceType: new InstanceType('t4g.medium'),
      keyName,
      blockDeviceMappings: [{ deviceName: '/dev/sda1', ebs: { volumeSize: 20 } }],
      additionalUserData: ['curl -fsSL https://get.docker.com -o get-docker.sh', 'sudo sh get-docker.sh'],
    });

SpotFleet

import { SpotFleet } from 'cdk-spot-one';

// create the first fleet for one hour and associate with our existing EIP
const fleet = new SpotFleet(stack, 'SpotFleet')

// configure the expiration after 1 hour
fleet.expireAfter(Duration.hours(1))


// create the 2nd fleet with single Gravition 2 instance for 6 hours and associate with new EIP
const fleet2 = new SpotFleet(stack, 'SpotFleet2', {
  blockDuration: BlockDuration.SIX_HOURS,
  eipAllocationId: 'eipalloc-0d1bc6d85895a5410',
  defaultInstanceType: new InstanceType('c6g.large'),
  vpc: fleet.vpc,
})
// configure the expiration after 6 hours
fleet2.expireAfter(Duration.hours(6))

// print the instanceId from each spot fleet
new CfnOutput(stack, 'SpotFleetInstanceId', { value: fleet.instanceId })
new CfnOutput(stack, 'SpotFleet2InstanceId', { value: fleet2.instanceId })

Create spot instances without duration block

const fleet = new SpotFleet(stack, 'SpotFleet', {
  blockDuration: BlockDuration.NONE,
})

NOTE: This kind of spot instance will be interrupted by AWS. However the fleet is using type maintain, the fleet can be refulfilled.

ARM64 and Graviton 2 support

cdk-spot-one selects the latest Amazon Linux 2 AMI for your ARM64 instances. Simply select the instance types with the defaultInstanceType property and the SpotFleet will auto configure correct AMI for the instance.

defaultInstanceType: new InstanceType('c6g.large')

ECS Cluster support

See https://github.com/pahud/cdk-spot-one/issues/270#issuecomment-877152685

Connect with Session Manager(recommended)

You may connect to the spot instance with Session Manager.

# make sure you have installed session-manager-plugin
$ session-manager-plugin
# start session
$ aws ssm start-session --target INSTANCE_ID

Connect with EC2 SSH Connect

By default the cdk-spot-one does not bind any SSH public key for you on the instance. You are encouraged to use ec2-instance-connect to send your public key from local followed by one-time SSH connect.

For example:

pubkey="$HOME/.ssh/aws_2020_id_rsa.pub"
echo "sending public key to ${instanceId}"
aws ec2-instance-connect send-ssh-public-key --instance-id ${instanceId} --instance-os-user ec2-user \
--ssh-public-key file://${pubkey} --availability-zone ${az}

npx ec2-connect INSTANCE_ID

To connect to the instance, run npx ec2-connect as below:

$ npx ec2-connect i-01f827ab9de7b93a9

or

$ npx ec2-connect i-01f827ab9de7b93a9 ~/.ssh/other_public_key_path

If you are using different SSH public key(default is ~/.ssh/id_rsa.pub)

Metadata

Release files for cdk-spot-one 2.0.328

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cdk-spot-one 2.0.328
File Size Uploaded Provenance
cdk-spot-one-2.0.328.tar.gz 76.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for cdk-spot-one 2.0.328
File Interpreter ABI Platform
cdk_spot_one-2.0.328-py3-none-any.whl Python 3 none any Details

Total release size: 150.6 kB

Release files / cdk-spot-one-2.0.328.tar.gz

Download URL cdk-spot-one-2.0.328.tar.gz
Size 76.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f6e275d214f5202f8f01cc72b536e27dbadb6e6822401063c00e4eddd1490183
BLAKE2b-256 checksum
How to use checksums
3af0bcd0f1f43e4a29ad96a271b3beefb8ba64e0cbb1f19ac9397009553ce687
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Release files / cdk_spot_one-2.0.328-py3-none-any.whl

Download URL cdk_spot_one-2.0.328-py3-none-any.whl
Size 74.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
523bdeb1a765f767bee04dec1f543debde4674983d0def6e22c86eb2378ab831
BLAKE2b-256 checksum
How to use checksums
4d3bd0a4d7090065233ff8d427aaf2088144becb41149e2775f27a463cce853c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Security for cdk-spot-one 2.0.328

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.0.328 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page