troposphere


Nametroposphere JSON
Version 4.7.0 PyPI version JSON
download
home_pagehttps://github.com/cloudtools/troposphere
SummaryAWS CloudFormation creation library
upload_time2024-03-10 20:56:49
maintainer
docs_urlNone
authorMark Peek
requires_python>=3.8
licenseNew BSD license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ===========
troposphere
===========

.. image:: https://img.shields.io/pypi/v/troposphere.svg
    :target: https://pypi.python.org/pypi/troposphere
    :alt: PyPI Version

.. image:: https://github.com/cloudtools/troposphere/actions/workflows/tests.yml/badge.svg
    :target: https://github.com/cloudtools/troposphere/actions?query=branch%3Amain
    :alt: Build Status

.. image:: https://img.shields.io/pypi/l/troposphere.svg
    :target: https://opensource.org/licenses/BSD-2-Clause
    :alt: license: New BSD license

.. image:: https://readthedocs.org/projects/troposphere/badge/?version=latest
    :target: https://troposphere.readthedocs.io/en/latest/?badge=latest
    :alt: Documentation Status

About
=====

troposphere - library to create `AWS CloudFormation`_ descriptions

The troposphere library allows for easier creation of the `AWS CloudFormation
JSON`_ by writing Python code to describe the AWS resources. troposphere also
includes some basic support for `OpenStack resources`_ via Heat.

To facilitate catching CloudFormation or JSON errors early the library has
property and type checking built into the classes.

Installation
============

troposphere can be installed using the pip distribution system for Python by
issuing:

.. code:: sh

    $ pip install troposphere

To install troposphere with `awacs <https://github.com/cloudtools/awacs>`_
(recommended soft dependency):

.. code:: sh

    $ pip install troposphere[policy]

Alternatively, you can use `setup.py` to install by cloning this repository
and issuing:

.. code:: sh

    $ python setup.py install  # you may need sudo depending on your python installation

Examples
========

A simple example to create an instance would look like this:

.. code:: python

    >>> from troposphere import Ref, Template
    >>> import troposphere.ec2 as ec2
    >>> t = Template()
    >>> instance = ec2.Instance("myinstance")
    >>> instance.ImageId = "ami-951945d0"
    >>> instance.InstanceType = "t1.micro"
    >>> t.add_resource(instance)
    <troposphere.ec2.Instance object at 0x101bf3390>
    >>> print(t.to_json())
    {
        "Resources": {
            "myinstance": {
                "Properties": {
                    "ImageId": "ami-951945d0",
                    "InstanceType": "t1.micro"
                },
                "Type": "AWS::EC2::Instance"
            }
        }
    }
    >>> print(t.to_yaml())
    Resources:
        myinstance:
            Properties:
                ImageId: ami-951945d0
                InstanceType: t1.micro
            Type: AWS::EC2::Instance

Alternatively, parameters can be used instead of properties:

.. code:: python

    >>> instance = ec2.Instance("myinstance", ImageId="ami-951945d0", InstanceType="t1.micro")
    >>> t.add_resource(instance)
    <troposphere.ec2.Instance object at 0x101bf3550>

And ``add_resource()`` returns the object to make it easy to use with ``Ref()``:

.. code:: python

    >>> instance = t.add_resource(ec2.Instance("myinstance", ImageId="ami-951945d0", InstanceType="t1.micro"))
    >>> Ref(instance)
    <troposphere.Ref object at 0x101bf3490>

---------------------------------------------------------------------
Examples of the error checking (full tracebacks removed for clarity):
---------------------------------------------------------------------

Incorrect property being set on AWS resource:

.. code:: python

    >>> import troposphere.ec2 as ec2
    >>> ec2.Instance("ec2instance", image="i-XXXX")
    Traceback (most recent call last):
    ...
    AttributeError: AWS::EC2::Instance object does not support attribute image

Incorrect type for AWS resource property:

