Packages

  • package root
    Definition Classes
    root
  • package com
    Definition Classes
    root
  • package monsanto
    Definition Classes
    com
  • package arch
    Definition Classes
    monsanto
  • package cloudformation
    Definition Classes
    arch
  • package model

    A DSL to create consistent, type-safe AWS CloudFormation templates.

    A DSL to create consistent, type-safe AWS CloudFormation templates.

    The low-level DSL closely adheres to the objects and parameters in the CloudFormation template JSON specification. If you intend to use this DSL to create CloudFormation templates, it would behoove you to familiarize yourself with the CloudFormation documentation.

    In addition to the low-level, DSL, there are several higher-order builders and convenience methods. See com.monsanto.arch.cloudformation.model.simple.Builders for more information on these helper methods.

    For a discussion of the features and approach of this library, read our blog post.

    Sample usage:

    import com.monsanto.arch.cloudformation.model._
    import com.monsanto.arch.cloudformation.model.resource._
    import com.monsanto.arch.cloudformation.model.simple.Builders._
    
    object SimpleVPC extends VPCWriter {
      val ownerParameter = StringParameter(
        name = "Owner",
        Description = Some("Individual responsible for this template"),
        MinLength = Some(StringBackedInt(1)),
        MaxLength = Some(StringBackedInt(64)),
        AllowedPattern = Some("[-_ a-zA-Z0-9]*"),
        ConstraintDescription = Some("Can contain only alphanumeric characters, spaces, dashes and underscores.")
      )
      val keyNameParameter = `AWS::EC2::KeyPair::KeyName_Parameter`(
        name = "KeyName",
        Description = Some("Name of an existing EC2 KeyPair to enable SSH access to the instances"),
        ConstraintDescription = Some("Value must be a valid AWS key pair name in your account.")
      )
      val allowSSHFromParameter = CidrBlockParameter(
        name = "AllowSSHFrom",
        Description = Some("The net block (CIDR) that SSH is available to.")
      )
      val simpleParameters = Seq(
        ownerParameter,
        keyNameParameter,
        allowSSHFromParameter
      )
    
      val simpleConditions = Seq(
        Condition(
          name = "ShouldDisablePassword",
          function = `Fn::Equals`(
            a = ParameterRef(ownerParameter),
            b = StringToken("rms")
          )
        )
      )
    
      val amazonLinuxAMIMapping = Mapping[AMIId](
        "AmazonLinuxAMI",
        Map(
          "us-east-1"      -> Map("AMI" -> AMIId("ami-1ecae776")),
          "us-west-1"      -> Map("AMI" -> AMIId("ami-d114f295")),
          "us-west-2"      -> Map("AMI" -> AMIId("ami-e7527ed7")),
          "eu-west-1"      -> Map("AMI" -> AMIId("ami-a10897d6")),
          "ap-southeast-1" -> Map("AMI" -> AMIId("ami-68d8e93a")),
          "ap-southeast-2" -> Map("AMI" -> AMIId("ami-fd9cecc7")),
          "ap-northeast-1" -> Map("AMI" -> AMIId("ami-cbf90ecb"))
        )
      )
      val simpleMappings = Seq(amazonLinuxAMIMapping)
    
      val simpleResourceAndOutputs = withVpc(CidrBlock(10, 0, 0, 0, 16)) { implicit vpc =>
        val (internetGatewayResource, gatewayToInternetResource) = withInternetGateway
        val publicRouteTable = withRouteTable("Public", 1)
        val publicRouteTableRoute = publicRouteTable.withRoute(
          visibility = "Public",
          routeTableOrdinal = 1,
          routeOrdinal = 1,
          connectionBobber = InternetGatewayRoute(ResourceRef(internetGatewayResource))
        )
        val gatewayStuff = Template.fromResource(internetGatewayResource) ++
          gatewayToInternetResource ++
          publicRouteTable ++
          publicRouteTableRoute
        val withinAZ = withAZ("us-east-1a") { implicit az =>
          withSubnet("PubSubnet1", CidrBlock(10, 0, 0, 1, 24)) { implicit pubSubnet =>
            val bastionName = "bastion"
            val bastion = ec2(
              name = bastionName,
              InstanceType = "t2.micro",
              KeyName = ParameterRef(keyNameParameter),
              ImageId = `Fn::FindInMap`[AMIId](MappingRef(amazonLinuxAMIMapping), `AWS::Region`, "AMI"),
              SecurityGroupIds = Seq(),
              Tags = AmazonTag.fromName(bastionName),
              UserData = Some(`Fn::Base64`(
                `Fn::Join`("",
                  Seq[Token[String]](
                    "#!/bin/bash -v\n",
                    "yum update -y --security\n",
                    "# EOF\n"
                  )
                )
              ))
            )
            val sshToBastion = ParameterRef(allowSSHFromParameter) ->- 22 ->- bastion
            Template.fromSecurityGroupRoutable(bastion) ++
              bastion.map(_.withEIP("BastionEIP").andOutput("BastionEIP", "Bastion Host EIP")) ++
              Template.collapse(sshToBastion)
          }
        }
        gatewayStuff ++
          withinAZ
      }
      val simpleTemplate = simpleResourceAndOutputs ++
        Template(
          AWSTemplateFormatVersion = Some("2010-09-09"),
          Description = Some("Simple template"),
          Parameters = Some(simpleParameters),
          Conditions = Some(simpleConditions),
          Mappings = Some(simpleMappings),
          Resources = Seq.empty,
          Outputs = None
        )
      writeStaxModule("vpc-simple.json", simpleTemplate)
    }
    SimpleVPC

    The above code utilizes the DSL to create a simple AWS VPC utilizing a single Availability Zone having a single public subnet and a single "bastion" instance. The template output is the IP address of the EIP it creates. It also shows examples of creating and using Parameters and Mappings. A Condition is created but not used.

    Definition Classes
    cloudformation
  • package simple
    Definition Classes
    model
  • Autoscaling
  • AvailabilityZone
  • Builders
  • Conditions
  • EC2
  • ElasticLoadBalancing
  • Gateway
  • Instance
  • Outputs
  • Route
  • Route53
  • SecurityGroup
  • SecurityGroupRoutable
  • SecurityGroupRoutableMaker
  • Subnet
  • VPC
  • Yaml

