Skip to main content

Automating some AWS tasks

Managing and monitoring EC2 instances with the AWS console in browser is easy, but can involve a lot of clicking. Sometimes a command line is simply more efficient. The AWS CLI is great for managing EC2 instances and other stuff, but it can be annoying as most things need instance ids rather than human-friendly names. I've implemented some tools to simplify this by allowing me to reference things by their name.

These tools are implemented in Python, using boto3 and can be found on Github: https://github.com/ccpgames/aws-tools

Running bots for load testing is one example of a task where automation helps a great deal. I have scripts to create a number of machines, upload a tarball, extracting its contents and running a command. Once the command finishes the machines can be terminated.

I'm sometimes juggling a fair number of machines, and while each running instance is fairly cheap, things can add up, especially if I leave machines running idle just because I forgot to stop (or terminate) them. The list-machines script shows me a quick overview of all machines on my account.

I'll be adding tools to this collection as the need arises - feedback and contributions are welcome!

Comments

Popular posts from this blog

EchoBot

In a  previous blog  I started discussing Xmpp and showed how to set up an Xmpp server and connecting to it via Python. In this blog I will dig deeper and show how to implement a simple echo bot. The code for this lives on Github:  https://github.com/snorristurluson/xmpp-chatbot Connecting First, let's wrap the network layer. I've picked the Python 3  asyncio  for this task. Let's start by looking at  firstconnection.py . I've created a class called  FirstConnection  that inherits from  asyncio.Protocol . class FirstConnection ( asyncio . Protocol ): def __init__ ( self , host ): self .host = host self .transport = None def connect ( self ): loop = asyncio.get_event_loop() handler = loop.create_connection( lambda : self , self .host, 5222 ) loop.create_task(handler) def connection_made ( self , transport ): logger.debug( " Connection made " ) self .tra...

Working with Xmpp in Python

Xmpp is an open standard for messaging and presence, used for instant messaging systems. It is also used for chat systems in several games, most notably League of Legends made by Riot Games. Xmpp is an xml based protocol. Normally you work with xml documents - with Xmpp you work with a stream of xml elements, or stanzas - see https://tools.ietf.org/html/rfc3920 for the full definitions of these concepts. This has some implications on how best to work with the xml. To experiment with Xmpp, let's start by installing a chat server based on Xmpp and start interacting with it. For my purposes I've chosen Prosody - it's nice and simple to install, especially on macOS with Homebrew : brew tap prosody/prosody brew install prosody Start the server with prosodyctl - you may need to edit the configuration file (/usr/local/etc/prosody/prosody.cfg.lua on the Mac), adding entries for prosody_user and pidfile. Once the server is up and running we can start poking at it...

SSL issues in the ingame browser

EVE Online has an ingame browser, and under Wine that browser has issues with opening some websites using https. Those sites work in the game under Windows, so I knew it wasn't a browser issue per se. It wasn't an issue with all sites using https, either, so it wasn't a matter of SSL not working at all, either. With the help of CCP's security expert, we noticed that the sites that were failing had certificate chains up to a root certificate with a very strong signature algorithm, ecdsa-with-SHA384, and chances were that Wine did not support that particular algorithm. Now what? Personally I'm no expert in security algorithms, SSL or TSL or anything like that, so I wasn't sure where to even begin looking at Wine source code to see if this algorithm was supported. After some digging around I decided to look at the output of the secur32 channel: export WINEDEBUG=+secur32 Then I started up the EVE client and opened up the browser, entering https://zkillboar...