Playing Terraform for AWS

This post is based on terraform tutorial Build infrastructure | Terraform | HashiCorp Developer

Make sure AWSCli being installed and configured correctly (aws configure). Make sure IAM user are configured with AWS role, AWS Access key ID and AWS Secret Access Key.

Use the ami catalog, to determine the ami ID, then after make necessary changes run the init

Result of terraform init
terraform plan will show configuration to be applied once init are successful
AWS EC2 creation failed

To solve this VPC and subnet needs to be created first.

Creation of VPC completed, copy the DMZ subnet ID

Make small change to the EC2 instance of terraform file.

Add DMZ subnet to the terraform file

Rerun the terraform init, terraform plan, terraform validate before rerunning terraform apply, then type yes.

EC2 provisioning Completed
Cleaning up, terraform destroy

To clean up the experiment to avoid paying more, start by destroying the instance then the VPC.

Terraform code is available at https://bitbucket.org/KarMeng/terraform_aws

Experimenting with Terraform

All the experience in this post is based on Install Terraform | Terraform | HashiCorp Developer

After terraform init, terraform apply needs confirmation of “yes” before applying into environment

Feels like running ansible but simpler, as the tutorial of quickstart runs on docker engine.

After applying terraform, confirm the nginx is running

Further confirmation running browser to browse the site.

The terraform tutorial are running nginx at port 8000 of your host machine.
If you preferred curl

how to install mysql proxy quick and easy

In the linux ubuntu or redhat/centos (yum) just use the default package manager. For my post I am using ubuntu as an example to illustrate my point.

sudo apt-get install mysql-proxy

You should be getting the following confirmation

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
ttf-dejavu-extra libevent-extra-2.0-5 libmysql++3 libdbi1 libapr1 librrd4 libcairo2 libmysqlclient-dev libaprutil1-ldap libthai-data libreadline6-dev libpcrecpp0 libsvn1 libdatrie1
fontconfig libtinfo-dev libpixman-1-0 libevent-openssl-2.0-5 libaprutil1-dbd-sqlite3 libonig2 libthai0 libneon27-gnutls zlib1g-dev libevent-pthreads-2.0-5 libzzip-0-13 ttf-dejavu
libdb4.8 libpq5 libpcre3-dev libpango1.0-0 libxcb-render0 libxcb-shm0 libaprutil1 libevent-core-2.0-5 libfcgi0ldbl libreadline-dev

However, to run the mysql-proxy there is a few tweak needed, assuming that you are not using mysql-proxy beyond just a proxy.

To start up mysql-proxy, you may issue the command such as this :
sudo mysql-proxy --defaults-file=/etc/mysql/mysql_proxy.cnf &

The configuration of mysql_proxy.cnf :

log-file = /opt/apps/logs/mysql-proxy/mysql-proxy.log
log-level = debug
proxy-backend-addresses = 10.161.89.64:3306
admin-username = root
admin-password = for_my_eyes_only

If the mysql-proxy fails to start as a daemon, it is best to check the logs at /opt/apps/logs/mysql-proxy/mysql-proxy.log :

root@ckm-myprox:/opt/apps/logs/mysql-proxy$ sudo tail -f mysql-proxy.log
2014-06-11 20:58:27: (message) mysql-proxy 0.8.1 started
2014-06-11 20:58:27: (debug) max open file-descriptors = 1024
2014-06-11 20:58:27: (critical) admin-plugin.c:579: --admin-lua-script needs to be set, /lib/mysql-proxy/lua/admin.lua may be a good value
2014-06-11 20:58:27: (critical) mainloop.c:267: applying config of plugin admin failed
2014-06-11 20:58:27: (critical) mysql-proxy-cli.c:596: Failure from chassis_mainloop. Shutting down.
2014-06-11 20:58:27: (message) Initiating shutdown, requested from mysql-proxy-cli.c:597
2014-06-11 20:58:27: (message) shutting down normally, exit code is: 1

The last line of the log, just confirmed the mysql-proxy were failed to start due admin lua were not set. To skip the admin lua function(assuming that it will not be used). Start the mysql with :
sudo mysql-proxy --defaults-file=/etc/mysql/mysql_proxy.cnf --plugins=proxy &

Take note that my post on installing mysql-proxy, the version is 0.8.4 and the stock from ubuntu repository is 0.8.1 .

Installing mysql proxy from source into uBuntu server 12.04

