運営者プロフィール

RaspberryPi2にawscliをインストールして簡単AWS管理!

017by ポール・アーデン

以前、RasberryPi2を購入してSSH接続が出来るところまで設定して放置していました。
【開封の儀】待ちに待った愛しのRaspberry Pi 2の開封を執り行う
【Raspberry Pi 2】悪戦苦闘!トラップだらけのRasberry Pi 2の構築 其の1
【Raspberry Pi 2】悪戦苦闘!トラップだらけのRaspberry Pi 2の構築 其の2

squidでも使ってプロキシサーバに使おうと考えていたのですが、諸事情により不要になったのが放置の原因でした。
放置しているのもアレなので、と思いついたのが「RasberryPi2を使ってAWS管理サーバを作ろう」といったものになります。

現在は外からRaspberryPi2にssh接続出来る環境が整っていますので、スクリプト一発で起動環境を整えたり、時間が来たら起動・停止といった制御をしてみたいと思います。
あと、CRONに登録しておいて、特定の時間帯に起動・停止といった事もゆくゆくはして行きたいな、と考えてみたりしてます。

今回やりたいこと

イメージはこんな感じ(図では起動ってなってるけど停止も)
raspi-ec2-0

 

RaspberryPi2にawscliインストール

・pipのインストール

# easy_install-pypy pip

・awscliインストール

# /usr/lib/pypy-upstream/bin/pip install awscli

・awscli環境設定
さぁ、早速awscliの環境設定をっと。

# aws configure
-su: aws: コマンドが見つかりません

ん?、何故かコマンドパスが通っていないっぽい。
なのでコマンドパス登録
.bashrcに下記を追記
PATH=$PATH:/usr/lib/pypy-upstream/bin/aws
そして、

# . .bashrc

気を取り直して再度、

# aws configure
-su: aws: コマンドが見つかりません

んー、よく分からん。
とりあえずはエイリアスで逃げる事に。
.bashrcに下記を追記
alias aws=/usr/lib/pypy-upstream/bin/aws
そして、

# . .bashrc
# aws configure
AWS Access Key ID [None]: <アクセスキー>
AWS Secret Access Key [None]: <シークレットキー>
Default region name [None]: ap-northeast-1
Default output format [None]:

行けた。。。(あんまり良くないけど)

・コマンド動作確認

# aws ec2 describe-regions
{
    "Regions": [
        {
            "Endpoint": "ec2.eu-central-1.amazonaws.com",
            "RegionName": "eu-central-1"
        },
        {
            "Endpoint": "ec2.sa-east-1.amazonaws.com",
            "RegionName": "sa-east-1"
~以下、略~

うむ。いけてるっぽい。
では、以前のエントリで使ったスクリプトを参考に移植してみる。
powershellスクリプトを使ってEC2インスタンスをタグ名を指定して起動


#!/bin/bash
alias aws=/usr/lib/pypy-upstream/bin/aws

# 引数チェック1
if [ "$1" = "" ]; then
 echo "引数がありません。"
 exit
fi

# 引数チェック2
if [ "$2" = "" ]; then
 echo "引数がありません。"
 exit
fi

# 引数が有効なホスト名かチェック
echo "ホスト名[$1]の確認"
instanceid=$(aws ec2 describe-tags --filters "Name=tag:Name,Values=$1" "Name=resource-type,Values=instance" --query Tags[].ResourceId --output=text)

if [ "${instanceid}" = "" ]; then
   echo "正しいホスト名を入力してください。"
   exit 0
fi

# 起動
aws ec2 $2-instances --instance-ids ${instanceid}

# 起動確認
i=0
check_time=5
span=3
check_times=$(expr ${check_time} * 10)

while [ ${i} -lt ${check_times} ]
    do
     State=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$1" --query Reservations[].Instances[].State[].Name --output=text)
     if [ "${State}" = "running" -o "${State}" = "stopped" ]; then
        break
     else
        echo "Waiting For Complete..."
        sleep ${span}
        i=$(expr ${i} + 1)
     fi
done

前回のpowershellで作ったのをシェルスクリプトに置き換え、さらに引数で起動・停止が指定出来る様に改修を行いました。

・起動確認

# sh ec2-start.sh hoge start
ホスト名[hoge]の確認
{
    "StartingInstances": [
        {
            "InstanceId": "i-35f8f72c",
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}
Waiting For Complete...

・停止確認

# sh ec2-start.sh hoge stop
ホスト名[hoge]の確認
{
    "StoppingInstances": [
        {
            "InstanceId": "i-35f8f72c",
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
Waiting For Complete...

よし、何とか起動・停止ともに成功!

キチンと書いたコードでは無いのでエラーハンドリング等の見直しは必要ですが、とりあえず動く事は確認出来ました(汗)
今日はこの辺で終わりして、次回は「スマホからRaspberryPi2にSSHで接続して~」といったところを書きたいと思います。
それでは。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)