Google 캘린더에서 인스턴스 시작 중지 관리

모처럼이므로 어드벤트 캘린더에 등록해 보기로 했습니다.

계기



어느 날, U 선배가 이런 말을 해왔습니다.

U 「저기, 공부회에서, 구글 캘린더로 인스턴스 관리하고 있는 것 봤지-」
나 「하아...」
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://domain/ec2/i-xxxxx/start
GET https://도메인/ec2/i-xxxxx/stop

같은 느낌으로 API를 두드립니다.
그래서 AWS 측의 입을 준비할 수 있었습니다.

네, 다음은 Google 측 설정!



Google 캘린더는
스프레드시트에서 만듭니다.


또한 스프레드 시트에서도 관리해야하기 때문에
이런 식으로 합니다.


또한 로그를 스프레드 시트 소유자 이외의 것을 볼 수 있도록,
로그 시트를 준비합니다.


죄송합니다. 보여주고 싶은 것은, 순서가 아니고, 로그 시트에 로그 신도록(듯이) 한 것입니다.

스크립트 편집기가 끝나면,
여기에서 복사해 온다. 다른 제공 방법을 모른다. 누군가 GoogleSpreadsheet 템플릿을 적용하는 방법을 알려주세요.

"도메인"부분을 APIgateway의 엔드포인트로 설정.
덧붙여서 캘린더에 기술된 사용자의 캘린더를 체크해,
스프레드시트에 설명된 인스턴스 ID가 있을 때 시작 인스턴스, 그렇지 않으면 중지 API를 두드리기만 하면 됩니다.

우선, 정상계밖에 보고 있지 않습니다. 그리고 DryRun의 Function은 드라이런입니다.

그런 다음 실행 아래 부분에있는 시계 마크에서



트리거를 10분 간격으로 설정합니다.
예 사전 준비 완료.

이용하다



스프레드시트는
이런 식으로


캘린더 쪽은 이런 느낌에 예정을 넣어 둡니다.


그리고 지정한 시간이 되면 인스턴스가 시작되고 있는지 살펴보자!

좋은 웹페이지 즐겨찾기