Googleカレンダーでインスタンス起動停止を管理する
せっかくなのでアドベントカレンダーに登録してみることにしました。
きっかけ
ある日、U先輩がこんなこと言ってきました。
U「あのさー、勉強会でさー、Googleカレンダーでインスタンス管理してるの見たんだよねー」
私「はぁ。。。」
U「やりたいよねー」
私「(作らせるつもりだ。。。)」
ってことで作ったので、ここに記述
Googleカレンダー側はGASで実装。
AWS側は、API gatewayとlambdaで実装しました。
まずはAWS側です。
AWS側の受け口を作成します。
当時から知っていれば、サーバーレスフレームワークのChaliceを使ったところですが、
残念ながら、手で設定してしまっています。
ああ、そのうち実装を変えよう。
labmdaはこちら。
構成編とか言わないでください。初めてのgithub公開なんですから。
それぞれをlamda functionとして登録します。
これChaliceなら、サクッとAPIまで作れるんだよーークゥ。。。
これ初回だからね、初回。
あとで実装を変えよう。
ここで、統合リクエストは
本文マッピングテンプレートの設定をする必要があります。
ここで、「テンプレートが定義されていない場合 (推奨)」を選択して、特にいじっていないのですが、
なんかこんな感じになっています。
多分、これ、変な情報入っていないはず。
またAPI叩くときは、restで{InstanceId}の部分に、インスタンスIDが入るイメージです。
統合リクエストを実行するときに、
{
"body-json" : $input.json('$'),
"params" : {
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
},
"context" : {
"account-id" : "$context.identity.accountId",
"api-id" : "$context.apiId",
"api-key" : "$context.identity.apiKey",
"authorizer-principal-id" : "$context.authorizer.principalId",
"caller" : "$context.identity.caller",
"cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
"cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
"cognito-identity-id" : "$context.identity.cognitoIdentityId",
"cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
"http-method" : "$context.httpMethod",
"stage" : "$context.stage",
"source-ip" : "$context.identity.sourceIp",
"user" : "$context.identity.user",
"user-agent" : "$context.identity.userAgent",
"user-arn" : "$context.identity.userArn",
"request-id" : "$context.requestId",
"resource-id" : "$context.resourceId",
"resource-path" : "$context.resourcePath"
}
}
きっと必要なものを厳選すればスリムになるんでしょうが、
AWSの更新もあったし、実装時間はお昼休みだし、なので勘弁を。。
ココを通過することで、lamdbaのこの箇所でpathパラメータを取得できます。
pathparam = event['params']['path']
instance = pathparam['instanceId']
API叩くときは、
GET https://ドメイン/ec2/i-xxxxx/start
GET https://ドメイン/ec2/i-xxxxx/stop
みたいな感じでAPIを叩きます。
ということで、AWS側の口が用意できました。
はい、次はGoogle側の設定!
Googleカレンダーは、
スプレッドシートから作成します。
またスプレッドシート上でも管理する必要があるので
こんな感じにします。
またログを、スプレッドシートのオーナー以外が見られるように、
ログシートを用意します。
すみません。見せたいのは、手順でなく、ログシートにログ履くようにしたよってことです。
スクリプトエディタができたら、
こちらからコピってきてきます。他の提供方法を知りません。誰かGoogleSpreadsheetのテンプレを適用する方法を教えてください。
「ドメイン」の部分を、APIgatewayのエンドポイントに設定。
ちなみにカレンダーに記述されたユーザーのカレンダーをチェックし、
スプレッドシートに記述されたインスタンスIDがあるときには起動インスタンス、ないときは停止のAPIを叩くだけです。
とりあえず、正常系しか見てません。あと、DryRunのFunctionはドライランです。
そしたら、実行の下の部分にある、時計マークから
トリガーを10分おきに設定します。
はい事前準備完了。
利用する
あとは指定の時間になったら、インスタンスが起動しているかの見てみましょう!
Author And Source
この問題について(Googleカレンダーでインスタンス起動停止を管理する), 我々は、より多くの情報をここで見つけました https://qiita.com/yutako0217/items/431f81576c63fbb31712著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .