`node-lambda`로 소박하게 Lambda를 사용해보십시오.

node-lambda에서 소박하게 Lambda를 사용해보십시오.



개요



AWS Lambda를 사용하여 무언가를하고 싶다면 다음 중 하나를 사용하는 것이 현기증입니까?
  • AWS SAM
  • Serverless Framework

  • Apex 추가 사항: Apex는 개발을 중단한 것 같습니다.

  • 그런 시대입니다만 node-lambda 의 소개를 합니다
    이름대로 AWS Lmabda를 Node.js에서 사용할 때 사용합니다. (Node.js 이외의 언어에는 대응하지 않습니다)
    소박한 툴로 할 수 있는 것은 적습니다만, 손쉽게 Lambda를 사용해 보는 분에는 좋은 툴이 아닐까 생각합니다

    install


    % npm i -g node-lambda
    

    global에 install한 것으로 이야기를 진행

    초기화



    적절한 작업 디렉토리를 만들고 거기로 이동 한 후 setup를 실행하십시오.
    % node-lambda setup
    Running setup.
    /path/.env file successfully created
    /path/event.json file successfully created
    /path/deploy.env file successfully created
    /path/context.json file successfully created
    /path/event_sources.json file successfully created
    Setup done.
    Edit the .env, deploy.env, context.json, event_sources.json and event.json files as needed.%
    
    node-lambda 이(가) 사용하는 파일이 모리모리 작성되었습니다.
    급하게 사용하는 것은 event.json.env
  • .env
  • Lambda에 배포할 때 사용. Role 및 Lambda 메모리 설정 등

  • deploy.env
  • 이름이 혼란 스럽지만 Lambda로 설정할 환경 변수를 설정하는 파일입니다.

  • event_sources.json
  • S3 이벤트를 트리거에 Lambda를 실행하려는 경우 등으로 설정합니다.

  • event.json
  • 로컬에서 실행할 때 사용

  • context.json
  • 로컬에서 실행할 때 사용


  • Lambda의 핸들러 예



    다음 파일을 예로 이동

    index.js
    exports.handler = async (event, context) => {
      console.log('Running index.handler')
      console.log('==================================')
      console.log('event', event)
      console.log('==================================')
      console.log('Stopping index.handler')
    
      return true
    }
    

    로컬에서 실행해보기


    run 를 실행합니다.
    기본적으로 index.js 에 있는 handler 라는 함수를 실행합니다.
    % node-lambda run
    Running index.handler
    ==================================
    event { key: 'value', key2: 'value2', other_key: 'other_value' }
    ==================================
    Stopping index.handler
    Result:
    true
    

    위의 index.js 내용이 실행되었습니다.

    인수의 event 에 값이 건너고 있는 것을 깨닫을까 생각합니다
    디폴트에서는 setup 로 작성된 event.json 를 인수의 event 에 건네줍니다
    setup 에서 생성되는 event.json 는 다음과 같습니다
    % cat ./event.json
    {
      "key": "value",
      "key2": "value2",
      "other_key": "other_value"
    }
    

    설정



    로컬에서 동작을 확인할 수 있으면 Lambda에 배포합니다.
    이를 위한 설정을 .env로 설정합니다.
    ~/.aws/credentials 에 액세스 키 등의 설정이 있으면 다음 설정 정도로 충분합니다.
    변수명으로부터 무엇의 설정인가는 상상할 수 있다고 생각하므로 자세한 것은 할애합니다

    .env
    AWS_ENVIRONMENT=development
    AWS_ROLE_ARN=arn:aws:iam::xxx:role/test
    AWS_REGION=us-east-1
    AWS_FUNCTION_NAME=test-function
    AWS_HANDLER=index.handler
    AWS_MEMORY_SIZE=128
    AWS_TIMEOUT=5
    AWS_RUNTIME=nodejs8.10
    

    deploy


    deploy 에서 Lambda에 배포
    % node-lambda deploy
    => Moving files to temporary directory
    => Running npm install --production
    => Zipping deployment package
    => Zipping repo. This might take up to 30 seconds
    => Reading zip file to memory
    => Reading event source file to memory
    => Uploading zip file to AWS Lambda us-east-1 with parameters:
    { FunctionName: 'test-function-development',
      Code:
       { ZipFile:
          <Buffer xxx more bytes> },
      Handler: 'index.handler',
      Role: 'arn:aws:iam::xxx:role/test',
      Runtime: 'nodejs8.10',
      Description: '',
      MemorySize: '128',
      Timeout: '5',
      Publish: false,
      VpcConfig: { SubnetIds: [], SecurityGroupIds: [] },
      Environment: { Variables: null },
      KMSKeyArn: '',
      DeadLetterConfig: { TargetArn: null },
      TracingConfig: { Mode: null } }
    => Done uploading. Results follow:
    { FunctionName: 'test-function-development',
      FunctionArn:
       'arn:aws:lambda:us-east-1:xxx:function:test-function-development',
      Runtime: 'nodejs8.10',
      Role: 'arn:aws:iam::xxx:role/test',
      Handler: 'index.handler',
      CodeSize: n,
      Description: '',
      Timeout: 5,
      MemorySize: 128,
      LastModified: '2019-04-04T09:30:17.015+0000',
      CodeSha256: 'zzz',
      Version: '$LATEST',
      VpcConfig: { SubnetIds: [], SecurityGroupIds: [], VpcId: '' },
      KMSKeyArn: null,
      TracingConfig: { Mode: 'PassThrough' },
      MasterArn: null,
      RevisionId: 'yyy' }
    => All tasks done. Results follow:
    {}
    

    이것으로 deploy가 완료되었습니다. ( index.js 를 변경한 후에도 다시 deploy 하면 Lambda 업데이트가 가능합니다)

    웹 콘솔에서 확인하면 다음과 같습니다.
  • 일람 화면의 모습

  • 함수 상세 설정의 일부



  • Lambda invoke



    소박한 도구 만 있고 Lambda를 invoke하는 기능은 제공되지 않습니다.
    README에도 있는 거리 aws 명령으로 invoke하거나 웹 콘솔에서 실행하여 동작을 확인합시다.

    요약



    소박한 도구 node-lambda에서 AWS Lambda를 사용해 보았습니다.
    이마도키한 툴과 비교하면 뒤떨어지는 부분도 많습니다만, 내부에서 CloudFormation를 사용하고 있다고 하는 일 없이 간단하게 Lambda를 시작하기에는 충분하다고 생각합니다
    또한 소박한 도구이므로 코드를 읽으면 간단하게 API를 사용하여 Lambda에 deploy하거나 트리거가되는 이벤트의 연결 방법 등이 이해하기 쉬울지도 모릅니다

    좋은 웹페이지 즐겨찾기