diff --git a/deploy-cluster-aws/release_eips.py b/deploy-cluster-aws/release_eips.py new file mode 100644 index 00000000..a3e1f855 --- /dev/null +++ b/deploy-cluster-aws/release_eips.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +"""Release all allocated but non-associated elastic IP addresses +(EIPs). Why? From the AWS docs: + +``To ensure efficient use of Elastic IP addresses, we impose a small +hourly charge if an Elastic IP address is not associated with a +running instance, or if it is associated with a stopped instance or +an unattached network interface. While your instance is running, +you are not charged for one Elastic IP address associated with the +instance, but you are charged for any additional Elastic IP +addresses associated with the instance. For more information, see +Amazon EC2 Pricing.'' + +Source: http://tinyurl.com/ozhxatx +""" + +from __future__ import unicode_literals +import boto3 +from awscommon import get_naeips + +# Get an AWS EC2 "resource" +# See http://boto3.readthedocs.org/en/latest/guide/resources.html +ec2 = boto3.resource(service_name='ec2') + +# Create a client from the EC2 resource +# See http://boto3.readthedocs.org/en/latest/guide/clients.html +client = ec2.meta.client + +non_associated_eips = get_naeips(client) + +print('You have {} allocated elactic IPs which are ' + 'not associated with instances'. + format(len(non_associated_eips))) + +for i, eip in enumerate(non_associated_eips): + public_ip = eip['PublicIp'] + print('{}: Releasing {}'.format(i, public_ip)) + domain = eip['Domain'] + print('(It has Domain = {}.)'.format(domain)) + if domain == 'vpc': + client.release_address(AllocationId=eip['AllocationId']) + else: + client.release_address(PublicIp=public_ip) diff --git a/docs/source/deploy-on-aws.md b/docs/source/deploy-on-aws.md index 2e4a18e2..ebd73b4f 100644 --- a/docs/source/deploy-on-aws.md +++ b/docs/source/deploy-on-aws.md @@ -122,9 +122,17 @@ bigchaindb --help bigchaindb show-config ``` -There are fees associated with running instances on EC2, so if you're not using them, you should terminate them. You can do that from the AWS EC2 Console. +There are fees associated with running instances on EC2, so if you're not using them, you should terminate them. You can do that using the AWS EC2 Console. -The same is true of your allocated elastic IP addresses. There's a small fee to keep them allocated if they're not associated with a running instance. You can release them from the AWS EC2 Console. +The same is true of your allocated elastic IP addresses. There's a small fee to keep them allocated if they're not associated with a running instance. You can release them using the AWS EC2 Console, or by using a handy little script named `release_eips.py`. For example: +```text +$ python release_eips.py +You have 2 allocated elactic IPs which are not associated with instances +0: Releasing 52.58.110.110 +(It has Domain = vpc.) +1: Releasing 52.58.107.211 +(It has Domain = vpc.) +``` ## Known Deployment Issues