.. code:: python

    >>> ec2.Instance("ec2instance", ImageId=1)
    Traceback (most recent call last):
    ...
    TypeError: ImageId is <type 'int'>, expected <type 'basestring'>

Missing required property for the AWS resource:

.. code:: python

    >>> from troposphere import Template
    >>> import troposphere.ec2 as ec2
    >>> t = Template()
    >>> t.add_resource(ec2.Subnet("ec2subnet", VpcId="vpcid"))
    <troposphere.ec2.Subnet object at 0x100830ed0>
    >>> print(t.to_json())
    Traceback (most recent call last):
    ...
    ValueError: Resource CidrBlock required in type AWS::EC2::Subnet (title: ec2subnet)

Currently supported resource types
======================================

- `AWS Resource Types`_
- `OpenStack Resource Types`_

Duplicating a single instance sample would look like this
=========================================================

.. code:: python

    # Converted from EC2InstanceSample.template located at:
    # http://aws.amazon.com/cloudformation/aws-cloudformation-templates/

    from troposphere import Base64, FindInMap, GetAtt
    from troposphere import Parameter, Output, Ref, Template
    import troposphere.ec2 as ec2


    template = Template()

    keyname_param = template.add_parameter(Parameter(
        "KeyName",
        Description="Name of an existing EC2 KeyPair to enable SSH "
                    "access to the instance",
        Type="String",
    ))

    template.add_mapping('RegionMap', {
        "us-east-1":      {"AMI": "ami-7f418316"},
        "us-west-1":      {"AMI": "ami-951945d0"},
        "us-west-2":      {"AMI": "ami-16fd7026"},
        "eu-west-1":      {"AMI": "ami-24506250"},
        "sa-east-1":      {"AMI": "ami-3e3be423"},
        "ap-southeast-1": {"AMI": "ami-74dda626"},
        "ap-northeast-1": {"AMI": "ami-dcfa4edd"}
    })

    ec2_instance = template.add_resource(ec2.Instance(
        "Ec2Instance",
        ImageId=FindInMap("RegionMap", Ref("AWS::Region"), "AMI"),
        InstanceType="t1.micro",
        KeyName=Ref(keyname_param),
        SecurityGroups=["default"],
        UserData=Base64("80")
    ))

    template.add_output([
        Output(
            "InstanceId",
            Description="InstanceId of the newly created EC2 instance",
            Value=Ref(ec2_instance),
        ),
        Output(
            "AZ",
            Description="Availability Zone of the newly created EC2 instance",
            Value=GetAtt(ec2_instance, "AvailabilityZone"),
        ),
        Output(
            "PublicIP",
            Description="Public IP address of the newly created EC2 instance",
            Value=GetAtt(ec2_instance, "PublicIp"),
        ),
        Output(
            "PrivateIP",
            Description="Private IP address of the newly created EC2 instance",
            Value=GetAtt(ec2_instance, "PrivateIp"),
        ),
        Output(
            "PublicDNS",
            Description="Public DNSName of the newly created EC2 instance",
            Value=GetAtt(ec2_instance, "PublicDnsName"),
        ),
        Output(
            "PrivateDNS",
            Description="Private DNSName of the newly created EC2 instance",
            Value=GetAtt(ec2_instance, "PrivateDnsName"),
        ),
    ])

    print(template.to_json())

Community
=========

We have a Google Group, cloudtools-dev_, where you can ask questions and
engage with the troposphere community. Issues and pull requests are always
welcome!

Licensing
=========

troposphere is licensed under the `BSD 2-Clause license`_.
See `LICENSE`_ for the troposphere full license text.