object Builders extends Route with Instance with Subnet with Route53 with Autoscaling with SecurityGroup with VPC with AvailabilityZone with EC2 with Outputs with Gateway with Conditions with ElasticLoadBalancing

Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Builders
  2. ElasticLoadBalancing
  3. Conditions
  4. Gateway
  5. EC2
  6. VPC
  7. SecurityGroup
  8. Autoscaling
  9. Route53
  10. Subnet
  11. Outputs
  12. AvailabilityZone
  13. Instance
  14. Route
  15. AnyRef
  16. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. implicit class RichASG extends AnyRef
    Definition Classes
    Autoscaling
  2. case class AZ(zone: Token[String]) extends Product with Serializable
    Definition Classes
    AvailabilityZone
  3. implicit class RichInstance extends AnyRef
    Definition Classes
    Instance
  4. implicit class RichResource[R <: Resource[R]] extends AnyRef
    Definition Classes
    Outputs
  5. implicit class RichRouteTable extends AnyRef
    Definition Classes
    Route
  6. case class CidrIngressPrefix(from: ParameterRef[CidrBlock], portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  7. case class CidrTransport(fromPort: Int, protocol: String = "tcp", from: Option[Token[CidrBlock]] = None, toPort: Option[Int] = None) extends Product with Serializable
    Definition Classes
    SecurityGroup
  8. case class IngressPrefix(from: RichSecurityGroup, portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  9. case class IngressSuffix(to: RichSecurityGroup, portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  10. case class PortProtocol(startPort: Int, endPort: Int, protocol: TransportProtocol) extends Product with Serializable
    Definition Classes
    SecurityGroup
  11. case class PortProtocolFragment(start: Int, end: Int) extends Product with Serializable
    Definition Classes
    SecurityGroup
  12. implicit class RichCidrParam extends AnyRef
    Definition Classes
    SecurityGroup
  13. implicit class RichSecurityGroup extends AnyRef
    Definition Classes
    SecurityGroup
  14. implicit class RichSecurityGroupRoutable[R <: Resource[R]] extends AnyRef
    Definition Classes
    SecurityGroup
  15. implicit class RichTokenRefSecurityGroup extends AnyRef
    Definition Classes
    SecurityGroup
  16. case class RoutableIngressPrefix[R <: Resource[R]](from: RichSecurityGroupRoutable[R], portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  17. case class RoutableIngressSuffix[R <: Resource[R]](to: RichSecurityGroupRoutable[R], portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  18. case class SGTransport(fromPort: Int, protocol: String = "tcp", from: Option[Token[ResourceRef[AWS::EC2::SecurityGroup]]] = None, toPort: Option[Int] = None) extends Product with Serializable
    Definition Classes
    SecurityGroup
  19. case class TokenIngressPrefix(from: RichTokenRefSecurityGroup, portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  20. case class TokenIngressSuffix(to: RichTokenRefSecurityGroup, portProto: Seq[PortProtocol]) extends Product with Serializable
    Definition Classes
    SecurityGroup
  21. sealed abstract class TransportProtocol extends AnyRef
    Definition Classes
    SecurityGroup
  22. implicit class RichSubnet extends AnyRef
    Definition Classes
    Subnet
  23. implicit class RichVPC extends AnyRef
    Definition Classes
    VPC

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def anyAliasRecord(name: String, subdomainNameParam: ParameterRef[String], baseDomainName: ParameterRef[String], sslTargetName: String, sslCondition: Option[ConditionRef]): AWS::Route53::RecordSet
    Definition Classes
    Route53
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def asg(baseName: String, image: Token[String], instanceType: Token[String], keyName: Token[String], sgs: Seq[Token[ResourceRef[AWS::EC2::SecurityGroup]]], userData: Fn::Base64, iam: Option[Token[ResourceRef[AWS::IAM::InstanceProfile]]] = None, condition: Option[ConditionRef] = None, dependsOn: Option[Seq[String]] = None, blockDevices: Option[Seq[BlockDeviceMapping]] = None)(minSize: Int, maxSize: Int, desiredSize: Token[Int], tag: String, azs: TokenSeq[String], subnets: Seq[Token[ResourceRef[AWS::EC2::Subnet]]], elbs: Option[Seq[Token[ResourceRef[AWS::ElasticLoadBalancing::LoadBalancer]]]] = None)(implicit vpc: AWS::EC2::VPC): SecurityGroupRoutable[AWS::AutoScaling::AutoScalingGroup]
    Definition Classes
    Autoscaling
  7. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  8. def ec2(name: String, InstanceType: Token[String], KeyName: Token[String], ImageId: Token[String], SecurityGroupIds: Seq[ResourceRef[AWS::EC2::SecurityGroup]], Tags: Seq[AmazonTag], Metadata: Option[Map[String, String]] = None, IamInstanceProfile: Option[Token[ResourceRef[AWS::IAM::InstanceProfile]]] = None, SourceDestCheck: Option[String] = None, UserData: Option[Fn::Base64] = None, Monitoring: Option[Boolean] = None, Volumes: Option[Seq[EC2MountPoint]] = None, DisableApiTermination: Option[String] = None, Condition: Option[ConditionRef] = None, DependsOn: Option[Seq[String]] = None)(implicit subnet: AWS::EC2::Subnet, vpc: AWS::EC2::VPC): SecurityGroupRoutable[AWS::EC2::Instance]
    Definition Classes
    EC2
  9. def elb(name: String, subnets: Seq[Token[ResourceRef[AWS::EC2::Subnet]]], healthCheckTarget: String, loadBalancerName: Option[Token[String]] = None, condition: Option[ConditionRef] = None, scheme: Option[ELBScheme] = None, loggingBucket: Option[Token[ResourceRef[AWS::S3::Bucket]]] = None, dependsOn: Option[Seq[String]] = None)(listener: ELBListener)(healthCheck: ELBHealthCheck = ...)(implicit vpc: AWS::EC2::VPC): SecurityGroupRoutable[AWS::ElasticLoadBalancing::LoadBalancer]
    Definition Classes
    ElasticLoadBalancing
  10. def elbL(name: String, subnets: Seq[Token[ResourceRef[AWS::EC2::Subnet]]], healthCheckTarget: String, loadBalancerName: Option[Token[String]] = None, condition: Option[ConditionRef] = None, scheme: Option[ELBScheme] = None, loggingBucket: Option[Token[ResourceRef[AWS::S3::Bucket]]] = None, dependsOn: Option[Seq[String]] = None)(listeners: Seq[ELBListener])(healthCheck: ELBHealthCheck = ...)(implicit vpc: AWS::EC2::VPC): SecurityGroupRoutable[AWS::ElasticLoadBalancing::LoadBalancer]
    Definition Classes
    ElasticLoadBalancing
  11. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  13. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  14. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  15. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  16. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  17. def launchConfig(name: String, image: Token[String], instanceType: Token[String], keyName: Token[String], sgs: Seq[Token[ResourceRef[AWS::EC2::SecurityGroup]]], userData: Fn::Base64, iam: Option[Token[ResourceRef[AWS::IAM::InstanceProfile]]] = None, condition: Option[ConditionRef] = None, dependsOn: Option[Seq[String]] = None, blockDevices: Option[Seq[BlockDeviceMapping]] = None)(implicit vpc: AWS::EC2::VPC): SecurityGroupRoutable[AWS::AutoScaling::LaunchConfiguration]
    Definition Classes
    Autoscaling
  18. def nat(eip: AWS::EC2::EIP, routeTable: AWS::EC2::RouteTable, ga: AWS::EC2::VPCGatewayAttachment)(implicit s: AWS::EC2::Subnet): Template
    Definition Classes
    Subnet
  19. def nat(eip: AWS::EC2::EIP, routeTables: Seq[AWS::EC2::RouteTable], ga: AWS::EC2::VPCGatewayAttachment)(implicit s: AWS::EC2::Subnet): Template
    Definition Classes
    Subnet
  20. def nat(routeTable: AWS::EC2::RouteTable, ga: AWS::EC2::VPCGatewayAttachment)(implicit s: AWS::EC2::Subnet): Template
    Definition Classes
    Subnet
  21. def nat(routeTables: Seq[AWS::EC2::RouteTable], ga: AWS::EC2::VPCGatewayAttachment)(implicit s: AWS::EC2::Subnet): Template
    Definition Classes
    Subnet
  22. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  23. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  24. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  25. def resourceNameSafeUUID(): String
    Definition Classes
    SecurityGroup
  26. def securityGroup(name: String, desc: String, egress: Option[Seq[EgressSpec]] = None)(implicit vpc: AWS::EC2::VPC): AWS::EC2::SecurityGroup
    Definition Classes
    SecurityGroup
  27. def securityGroup(name: String, desc: String, condition: ConditionRef)(implicit vpc: AWS::EC2::VPC): AWS::EC2::SecurityGroup
    Definition Classes
    SecurityGroup
  28. def securityGroup(name: String, desc: String)(implicit vpc: AWS::EC2::VPC): AWS::EC2::SecurityGroup
    Definition Classes
    SecurityGroup
  29. def securityGroupFromOption(name: String, desc: String, condition: Option[ConditionRef])(implicit vpc: AWS::EC2::VPC): AWS::EC2::SecurityGroup
    Definition Classes
    SecurityGroup
  30. def subnet(visibility: String, ordinal: Int, vpc: VpcId, az: Option[Token[String]] = None, cidr: Token[CidrBlock], tagger: (String, String) ⇒ Seq[AmazonTag]): AWS::EC2::Subnet
    Definition Classes
    Subnet
  31. def subnet(visibility: String, ordinal: Int, vpc: VpcId, az: Token[String], cidr: Token[CidrBlock], tagger: (String, String) ⇒ Seq[AmazonTag]): AWS::EC2::Subnet
    Definition Classes
    Subnet
  32. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  33. def toString(): String
    Definition Classes
    AnyRef → Any
  34. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  35. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  36. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  37. def when[R <: Resource[R]](condition: ConditionRef)(rs: Seq[R]): Seq[R]
    Definition Classes
    Conditions
  38. def withAZ(zone: Token[String])(f: (AZ) ⇒ Template): Template
    Definition Classes
    AvailabilityZone
  39. def withInternetGateway(implicit vpc: AWS::EC2::VPC): (AWS::EC2::InternetGateway, AWS::EC2::VPCGatewayAttachment)
    Definition Classes
    Gateway
  40. def withRouteTable(visibility: String, ordinal: Int)(implicit vpc: AWS::EC2::VPC): AWS::EC2::RouteTable
    Definition Classes
    Route
  41. def withRouteTableAssoc(visibility: String, subnetOrdinal: Int, routeTable: Token[ResourceRef[AWS::EC2::RouteTable]])(implicit s: AWS::EC2::Subnet): AWS::EC2::SubnetRouteTableAssociation
    Definition Classes
    Subnet
  42. def withSubnet(name: String, cidr: Token[CidrBlock])(f: (AWS::EC2::Subnet) ⇒ Template)(implicit vpc: AWS::EC2::VPC, az: AZ): Template
    Definition Classes
    Subnet
  43. def withVpc(cidrBlock: Token[CidrBlock], vpcName: Option[String] = None)(f: (AWS::EC2::VPC) ⇒ Template): Template
    Definition Classes
    VPC
  44. object ALL extends TransportProtocol with Product with Serializable
    Definition Classes
    SecurityGroup
  45. object ICMP extends TransportProtocol with Product with Serializable
    Definition Classes
    SecurityGroup
  46. object PortProtocol extends Serializable
    Definition Classes
    SecurityGroup
  47. object PortProtocolFragment extends Serializable
    Definition Classes
    SecurityGroup
  48. object TCP extends TransportProtocol with Product with Serializable
    Definition Classes
    SecurityGroup
  49. object TransportProtocol
    Definition Classes
    SecurityGroup
  50. object UDP extends TransportProtocol with Product with Serializable
    Definition Classes
    SecurityGroup

Inherited from ElasticLoadBalancing

Inherited from Conditions

Inherited from Gateway

Inherited from EC2

Inherited from VPC

Inherited from SecurityGroup

Inherited from Autoscaling

Inherited from Route53

Inherited from Subnet

Inherited from Outputs

Inherited from AvailabilityZone

Inherited from Instance

Inherited from Route

Inherited from AnyRef

Inherited from Any

Ungrouped