AWS Lambda 인 액션 Part 1

greetingsOnDemand (Lambda 함수코드)

console.log('Loading function');

exports.handler = (event, context, callback) => {
    console.log('Received event: ',
    JSON.stringify(event, null, 2));
    console.log('name =', event.name);
    var name ='';
    if ('name' in event) {
        name = event['name'];
    } else {
        name = 'World';
    }
    var greetings = 'Hello ' + name + '!';
    console.log(greetings);
    callback(null, greetings);
}
코드 작성 후 하단에서 역할 정하기

Execution role -> Create a new role from one or more templates -> myBasicExecution

생성 후 상단에 json 형식으로 값(name)을 넣고 테스트 해볼 수 있다(log도 확인).

*AWS CLI 설치(난 OS X 상에서 진행 (https://aws.amazon.com/cli 참고))

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py --user
$ pip install awscli --upgrade --user
$ echo 'alias aws=" ~/Library/Python/2.7/bin/aws"' >> ~/.bash_profile
# aws 깔린 위치 잘 찾아서 하기
# 터미널 다시 시작
$ aws --version
$ aws configure
# AWS IAM에서 만들고 받아서 치면 됨(위 사이트에 자세히 적혀있음)

AWS CLI 구성(링크)

Policy 넣어주기

Policies

$ aws lambda invoke --function-name greetingsOnDemand --payload '{"name":"John"}' output.txt

$ aws lambda invoke --function-name greetingsOnDemand --payload '{}' output.txt

$ aws lambda invoke help

customGreetingsOnDemand (Lambda 함수코드)

console.log('Loading function');

exports.handler = (event, context, callback) => {
    console.log('Received event: ',
        JSON.stringify(event, null, 2));
    console.log('greet = ', event.greet);
    console.log('name = ', event.name);
    var greet = '';
    if ('greet' in event) {
        greet = event.greet;
    } else {
        greet = 'Hello';
    }
    var name = '';
    if( 'name' in event) {
        name = event.name;
    } else {
        name = 'World';
    }
    var greetings = greet + ' ' + name + '!';
    console.log(greetings);
    callback(null, greetings);
}

Lambda 함수 API Gateway 통합

리소스HTTP 동사AWS Lambda를 사용한 메소드
/greetingGETgreetingsOnDemand

Amazon API Gateway -> Create API -> 새 API, API이름 ‘My Utilities’

리소스(/greeting) 생성 -> 메소드(GET) 생성 -> GET 설정에서 Lambda 함수 연동(greetingsOnDemand)

Method Flow

Method Request -> URL Query String Parameters에 name 추가 Integration Request -> 하단 Mapping Templates -> When there are no templates defined (recommended) -> Add mapping template -> ‘application/json’ 작성 후 클릭

#set($name = $input.params('name'))

{
#if($name != "")
    "name": "$name"
#end
}

작성 후 테스트 진행(name이 빈 문자열일때도 처리)

응답 변환하기

Integration Response -> 펼치기 -> Mapping Templates -> ‘application/json’

{ "greeting": "$input.path('$')" }

Deploy

Actions -> Deploy API -> New Stage -> Name: Prod … -> Deploy

curl https://{my endpoint}/prod/greeting

curl https://{my endpoint}/prod/greeting?name=John

* name을 resource 경로로 처리하기

resource by path

curl https://{my endpoint}/prod/user/John/greet

IP주소 따내는거 만들기

Lambda 함수(만들기)

exports.handler = (event, context, callback) => {
    callback(null, event.myip);
}

API Gateway 측 Method Execution

get_ip_gatewayside

curl https://{my endpoint}/prod/my-ip

연습

curl https://{my endpoint}/prod/user/{username}/say/{greeting} 하면

{username} {greeting}! response로 나오도록 만들기

#set($name = $input.params('username'))
#set($greet = $input.params('greet'))
{
#if($greet != "")
    "greet": "$greet"
    #if($name != "")
    ,
    #end
#end

#if($name != "")
    "name": "$name"
#end


}

이 언어 문법 아직 이해가 잘 되지 않는다.