Where’s my cross-cloud load balancer?

Citrix launching a new version of their Netscaler application delivery controller got me wondering why we still don’t have a multi-cloud Netscaler equivalent, capable of providing load balancer and traffic management capabilities across AWS, Google, Azure, and if you insist, Softlayer too?

I don’t think I’m asking for much, all I want is:

  • Automated creation (and destruction) of new back-end servers (or containers, Lambda, etc) in each cloud provider
  • Monitoring based on the metrics provided by each cloud provider and external ones such as latency
  • Routing of different URL patterns to different cloud providers depending on application deployment
  • Support for automated DNS record updates using multiple DNS providers
  • Distributed control plane so in the event of any one cloud failure, routing and updates continue

Even this operating in multiple AWS regions would be a big step forward over the standard AWS Elastic Load Balancer service, but if cross-cloud operation is to become normal, then this is one of the more straightforward services required.

So, when can I get it please?

Apache Kafka Visio Stencil

kafka logoI couldn’t find an Apache Kafka Visio stencil, so I’ve created one myself from the Kafka logo.

It’s available here: Apache Kafka Visio stencil

Just download the zip file and copy the stencil file inside it to “My Documents\My Shapes” in your user directory, and it should automatically appear inside Visio’s “My Stencils” section. If you run into any problems or have any suggestions, let me know in the comments below.

AWS CLI, network-interfaces, and associate-public-ip-address

The AWS CLI run-instances documentation isn’t great on how to assign a public IP Address in a VPC when you create a new instance, so this is a quick note on how to do it.

There’s a bug report on Unable to use –associate-public-ip-address but the fix mentioned isn’t very clear on the formatting, but this command line works:

aws ec2 run-instances --image-id ami-f0b11187 --key-name your-ssh-key-name --instance-type t2.micro --network-interfaces '[ { "DeviceIndex": 0, "Groups": ["sg-123456"], "SubnetId": "subnet-123456", "DeleteOnTermination": true, "AssociatePublicIpAddress": true } ]'

You obviously need to change the “Groups” value to a valid security group in your own VPC, and SubnetID to a subnet-id in your VPC (plus pick the right AMI for image-id), but after that you will be able to create an instance with a public IP!