본문으로 바로가기
반응형


AWS Lambda

서버를 프로비저닝 또는 관리하지 않고도 실제로 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있는 이벤트 중심의 서버리스 컴퓨팅 서비스입니다. 200개가 넘는 AWS 서비스와 서비스형 소프트웨어(SaaS) 애플리케이션에서 Lambda를 트리거할 수 있으면 사용한 만큼만 지불하면 됩니다.

 

- 서버 프로비저닝

서버의 CPU, Memory 등의 자원을 할당 또는 적절하게 배치해서 운영할 수 있도록 준비해 놓은 것
provision : 준비 예비 설비, make provision 준비하다

 

AWS S3

S3란 Simple Storage Service의 약자로 AWS에서 제공하는 인터넷 저장소로 파일을 저장하는 용도로 사용되며 용량은 무제한이다. HTTP를 이용하여 파일 접근 및 업로드/다운로드가 가능하다. S3는 버킷(Bucket)과 객체(Object)로 구성된다.

 

- 버킷(Bucket) : S3에서 생성할 수 있는 최상위 디렉토리로, 각 리전(Region)별로 생성 가능하고 버킷의 모든 이름은 모든 S3 Region에서 유일해야 하며 계정별로 100개까지 생성할 수 있다. 또한 버킷 안에 객체(Object)가 저장되고 디렉토리 생성이 가능하며 저속 제어 및 권한 관리가 가능하다.

- 객체(Object) : S3에 데이터가 저장되는 최소단위로 파일과 메타데이터로 구성된다. 기본적으로 객체의 Key가 데이터 이름이고, Value가 데이터 타입이며, 객체 하나의 크기는 최소 1Byte부터 최대 4TB까지 가능하다. 

 

AWS CloudeWatch

Amazon CloudWatch는 AWS 리소스 AWS에서 실시간으로 실행 중인 애플리케이션 모니터링 하는 서비스 입니다.

 

AWS EventBridge

Amazon EventBridge는 다양한 소스의 데이터와 애플리케이션을 연결하는 데 사용할 수 있는 서버리스 이벤트 버스 서비스


위에 Lambda를 이용해서 EC2를 정해진 시간에 중지하도록 만들려고 합니다.

 

1. Lambda에서 함수 하나를 만들어 줍니다.

2. EC2 인스턴스 중지를 위한 코드 작성

maven 프로젝트 생성 후 amazonaws dependency 추가

 

pom.xml

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.901</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ecs</artifactId>
    <version>1.11.892</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ec2</artifactId>
    <version>1.11.901</version>
</dependency>

 

EC2Stop.java

public class EC2Stop implements RequestHandler<Object,Object> {
    // accessKey, secretKey
    public static final AWSCredentials AWS_CREDENTIALS;
    // instanceID List
    public static final ArrayList<String> idList;

    static {
        AWS_CREDENTIALS = new BasicAWSCredentials(
                "accessKey",
                "secretKey"
        );

        idList = new ArrayList<String>() {{
            add("instanceID");
            add("instanceID");
        }};
    }

    @Override
    public Object handleRequest(Object o, Context context) {

        AmazonEC2 ec2Client = AmazonEC2ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(AWS_CREDENTIALS))
                .withRegion(Regions.US_EAST_1)
                .build();

        for (String instanecID : idList) {
            StopInstancesRequest stopInstancesRequest = new StopInstancesRequest()
                    .withInstanceIds(instanecID);

            ec2Client.stopInstances(stopInstancesRequest)
                    .getStoppingInstances()
                    .get(0)
                    .getPreviousState()
                    .getName();

            System.out.println("stop instanecID = " + instanecID);
        }

        return null;
    }
}

 

3. mvn install

프로젝트 target 폴더 하위 jar 파일 생성

 

4. jar 업로드

두가지 방식으로 업로드가 가능합니다.

- S3 업로드

- 파일 업로드

 

S3 방식 업로드

 

- 접속 정보 입력

$ aws configure
AWS Access Key ID [None]: Access Key
AWS Secret Access Key [None]: Secret Key
Default region name [None]: regin
Default output format [None]:

- s3 명령어

# configure로 입력한 접속 정보에 있는 버킷 리스트
$ aws s3 ls
2022-02-25 08:27:32 <버킷 명>
2021-05-14 06:53:56 <버킷 명>

# 버킷 리스트에 있는 파일 리스트
$ aws s3 ls <버킷명>
2022-07-14 10:50:09 <파일명>
2022-07-14 10:36:27 <파일명>

# s3 버킷 파일 업로드
$ aws s3 cp <파일명> s3://<버킷명>/<파일명>

# s3 버킷 파일 다운로드
$ aws s3 cp s3://<버킷명>/<파일명> <파일명>

 

 

5. Lambda 코드 테스트

 

6. Cloude Watch 확인

로그 확인

 

7. EventBridge 추가

트리거 추가

예약 표현식 하위 표 보고 작성

 

반응형