Installation and Usage

In this page we show you how to deploy and use the tools to run simulations on AWS.

Caution

The solution and the toolset presented here are currently experimental, and we are collecting feedback about it. Please let us know if you are interested, and if you try it, we request you to report bugs, errors or any difficulty you experience in using it. We'd also be happy to hear about successful usage. Use the bugtracker link at the bottom of this page for feedback.

Installation

Install Docker, python3 and pip3 on your local computer. We recommend that you use Linux. A working OMNeT++ installation, and a checked-out INET (fork) git repository is also necessary.

Deployment on AWS

Creating an AWS Account

To access any web service AWS offers, you must first create an AWS account at http://aws.amazon.com. If you already have one, just log in to the AWS Management Console with it; otherwise, follow the instructions here: AWS registration.

During registration, you will have to enter your credit card number. Amazon will charge it with a small amount (1 USD) to verify it.

Creating the Access Policy

On the AWS Management Console, navigate to the IAM Service configuration page, and switch to Policies. Or just click this link, it will take you there.

Click the Create policy button. Switch over to the JSON tab. Paste the contents of this file into the entry field, replacing its entire contents.

This policy is the superset of the officially published one on the Docker for AWS website. It had to be slightly altered to make it fit into the default size limit, so it grants slightly more privileges than necessary. It also adds the ec2:CreateKeyPair and the cloudwatch:PutMetricAlarm permissions. These are necessary to automate the connection to the swarm, and the shutting down of the machines after they have been idle for a while.

Click Review policy. Enter a Name for the new policy, for example "inet-docker-swarm-policy", then click Create policy.

Creating the User

Switch over to Users and click Add user.

Enter a User name, for example "inet-swarm-cli", and tick the checkbox next to Programmatic access. Leave the other checkbox unchecked. Click Next: Permissions. Select Attach existing policies directly, search for the name of the policy we just created (by typing in a part of it, like "inet"), then check the checkboy next to it, and click Next: Review at the bottom. If everything looks alright, click Create user.

As the final step of user creation, save the Access key ID and the Secret access key, somewhere safe. It's a good idea that you do this by clicking Download .csv. This will let you download this information into a simple text file, so you won't make any mistakes while copy-pasting them.

Also, read the notice in the green area, particularly this part: "This is the last time these credentials will be available to download. However, you can create new credentials at any time." This means that if you don't save the key ID and the secret key now, you will have to delete this user and create a new one.

Important

Keep these strings private, since these grant access to your account, without the need for your password or other credentials. (Of course, only until you delete this user, or revoke its permissions.) Treat them with similar caution as you do your passwords.

Configuring CLI Access

To let your computer manage and use your AWS account, we have to configure it with the credentials of the user you just created for it. First we need to install the AWS CLI utility using pip:

$ pip3 install --user --upgrade awscli

Then start the configuration:

$ aws configure

If at first you get aws: command not found, or The program 'aws' is currently not installed, try running ~/.local/bin/aws configure instead.

When asked, enter the Access Key ID, then the Secret Access Key. They will be recorded into an INI file, which is by default at ~/.aws/credentials.

For Default region, choose the one closest to you geographically. You can find the list of region codes and their locations here. In my case, the Frankfurt datacenter was closest, so I entered eu-central-1. This setting is recorded in the ~/.aws/config file. You can find more info about Regions and Availability Zones here, here, and here.

You can leave Default output format empty.

Important

Once all this information is entered correctly, any software you run on your computer has access to your AWS account, as permitted by the policy attached to the configured user. Remove (rename) the credentials file mentioned above to (temporarily) disable access. The proper way to completely and permanently revoke this access is to delete the IAM User we just created.

From this point on in this tutorial, we won't need the AWS Management Console to initiate any actions. However, if you wish, you can use it to observe and check for yourself what the aws_swarm_tool.py script does.

Installing Local Client Scripts

Having set up your AWS account and access to it, we can proceed by installing the client-side tools for submitting simulations.

First, install the required Python libraries:

$ pip3 install --user --upgrade boto3 psutil pymongo redis rq

Save the following files into ~/.local/bin:

Make the script files executable, and put ~/.local/bin into the PATH if it does not already contain it:

$ cd ~/.local/bin; chmod +x aws_swarm_tool.py inet_runall_swarm.py
$ export PATH=$PATH:$HOME/.local/bin

Run the following command to set up the virtual machines and necessary infrastructure on AWS, and perform local configuration for accessing it:

$ aws_swarm_tool.py init

Usage

Running Simulations

Change into the directory under INET (or your INET fork) that contains your simulation.

IMPORTANT: Your INET installation should be a checked-out copy of a GitHub repository with all changes pushed up to GitHub, because our tool only sends the Git URL of your project and the hash of the currently checked-out commit to AWS, not the full source code. Additionally, OMNeT++ should be ready to use, with its tools (like opp_run or opp_run_dbg) accessible as commands.

$ cd examples/inet/ber

Enter the command for running the simulations, using our inet_runall_swarm.py program instead of ./run or inet:

$ inet_runall_swarm.py -c ber-flavour-experiment

The inet_runall_swarm.py tool will expand the list of simulation runs to be executed, submit them to the job queue, and wait for the jobs to finish. The results will be downloaded automatically into the results folder.

You can monitor progress at http://localhost:9181/ which displays the content of the job queue.

Stopping, Restarting and Deleting the Swarm

Once you are done, you can stop the machines:

$ aws_swarm_tool.py halt

They will also shut down automatically after an hour of being idle.

Important

AWS usage is billed by uptime, i.e. you are charged for the time the Swarm is up and running, regardless whether you are actually using it for simulations or not. Our tool configures AWS to halt the Swarm after one hour of idle time, but for extra safety, double-check that the Swarm has been stopped after you have finished working with it. WE ARE NOT RESPONSIBLE FOR EXTRA COSTS CAUSED BY LEAVING AWS NODES RUNNING. Read on for instructions.

The halt command only shuts down the virtual machine instances, but leaves all other resources intact, this way resuming the usage is faster than the initial deployment (with init). These additional resources being there inactively do not cost you anything.

To use the Swarm again, you have to start it up again:

$ aws_swarm_tool.py resume

To completely delete the entire Swarm:

$ aws_swarm_tool.py delete

Checking the Status Manually

Important

When you do not intend to work with AWS for an extended period of time, you may want to double-check manually that the stack on AWS has been stopped indeed, and you are no longer being billed for it.

To check the status, select the EC2 service on the AWS Management Console, and check the Running Instances. If you see instances named inet-Node or inet-Manager, in the running state, the Swarm is active.

To delete the Swarm manually (if the command-line tool does not work for some reason), go to the CloudFormation service page on the AWS Management Console. Tick the checkbox next to the inet Stack in the table, then click Actions > Delete Stack. This should remove all INET-related resources.

Feedback and Discussion

We are looking for any kind of feedback or suggestion you might have regarding this tutorial here: https://github.com/omnetpp/omnetpp-tutorials/issues/3