wataメモ

日々のメモをつらつらと書くだけ

踏み台サーバ立ち上げAPIを作成してみた

 踏み台サーバは以前の記事でも書いたようにbastionが立ち上がっていて、SecurityGroupを更新してssh出来るようにしている。 その都合上ずっとインスタンスを立ち上げっぱなしにしていた。 それは勿体無いのでAmazon API GatewayAWS Lambdaで、単純なhttpアクセスで踏み台サーバが立ち上がるようにした。

構成

 API Gatewayを入れることで、クライアント側にSDK等特別な物が必要なく、curl等があれば踏み台インスタンスを立ち上げることができるようになる。 インスタンスを落とす場合は以前のLambdaを定期的に仕込んでおくことで、勝手に落ちるようにしてある。

f:id:wata_htn:20151026155107p:plain

AWS Lambda

 以前のを少しカスタマイズして、「Server」Tagに「bastion」と着けたインスタンスを起動するようにした。(複数可) 今回はLambdaのExecute RoleにIAMを付けるパターンなので、accessKeyIdとかは無し。

gist22c7a01e5b826957124c

Amazon API Gateway

 認証についてはIAMではなく、API Keyで行うようにし、curlではヘッダを追加するようにしている。 何度も叩くのでaliasを切っておく。

alias bastion='curl --header "x-api-key: xxxxxxxxxxx" https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/xxxxxx'

実行

起動

➜  ~  bastion
{"ip":"","message":"started instance(instanceId: i-xxxxxxxx)"}

 しばらくしてもう一度叩くとIPアドレスが分かる。 EIPは起動していないインスタンスにつけておくと課金されるので、毎回GIPが変わるがEIPをつけていない。 EIPがあればしばらくしてsshでつなぎに行けば良い。

➜  ~  bastion
{"ip":"x.x.x.x","message":"no instance to start."}

まとめ

 コストを減らす為に、利便性を下げないことは重要で、かつそれが色々な人に手軽に出来るようになることは重要。 「本当にEC2インスタンスは必要なのか」、「必要だとしても常時必要か」は考えていく必要がある。