AWS Lambda에서 EC2 인스턴스의 Start/Stop 자동화 시도
입문
오늘은 Advent Calendar 데뷔전의 Hassaku_입니다.63.나는 평소에 식전교에 있다.
25일이 마지막 날인 줄 모르고 동시 등록돼 올해의 압권을 장식하기로 했다.
신성한 밤에 나 혼자 외롭게 이 기사의 집필과 싸우고 있다...
달력의 제목(?)백업 자동화라고 쓰여 있는데, 옳지 않다. 거짓말이다.
오늘 우리는 자동화 EC2 부팅/정지의 실현 예시를 소개할 것이다.
슬라이드를 SlideShare에 업로드하는 중입니다.이쪽도 같이 참조하세요.
배경
이번 단락은 원래'서버 없는 구조','Cloud Automator','re:Invent'3개로 시작되었다p>
서버 아키텍처 없음
화제가 됐네요.서버 아키텍처가 없습니다.
서버 운용에서 해방되다니 정말 대단하다p>
Cloud Automator
Cloud Automator는 백업 등의 작업을 자동으로 수행하는 SaaS 도구입니다.서버 작업 제공p>
Cloud Automator에서 할 수 있는 일은 전형적인 사용 상황 ↓p>
- EC2 인스턴스 를 업무 시간에만 시작
- EBS 또는 RDS 자동 백업
※ 초밥은 만들 수 있지만 이번 목적은 그곳이 아니기 때문에 상품을 소개하지 않습니다.Cloud Automator는 단락의 계기가 되었으니 용서해 주십시오
re:Invent
는 "Python 대응"과 "일정 기반 실행"을 발표했다.
이 소식에 대한 감정이 고조된 사람도 많을 것이다.
모처럼 이 두 개를 넣은 물건을 만들고 싶다p>
이번에 할 일.
Lambda에서
↑에 소개된 Cloud Automator의 사용 방법: "EC2 인스턴스의 Start/Stop 자동화"br/>
10:00 시작 실례, 19:00 분실.이것을 실시함으로써 실수로 실례를 삭제하는 것을 잊어버리고 고액의 비용을 받는 것을 피할 수 있다p>
구조도
이런 느낌.br/>
현재 Lambda는 스케줄링을 기반으로 시작할 수 있으므로 사용합니다.
구성 요소는 다음과 같은 세 가지가 있습니다.p>
- Lambda Function...함수 [1]
- 이벤트 발생을 수신하고 액션을 시작하는 데 사용되는 SNS Topic
- Lambda Function...함수로 설정[2]
※ 오른쪽 아래 SNS 토픽은 없어도 이동하므로 이번에는 처리하지 않음p>
단계
- IAM Role 생성
- SNS Topic과 Lambda Function의 모형 만들기
- SNS Topic에서 메일 알림 구현
- Lambda Function의 이벤트 소스 설정
- Lambda Function 구현 및 테스트
- Lambda의 Event Source에서 타이머 설정
IAM Role 만들기
이 구성에는 두 가지 Lambda Function이 포함되어 있으므로 적절한 IAM Role을 할당합니다.
Function[1]에서 Publish
사용
Function[2]에서 Publish:Publish:ec2:StartInstances:ec2:StopInstances 권한을 부여합니다.p>
이번에는 람다에게 부여된 IAM Role을 제작할 예정이니 Role Type은 람다를 선택하세요.틀리지 마세요.br/>
SNS Topic 및 Lambda Function 생성
밖에서만 먼저 합니다.
Function[1](시작/중지 시간에 대한 발화) 2개, Function[2](시작/중지 실행) 1개, SNS Topic 최소 1개 만들기p>
Function 코드는 적절한 템플릿을 포함할 수 있습니다.
IAM Role의 분배는 아까 제작된 것에 적용됩니다.p>
Topic의 Subscriptions에서 Function[1]의 Arn을 등록하세요p>
SNS Topic에서 메일 알림 구현
위에서 만든 Topic에서 자신의 취향에 따라 자신의 이메일 주소를 등록하면 동작을 확인할 수 있습니다.
이것은 최악이 아니어도 움직인다.
Subscription 생성에 메일 주소를 입력하면 "Confirm Subscription"에서 확인 메일을 받을 수 있습니다.문서에 기재된 링크를 밟으면 Subscription 로그인이 완료됩니다p>
Lambda Function의 이벤트 소스 설정
Lambda Function의 이벤트 소스입니다.
먼저 시간 기반 시작 함수를 설정합니다[1].
너는 크론으로 쉽게 쓸 수 있다.시간은 지금 UTC밖에 없습니다.JST의 10:00, 평소에 시작하려면 위의 그림처럼p>
Function[2]도 같은 요령이다.
SNS의 Topic만 선택하면 됩니다.정해진 시간에 후보를 표시하는 Topicp>
람다 함수 실시 및 테스트
코드의 예를 들다p>
# EC2起動時刻を知らせるためのLambda Functionコードの例
import json
import boto3
sns_client = boto3.client("sns")
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
# publish to SNS Topic ...
topic_arn = "my-topic-arn"
message = dict(Action="start", InstanceIds=["instance-id"])
param = dict(TopicArn=topic_arn, Subject="subject", Message=json.dumps(message))
return sns_client.publish(**param)
Topic에'어느 실례'가'어느 조작'을 실행해야 하는지에 대한 정보를 전달했습니다.매개 변수의 규격은
message = dict(Action="start", InstanceIds=["instance-id"])
이곳의 기술은 전부다.인스턴스 ID가 직접 거는 코드는 매우 터무니없다...괜찮아요.br/>
다음은 실제 작업(시작/정지 실례)을 실행하는 함수의 코드 예시입니다.p>
import json
import boto3
ec2_client = boto3.client("ec2")
def lambda_handler(event, context):
# Get parameter
param = json.loads(event["Records"][0]["Sns"]["Message"])
# Invoke action
if param.get("Action", "") == "start":
ret = ec2_client.start_instances(InstanceIds=param.get("InstanceIds", []))
elif param.get("Action", "") == "stop":
ret = ec2_client.stop_instances(InstanceIds=param.get("InstanceIds", []))
return ret
매개 변수를 가져오는 방법이 더럽다고 말하지 마세요.
메시지에서 매개변수를 보고 적절한 인스턴스를 시작합니다.
이런 설치가 완성되었다p>
과제와 반성점
특별히 신경 쓰이는 일을 많이 열거하다.만약 전부 개선될 수 있다면, 현장에 투입해도 용품이 될 수 있다p>
인스턴스 직접 지정
필요한 매개 변수는 외부에서 늘려야 한다.태그라도 지정하면 되나요?p>
통용성을 높이는 방법으로
"이번에 만든 Lambda Function 만들기"를 실현하는 Lambda Function은 API Gateway로 이 Function을 감싸고 오프라인의 자체 검사 매개 변수로 대상 실례를 지정합니다.메타프로그래밍의.이거 언젠가 하고 싶어요.p>
전선이 더럽다
잘못 처리도 생각 안 했어요.p>
SNS 소식
매개 변수에 전달되는 단계에서 JSON을 문자열로 변환하지만 JSON 대상의 형식으로 전달할 수 있는 규격이어야 합니다.이 일대는 공부가 부족하다p>
총결산
Lambda로 EC2의 Start/Stop을 자동화하려고 합니다.
개선의 여지가 많으니 머지않아 갱신될 수 있기를 바랍니다.
이상p>
Reference
이 문제에 관하여(AWS Lambda에서 EC2 인스턴스의 Start/Stop 자동화 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hassaku_63/items/a1436b7afc3a13a89631텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)