Haxe로 AWS Lambda 함수 생성

주말 동안 나는 Haxe를 가지고 약간의 재미와 실험을 했습니다. Haxe는 인디 히트작Deadcells과 같은 게임 개발에 주로 사용되는 형식화된 다중 플랫폼 고급 프로그래밍 언어입니다. JavaScript로 내보내는 동안 "이봐, Lambda와 작동할까요?"라고 생각했습니다. 물론 충분히 가능합니다.

이미지 출처: Haxe Foundation

매우 실용적입니까? 난별로 확신이 들지 않아. Haxe는 Python이나 JavaScript만큼 대중적이지 않기 때문에 제3자 지원이 많지 않으며 Haxe는 직접 실행되지 않고 선택한 언어로 내보내집니다. 그러나 Haxe 상점이거나 AWS에서 원활하고 쉽게 실행될 수 있는 강력한 유형의 언어를 원하는 경우 간단히 살펴볼 가치가 있습니다.

Bellow, 저는 Lambda에서 Haxe를 시작하는 방법에 대한 빠른 가이드를 작성했습니다.

간단한 Haxe Lambda 함수 만들기



먼저 Haxe 프로젝트를 설정해야 합니다. 이 가이드에서는 Handler를 기본 클래스로 사용하고 JavaScript로 export/handler.js로 내보낼 것입니다.

내 구조는 다음과 같습니다.

├── compile.hxml
├── export // Note: Directory won't exist until compile
│ └── handler.js
└── src
    └── Handler.hx


여기 내 compile.hxml이 있습니다.

-cp src
--js export/handler.js
--main Handler


이제 Haxe 코드로 넘어가겠습니다. 다음은 내 src/Handler.hx의 시작 부분입니다.

class Handler {
    static function main() {}
}


As a note here, while Handler.main is not executed by the Lambda function, it is still required to property export your Haxe project.



실제로 매우 간단합니다. 먼저 Handler 클래스를 노출해야 합니다. @:expose를 추가하여 JavaScript 파일에서 액세스할 수 있습니다.

@:expose
class Handler {
    static function main() {}
}


그런 다음 람다 처리기 함수를 추가할 수 있습니다.

class Handler {
    static function main() {}
    static function handler() : String {
        return "Hello from Haxe!"
    }
}


이제 프로젝트 디렉토리에서 haxe compile.hxml을 호출하여 코드를 컴파일하십시오.

이제 함수를 호출하는 큰 비결은 함수를 람다 함수에 전달하는 것입니다. 이는 내보낸 Javascript를 가져오고 비동기 메서드에서 함수를 호출하여 달성할 수 있습니다. 이 파일은 Lambda 함수의 진입점이 됩니다. 제 경우에는 export/index.js입니다.

const handler = require("handler");

exports.handler = async function(event, context, callback) {
    return handler.Handler.handler(event,context,callback);
}


이제 내보내기 디렉토리를 압축하여 람다 함수에 업로드하면…



읽기 입력 사용



이전 부분에서 눈치챘다면 이벤트, 컨텍스트 및 콜백 객체를 모두 index.js의 함수에 전달합니다. 실제로 해당 개체를 AnonType으로 참조하고 액세스하려는 속성을 참조할 수 있기 때문입니다. 다음은 이벤트 개체를 사용하는 예입니다.

@:expose
class Handler {
    static function main() {}

    static function handler(event : {source : String}) : String {

        // Run your Haxe code
        var eventSource: String = event.source;

        // Return response
        return 'Hello to $eventSource from Haxe!';
    }
}




이제 컨텍스트 개체를 사용하여:

@:expose
class Handler {
    static function main() {}

    static function handler(event : {source : String}, context : {functionName : String}) : String {

        // Run your Haxe code
        var eventSource : String = event.source;
        var lambdaName : String = context.functionName;

        // Return response
        return 'Hello to $eventSource from $lambdaName!';
    }
}




관련된 링크들



GitHub 소스: https://github.com/josephbmanley/haxe-lambda-example

공식 Haxe 웹사이트: https://haxe.org/

좋은 웹페이지 즐겨찾기