1. 개요

Lambda가 무엇인지 모른다면 먼저 Lambda에 대해 알아보고 넘어가자. 좀 안다고 하더라도 Lambda를 이용하여 Hello World 정도는 찍을 수 있어야 한다.


2. 시작

lambda Function을 생성한다.

  • blueprint는 Blank Function 선택!
  • 트리거는 넘어간다.
  • 이름 입력하고 언어는 노드 선택!
  • Role은 custom role을 하나 만들어준다. (새창이 뜬다)

3. role

다음은 custom 생성할 role 내용이다.

원래는 이런 내용이 있었을거다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}

이렇게 바꾼다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

4. Lambda 함수

그리고 가장 중요한 Lambda 함수 내용이다. 

const AWS = require('aws-sdk');
const ec2 = new AWS.EC2();

function getInstnaces(nextToken, callback) {
  const params = {
    NextToken: nextToken,
  };
  ec2.describeInstances(params, (err, data) => {
    if (err) {
      callback(err);
      return;
    }
    const instances = [];
    data.Reservations.forEach(reservation =>
      reservation.Instances.forEach(instance =>
        instances.push(instance)));
    if (data.NextToken) {
      getInstnaces(data.NextToken, (err, nextInstances) => {
        callback(err, [...instances, ...nextInstances]);
      })
    } else {
      callback(err, instances);
    }
  });
}

exports.handler = (event, context, callback) => {
  getInstnaces(null, (err, instances) => {
    callback(err, instances);
  })
};

그리고 [Test] (테스트)를 하면.. json으로 EC2 Instance 결과가 나온다!


5. 기타 활용범위

  • 이미지 리사이징, 섬네일 생성
  • 비디오 인코딩