.. _`AWS CloudFormation`: http://aws.amazon.com/cloudformation
.. _`AWS CloudFormation JSON`: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html
.. _`OpenStack resources`: http://docs.openstack.org/developer/heat/template_guide/openstack.html
.. _cloudtools-dev: https://groups.google.com/forum/#!forum/cloudtools-dev
.. _`LICENSE`: https://github.com/cloudtools/troposphere/blob/master/LICENSE
.. _`BSD 2-Clause license`: http://opensource.org/licenses/BSD-2-Clause
.. _`AWS Resource Types`: https://github.com/cloudtools/troposphere/blob/master/resources_aws.md
.. _`OpenStack Resource Types`: https://github.com/cloudtools/troposphere/blob/master/resources_openstack.md

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/cloudtools/troposphere",
    "name": "troposphere",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "",
    "author": "Mark Peek",
    "author_email": "mark@peek.org",
    "download_url": "https://files.pythonhosted.org/packages/90/7b/3b58004a3fb810face8907eb5353a4e8a3e976fc29135ec402a7e57075da/troposphere-4.7.0.tar.gz",
    "platform": null,
    "description": "===========\ntroposphere\n===========\n\n.. image:: https://img.shields.io/pypi/v/troposphere.svg\n    :target: https://pypi.python.org/pypi/troposphere\n    :alt: PyPI Version\n\n.. image:: https://github.com/cloudtools/troposphere/actions/workflows/tests.yml/badge.svg\n    :target: https://github.com/cloudtools/troposphere/actions?query=branch%3Amain\n    :alt: Build Status\n\n.. image:: https://img.shields.io/pypi/l/troposphere.svg\n    :target: https://opensource.org/licenses/BSD-2-Clause\n    :alt: license: New BSD license\n\n.. image:: https://readthedocs.org/projects/troposphere/badge/?version=latest\n    :target: https://troposphere.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\nAbout\n=====\n\ntroposphere - library to create `AWS CloudFormation`_ descriptions\n\nThe troposphere library allows for easier creation of the `AWS CloudFormation\nJSON`_ by writing Python code to describe the AWS resources. troposphere also\nincludes some basic support for `OpenStack resources`_ via Heat.\n\nTo facilitate catching CloudFormation or JSON errors early the library has\nproperty and type checking built into the classes.\n\nInstallation\n============\n\ntroposphere can be installed using the pip distribution system for Python by\nissuing:\n\n.. code:: sh\n\n    $ pip install troposphere\n\nTo install troposphere with `awacs <https://github.com/cloudtools/awacs>`_\n(recommended soft dependency):\n\n.. code:: sh\n\n    $ pip install troposphere[policy]\n\nAlternatively, you can use `setup.py` to install by cloning this repository\nand issuing:\n\n.. code:: sh\n\n    $ python setup.py install  # you may need sudo depending on your python installation\n\nExamples\n========\n\nA simple example to create an instance would look like this:\n\n.. code:: python\n\n    >>> from troposphere import Ref, Template\n    >>> import troposphere.ec2 as ec2\n    >>> t = Template()\n    >>> instance = ec2.Instance(\"myinstance\")\n    >>> instance.ImageId = \"ami-951945d0\"\n    >>> instance.InstanceType = \"t1.micro\"\n    >>> t.add_resource(instance)\n    <troposphere.ec2.Instance object at 0x101bf3390>\n    >>> print(t.to_json())\n    {\n        \"Resources\": {\n            \"myinstance\": {\n                \"Properties\": {\n                    \"ImageId\": \"ami-951945d0\",\n                    \"InstanceType\": \"t1.micro\"\n                },\n                \"Type\": \"AWS::EC2::Instance\"\n            }\n        }\n    }\n    >>> print(t.to_yaml())\n    Resources:\n        myinstance:\n            Properties:\n                ImageId: ami-951945d0\n                InstanceType: t1.micro\n            Type: AWS::EC2::Instance\n\nAlternatively, parameters can be used instead of properties:\n\n.. code:: python\n\n    >>> instance = ec2.Instance(\"myinstance\", ImageId=\"ami-951945d0\", InstanceType=\"t1.micro\")\n    >>> t.add_resource(instance)\n    <troposphere.ec2.Instance object at 0x101bf3550>\n\nAnd ``add_resource()`` returns the object to make it easy to use with ``Ref()``:\n\n.. code:: python\n\n    >>> instance = t.add_resource(ec2.Instance(\"myinstance\", ImageId=\"ami-951945d0\", InstanceType=\"t1.micro\"))\n    >>> Ref(instance)\n    <troposphere.Ref object at 0x101bf3490>\n\n---------------------------------------------------------------------\nExamples of the error checking (full tracebacks removed for clarity):\n---------------------------------------------------------------------\n\nIncorrect property being set on AWS resource:\n\n.. code:: python\n\n    >>> import troposphere.ec2 as ec2\n    >>> ec2.Instance(\"ec2instance\", image=\"i-XXXX\")\n    Traceback (most recent call last):\n    ...\n    AttributeError: AWS::EC2::Instance object does not support attribute image\n\nIncorrect type for AWS resource property:\n\n.. code:: python\n\n    >>> ec2.Instance(\"ec2instance\", ImageId=1)\n    Traceback (most recent call last):\n    ...\n    TypeError: ImageId is <type 'int'>, expected <type 'basestring'>\n\nMissing required property for the AWS resource:\n\n.. code:: python\n\n    >>> from troposphere import Template\n    >>> import troposphere.ec2 as ec2\n    >>> t = Template()\n    >>> t.add_resource(ec2.Subnet(\"ec2subnet\", VpcId=\"vpcid\"))\n    <troposphere.ec2.Subnet object at 0x100830ed0>\n    >>> print(t.to_json())\n    Traceback (most recent call last):\n    ...\n    ValueError: Resource CidrBlock required in type AWS::EC2::Subnet (title: ec2subnet)\n\nCurrently supported resource types\n======================================\n\n- `AWS Resource Types`_\n- `OpenStack Resource Types`_\n\nDuplicating a single instance sample would look like this\n=========================================================\n\n.. code:: python\n\n    # Converted from EC2InstanceSample.template located at:\n    # http://aws.amazon.com/cloudformation/aws-cloudformation-templates/\n\n    from troposphere import Base64, FindInMap, GetAtt\n    from troposphere import Parameter, Output, Ref, Template\n    import troposphere.ec2 as ec2\n\n\n    template = Template()\n\n    keyname_param = template.add_parameter(Parameter(\n        \"KeyName\",\n        Description=\"Name of an existing EC2 KeyPair to enable SSH \"\n                    \"access to the instance\",\n        Type=\"String\",\n    ))\n\n    template.add_mapping('RegionMap', {\n        \"us-east-1\":      {\"AMI\": \"ami-7f418316\"},\n        \"us-west-1\":      {\"AMI\": \"ami-951945d0\"},\n        \"us-west-2\":      {\"AMI\": \"ami-16fd7026\"},\n        \"eu-west-1\":      {\"AMI\": \"ami-24506250\"},\n        \"sa-east-1\":      {\"AMI\": \"ami-3e3be423\"},\n        \"ap-southeast-1\": {\"AMI\": \"ami-74dda626\"},\n        \"ap-northeast-1\": {\"AMI\": \"ami-dcfa4edd\"}\n    })\n\n    ec2_instance = template.add_resource(ec2.Instance(\n        \"Ec2Instance\",\n        ImageId=FindInMap(\"RegionMap\", Ref(\"AWS::Region\"), \"AMI\"),\n        InstanceType=\"t1.micro\",\n        KeyName=Ref(keyname_param),\n        SecurityGroups=[\"default\"],\n        UserData=Base64(\"80\")\n    ))\n\n    template.add_output([\n        Output(\n            \"InstanceId\",\n            Description=\"InstanceId of the newly created EC2 instance\",\n            Value=Ref(ec2_instance),\n        ),\n        Output(\n            \"AZ\",\n            Description=\"Availability Zone of the newly created EC2 instance\",\n            Value=GetAtt(ec2_instance, \"AvailabilityZone\"),\n        ),\n        Output(\n            \"PublicIP\",\n            Description=\"Public IP address of the newly created EC2 instance\",\n            Value=GetAtt(ec2_instance, \"PublicIp\"),\n        ),\n        Output(\n            \"PrivateIP\",\n            Description=\"Private IP address of the newly created EC2 instance\",\n            Value=GetAtt(ec2_instance, \"PrivateIp\"),\n        ),\n        Output(\n            \"PublicDNS\",\n            Description=\"Public DNSName of the newly created EC2 instance\",\n            Value=GetAtt(ec2_instance, \"PublicDnsName\"),\n        ),\n        Output(\n            \"PrivateDNS\",\n            Description=\"Private DNSName of the newly created EC2 instance\",\n            Value=GetAtt(ec2_instance, \"PrivateDnsName\"),\n        ),\n    ])\n\n    print(template.to_json())\n\nCommunity\n=========\n\nWe have a Google Group, cloudtools-dev_, where you can ask questions and\nengage with the troposphere community. Issues and pull requests are always\nwelcome!\n\nLicensing\n=========\n\ntroposphere is licensed under the `BSD 2-Clause license`_.\nSee `LICENSE`_ for the troposphere full license text.\n\n\n.. _`AWS CloudFormation`: http://aws.amazon.com/cloudformation\n.. _`AWS CloudFormation JSON`: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html\n.. _`OpenStack resources`: http://docs.openstack.org/developer/heat/template_guide/openstack.html\n.. _cloudtools-dev: https://groups.google.com/forum/#!forum/cloudtools-dev\n.. _`LICENSE`: https://github.com/cloudtools/troposphere/blob/master/LICENSE\n.. _`BSD 2-Clause license`: http://opensource.org/licenses/BSD-2-Clause\n.. _`AWS Resource Types`: https://github.com/cloudtools/troposphere/blob/master/resources_aws.md\n.. _`OpenStack Resource Types`: https://github.com/cloudtools/troposphere/blob/master/resources_openstack.md\n",
    "bugtrack_url": null,
    "license": "New BSD license",
    "summary": "AWS CloudFormation creation library",
    "version": "4.7.0",
    "project_urls": {
        "Changelog": "https://github.com/cloudtools/troposphere/blob/master/CHANGELOG.md",
        "Homepage": "https://github.com/cloudtools/troposphere",
        "Source": "https://github.com/cloudtools/troposphere",
        "Tracker": "https://github.com/cloudtools/troposphere/issues"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8414058a8340fbe22010526c434967517c99cc8209cc7019a6f80719e06c49d2",
                "md5": "463ebc891a54cbea83de8154a8c4d11f",
                "sha256": "c26a60a94de78ff1d33f9992f22f6d312f2d0bdaed58121461b033831e174c78"
            },
            "downloads": -1,
            "filename": "troposphere-4.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "463ebc891a54cbea83de8154a8c4d11f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 497372,
            "upload_time": "2024-03-10T20:56:44",
            "upload_time_iso_8601": "2024-03-10T20:56:44.922528Z",
            "url": "https://files.pythonhosted.org/packages/84/14/058a8340fbe22010526c434967517c99cc8209cc7019a6f80719e06c49d2/troposphere-4.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "907b3b58004a3fb810face8907eb5353a4e8a3e976fc29135ec402a7e57075da",
                "md5": "818c7c4c87b32cf5f3240d5bce9d9f32",
                "sha256": "77e8f7ca7d9cf95d61b79d02a8748083f6655e0d0999a9f5c4a4b6a59c337259"
            },
            "downloads": -1,
            "filename": "troposphere-4.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "818c7c4c87b32cf5f3240d5bce9d9f32",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 433343,
            "upload_time": "2024-03-10T20:56:49",
            "upload_time_iso_8601": "2024-03-10T20:56:49.093887Z",
            "url": "https://files.pythonhosted.org/packages/90/7b/3b58004a3fb810face8907eb5353a4e8a3e976fc29135ec402a7e57075da/troposphere-4.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-10 20:56:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cloudtools",
    "github_project": "troposphere",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "troposphere"
}
        
Elapsed time: 0.21885s