Pre-requisite :

  • Root access or administrative rights to the uBuntu server.
  • uBuntu Server 12.04 installed.
  • OpenSSH Server installed in the server.
  • Ensure gcc with all its development libraries are installed.
  • Ensure gnu make is installed in the server.

Scope :

  • Works on x64 ubuntu
  • mysql_proxy 0.8.4

Installation steps :

  1. Download the mysql proxy source
    sudo wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz
  2. Unpack/Extract the source in your favorite temporary working directory
    Extract mysql_proxy source
    sudo tar -xzvf mysql-proxy-0.8.4.tar.gz
  3. Install the libmysql.
    sudo apt-get install libmysql++-dev
  4. Preparing to create configuration using source
    sudo ./configure
  5. The first run from the configure will result in configuration error due to dependent libraries/apps were not installed.
    configure: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config.
  6. To proceed install the pkg-config.
    sudo apt-get install pkg-config
  7. Rerun configure. The error will indicate LUA were not installed.
    checking pkg-config is at least version 0.9.0... yes checking for LUA... no ... checked for Lua via pkg-config: No package 'lua' found. retrying with lua5.1 checking for LUA... no configure: error: checked for Lua via pkg-config: No package 'lua5.1' found. Make sure lua and its devel-package, which includes the lua5.1.pc (debian and friends) or lua.pc (all others) file, is installed
  8. To fix the dependency error, install LUA and the LUA mysql library.
    sudo apt-get install lua5.1
    sudo apt-get install liblua5.1 sudo apt-get install liblua5.1-sql-mysql2
  9. Rerun the configure, the next error is missing glib.
    checking pkg-config is at least version 0.9.0... yes checking for LUA... no ... checked for Lua via pkg-config: No package 'lua' found. retrying with lua5.1 checking for LUA... yes checking for GLIB... configure: error: Package requirements (glib-2.0 >= 2.16.0) were not met:
  10. Install the missing glib and glib libraries.
    sudo apt-get install glib2.0 sudo apt-get install libglib2.0-0
  11. Error still occurs, missing libevent error during configurationconfigure: error: libevent is required
  12. Install the missing depencies, libevent.sudo apt-get install libevent-2.0-5 sudo apt-get install libevent-dev
  13. After installing pk-config, lua, glib and libevent, all dependencies should be resolved, continue to rerun configure.
  14. Continue to run the compilation and installation after the is configure completed.
    sudo make
    sudo make install
  15. Test the mysql-proxy. Running mysql-proxy for the first timesudo mysql-proxy
  16. If there is a following error while running mysql-proxy, and the missing library is found proceed with next step.mysql-proxy: error while loading shared libraries: libmysql-chassis.so.0: cannot open shared object file: No such file or directory
  17. To fix the error, run ldconfig .sudo ldconfig
  18. Rerun mysql-proxy. If you are getting the output below means you have successfully installed mysql-proxy.Usage:
    mysql-proxy [OPTION...] - MySQL Proxy
    Help Options:
    -h, --help Show help options
    --help-all Show all help options
    --help-proxy Show options for the proxy-module
    Application Options:
    -V, --version Show version
    --defaults-file= configuration file
    --verbose-shutdown Always log the exit code when shutting down
    --daemon Start in daemon-mode
    --user= Run mysql-proxy as user
    --basedir= Base directory to prepend to relative paths in the config
    --pid-file= PID file in case we are started as daemon
    --plugin-dir=
    path to the plugins
    --plugins= plugins to load
    --log-level=(error|warning|info|message|debug) log all messages of level ... or higher
    --log-file= log all messages in a file
    --log-use-syslog log all messages to syslog
    --log-backtrace-on-crash try to invoke debugger on crash
    --keepalive try to restart the proxy if it crashed
    --max-open-files maximum number of open files (ulimit -n)
    --event-threads number of event-handling threads (default: 1)
    --lua-path= set the LUA_PATH
    --lua-cpath= set the LUA_CPATH

Generating RSA key using Linux or Ubuntu

For linux or ubuntu user who is lazy to login to remote by typing password or plainly to improve security measure. You may generate a RSA key type to authenticate the login process. Generating the RSA key is the very first step.

Continue reading

Connect to SSH using customed port from UBuntu Terminal

Scope and conditions :

  1. SSH service is running on remote server.
  2. SSH is binded to IP address 10.10.10.10.
  3. SSH service is running on Port 9394 or customed port (SSH default port 22).
  4. There is no firewall on your computer or your network. Continue reading