오전9~오후6시. EC2 인스턴스 자동시작/종료 설정

꾸준하게 20년·2023년 5월 15일
0

아직 익숙하지 않은 설정 과정을 메모하고 참고 하고자 정리 합니다.

본 내용은 https://youtu.be/mRq0VvXA-j8?t=117 영상을 참고하여 직접 설정해 보고 그 과정을 글로써 정리 하였습니다. 좋은 영상으로 도움이 많이 되었습니다. 감사합니다. ^^

핵심 포인트 정리

  • 해당 영상은 지정한 tag 값을 가지는 EC2 인스턴스를 대상으로 자동 시작/종료를 적용 합니다.
  • 해당 구성에서 사용된 AWS 서비스들은 IAM, CloudWatch, Lambda 입니다.

AWS 관리 콘솔 IAM 설정

  • 역할 만들기 버튼
  • IAM > 역할 선택
  • 역할 만들기 버튼 > 사용사례 systems Manager 조회 > 다음 버튼
  • automation 검색 > AmazonSSMAutomationRole 선택 > 다음 버튼
  • 역할 이름과 설명 : test-server-automation-start-stop-role 입력 > 역할 생성 버튼
  • 다시 역할 만들기 버튼
  • 일반 사용 사례 Lambda 선택 > 다음 버튼 > 다음 버튼
  • 역할 이름과 설명 : test-server-ec2-start-stop-role 입력 > 역할 생성 버튼 > 역할 생성 버튼
  • 역할 이름 test-server-ec2-start-stop-role 검색해서 선택
  • 권한 추가 콤보박스에 인라인 정책 생성 선택
  • JSON 탭 선택 하고 아래 JSON 입력 > 정책 검토 버튼
    아래 입력된 arn 정보는 5번에서 만든 역할의 arn 값이다.
      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ssm:*",
                    "tag:*",
                    "logs:*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "iam:PassRole"
                ],
                "Resource": "arn:aws:iam::XXXXXXXXXXXX:role/test-server-automation-start-stop-role"
            }
        ]
      }
  1. 이름 : test-server-lambda-policy > 정책 생성 버튼

Lambda 생성

  • 함수 생성 버튼
  • 함수이름 : test-server-lambda-function-start-stop
  • 런타임 : Node.js 14.x 선택
    아키텍처 : x86_64
    기본 실행 역할 변경 : 기존 역할 사용 선택하고 test-server-ec2-start-stop-role 선택.
  • 함수생성 버튼 누르고 아래 내용 입력
     var AWS = require("aws-sdk");
     AWS.config.update({
     	region: "ap-northeast-2"
     });
     
     exports.handler = async function(event, context) {
     	console.log("event:", event);
     	var ssm = new AWS.SSM();
     	var params = {
     		DocumentName: (event.action == "stop") ? 'AWS-StopEC2Instance' : 'AWS-StartEC2Instance',
     		Parameters: {
     			'AutomationAssumeRole': [event.rolearn]
     		},
     		MaxConcurrency: '10',
     		MaxErrors: '25%',
     		TargetParameterName: "InstanceId",
     		Targets: [{
     			Key: `tag:${event.key}`,
     			Values: [event.value]
     		}]
     	};
     	try {
     		const result = await ssm.startAutomationExecution(params).promise();
     		console.log(result);
     	}
     	catch (e) {
     		console.log(e);
     	}
     };
  • Deploy 버튼 클릭
  • 람다함수가 정상적으로 실행되는지 테스트 이벤트로 아래 내용 입력해서 테스트
    rolearn 값은 역할(test-server-automation-start-stop-role)의 arn 값이다.
      {
        "key": "auto-start-stop-am9-pm6",
        "value": "ok",
        "rolearn": "arn:aws:iam::XXXXXXXXXXXX:role/test-server-automation-start-stop-role",
        "action": "stop"
      }
  • 테스트 실행이 성공하면 EC2 가 중지됨 상태로 보일것이다. action 값을 "start" 로 바꾸고 다시 테스트하면 서버가 실행된다.

CloudWatch 설정

  • 이벤트 선택 > 규칙 선택
  • 규칙 생성 버튼 > 일정 체크 > Cron 표현식 체크
  • 대상 Lambda 함수 : test-lambda-start-stop 선택 > 입력 구성 : 상수(JSON 텍스트) 선택하고
    {"key": "auto-start-stop-am9-pm6","value": "ok","rolearn": "arn:aws:iam::XXXXXXXXXXXX:role/test-server-automation-start-stop-role","action": "stop"}
  • 크론 표현식 입력(월~금 + 오후6시 stop)
    GMT 기준이기 때문에 아래 입력값은 우리나라를 기준으로 월~금 오후 6시에 실행.
    0 9 ? 2-6
  • 규칙 이름과 설명 : ec2-tagbase-stop-pm6
  • 대상 Lambda 함수 : test-lambda-start-stop 선택 > 입력 구성 : 상수(JSON 텍스트) 선택하고
    {"key": "auto-start-stop-am9-pm6","value": "ok","rolearn": "arn:aws:iam::XXXXXXXXXXXX:role/test-server-automation-start-stop-role","action": "start"}
  • 크론 표현식 입력(월~금 + 오전9 start)
    GMT 기준이기 때문에 아래 입력값은 우리나라를 기준으로 월~금 오후 6시에 실행.
    0 0 ? 2-6
  • 규칙 이름과 설명 : ec2-tagbase-start-am9

마무리

  • 태그 기반으로 동작하기 때문에 다른 EC2 인스턴스에 태그만 추가하면 동일한 동작을 보장하기 때문에 편리 할 것으로 예상 됩니다.
  • 해당 과정을 이미지로 정리하기에는 유사한 자료들이 많이 있었습니다.
  • 그래서 가능한 여러번 스스로 해보면서 익숙해 지는 것을 목표로 하고 있습니다.
profile
앞으로 1년

0개의 댓글