Source code for examples.ec2.ec2_static_ip

#!/usr/bin/env python3

from troposphere import ec2
from troposphere import Output, Export, Sub, GetAtt, Ref

from tropostack.base import InlineConfStack
from tropostack.cli import InlineConfCLI

[docs]class EC2Stack(InlineConfStack): """ Single-instance EC2 stack, which assigns a static IP address to the instance. Also features a security group, dedicated to the instance/stack. Uses a human-friendly AMI path specification rather than AMI ID. Args: region (str): Region where the stack/instance would be deployed instance_type (str): EC2 instance type ami_location (str): Qualified path to the AMI (i.e. Source in the UI). Example: ``amazon/amzn2-ami-hvm-2.0.20191116.0-x86_64-ebs`` vpc_id (str): VPC that the instance would be a part of subnet_id (str): ID of the subnet where the instance would be deployed ssh_key_name (str): SSH Keypair name to be associated with the instance private_ip (str): Static IP address of the instance. Must be available under the respective Subnet access (list of 3-tuples): List of 3 tuples to allow Ingress from, formatted as (Protocol, Port, Network Range). Sample value: ``[('tcp', 22, '0.0.0.0/0'), ]`` """ BASE_NAME = 'ec2-instance' CONF = { 'region': 'eu-west-1', 'instance_type': 't3.nano', 'access': [('tcp', 22, '0.0.0.0/0'), ], 'vpc_id': 'REPLACE-ME', 'subnet_id': 'REPLACE-ME', 'ssh_key_name': 'REPLACE-ME', 'private_ip': 'REPLACE-ME', 'ami_location': '', } @property def r_ec2_secgroup(self): return ec2.SecurityGroup( "Ec2SecurityGroup", VpcId=self.conf['vpc_id'], GroupDescription="Access to the instance ports", SecurityGroupIngress=[ ec2.SecurityGroupRule( IpProtocol=proto, FromPort=port, ToPort=port, CidrIp=cidr, ) for (proto, port, cidr) in self.conf['access'] ], ) @property def r_ec2(self): return ec2.Instance( "Ec2Instance", ImageId=self.ami_by_location(self.conf['ami_location']), InstanceType=self.conf['instance_type'], KeyName=self.conf['ssh_key_name'], SecurityGroupIds=[self.r_ec2_secgroup.ref()], PrivateIpAddress=self.conf['private_ip'], SubnetId = self.conf['subnet_id'] )
if __name__ == '__main__': # Wrap the stack in a CLI and run it cli = InlineConfCLI(EC2Stack) cli.run()