인생은 고통의 연속

AWS Toolkit을 써보자! 본문

아키텍쳐/Cloud

AWS Toolkit을 써보자!

gnidoc 2018. 12. 18. 17:32
    반응형

    일단 시작 전에 AWS를 찬양하자

    이전 글 넣기

    최근에 언급했던 AWS Toolkit을 써보았다.

    AWS Toolkit docs : https://docs.aws.amazon.com/ko_kr/toolkit-for-jetbrains/latest/userguide/welcome.html


    AWS Toolkit 플러그인은 Eclipse, VS code, Pycharm에 출시되었다.


    훨씬 더 전에 AWS CloudFormation도 나오긴했는데 잘안쓰는 서비스라 관심이 없었다.

    하지만 본격적인 Serverless 플러그인인 AWS Toolkit가 출시되었고 자세한 내용을 보면


    프로젝트 생성을 Serverless로 제공하고

    local, remote 실행/디버깅환경과(여기에는 안나와있지만 Docker를 사용한다)

    AWS Explorer를 통한 AWS 탐색기제공

    invoke remote lambda 또한 실행할 수 있다.(즉 의존성이 있는 lambda에 대해서 같이 실행이 가능하다)

    제일 중요한 Deploy까지 제공된다는점(python만 이라는게 함정)


    어떻게 돌아가는지 몰라서 AWS Blog의 간단한 예제만 해보기로 했다.

    https://aws.amazon.com/ko/blogs/aws/new-aws-toolkits-for-pycharm-intellij-preview-and-visual-studio-code-preview/


    하지만 사용하기 위해서는 필수적으로 python, AWS CLI(사실 이건 꼭은 아님), AWS SAM CLI, Docker가 필요하다.

    python 3.6 : https://www.python.org/downloads/release/python-360/

    AWS CLI 설치 가이드 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/installing.html

    AWS SAM CLI 설치 가이드 : https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/sam-cli-requirements.html

    Docker는 윈도우만 설치하기 까다로울테니 윈도우만 : https://docs.docker.com/docker-for-windows/install/


    난 개발할때는 맥북을 사용하고 블로그 글을 쓸때는 윈도우10 PC에서 하는데

    이번엔 글을 쓰기 위해서 윈도우에서 작업했다.

    하... 근데 이게 참 윈도우는 이런게 문제다. 꼭 뭔가 옵션이 추가된다.



    AWS SAM CLI 설치할때 윈도우만 굳이 저렇게 특정 위치에서 설치해야한다.

    혹시나하고 구글에 검색해보니 하란대로 안해서 에러난 경우들이 많던데

    그래도 윈도우10부터는 python이 AppData에 설치되면서 이런 작은 문제들이 많이 줄었다.


    아무튼 위에 것들을 다 설치하고 새로운 프로젝트를 만들면 아래와 같이 뜬다.


    난 AWS Blog에서 Hello World 예제를 따라해서 똑같이 Hello World로 만들었다.


    test_handler.py는 api gateway와 lambda를 테스트하기 위한 코드(pytest)들이 들어있고

    app.py에는 간단하게 내 pc의 ip 를 json으로 출력하는 예제 + 주석에 설명(아래에선 생략함)이 들어있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def lambda_handler(event, context):
        try:
            ip = requests.get("http://checkip.amazonaws.com/")
        except requests.RequestException as e:
            # Send some context about this error to Lambda Logs
            print(e)
     
            raise e
     
        return {
            "statusCode"200,
            "body": json.dumps(
                {"message""hello world""location": ip.text.replace("\n""")}
            ),
        }
    cs


    그래서 간단하게 로컬에서 input, credentials, region 등을 설정하고 실행해보면

    ?????

    난 처음에 Docker를 설치 안해서 이런 에러가 발생했다.

    docker를 설치하면서 hyper-V를 켜야하는데 이걸하다가 글 저장하는걸 까먹고 재부팅했다가 글을 날려먹었다

    제대로 docker를 설치해서 실행하면 아래와 같이 로컬에서 실행가능하다!


    처음 실행할때는 도커 컨테이너가 생성되느라 느린데 그 다음부터는 빠르게 실행된다.

    (Fetching lambci ~~~ container image............... 점이 점점 길어져서 사실 긴장했다)

    실제 콘솔에서 실행하여 Cloudwatch의 로그를 보는거처럼 소요된 시간, 메모리 등이 나와서

    비용 최적화하거나 테스트하기 좋을 듯하다.


    전회사에서 Lambda에 직접 코드 올려보고 테스트하다가 모르고 실서버에 테스트되던 실수도 했었는데

    Toolkit이 나왔으니 그나마 그런게 좀 방지될 거 같다.


    디버깅도 봐야하니 기존 코드에 print(ip)만 추가해서 ip 변수값을 봤다.

    디버깅도 마찬가지로 잘된다. 대신 자체적으로 VPN을 써서 디버거를 연결하는거 같은데

    그래서인지 cpu 사용률이 높다.(어차피 pycharm 쓰는거 자체가 사양이 높아야 쓰지)


    Deploy도 해보면 

    먼저 AWS Explorer로 region을 확인하고(나는 서울에 했다)

    AWS콘솔 - iam에서 엑세스키, 비밀키를 생성해서 

    Toolkit 플러그인을 통해서 credentials을 추가해야한다.

    (이미 나는 aws cli를 통해서 credentials를 등록해서 생략했다)


    프로젝트 우클릭해서 Deploy Serverless Application을 들어가서


    application 이름과 람다가 저장될 s3 bucket을 생성하여 지정해주고 deploy하면 된다.

    AWS Explorer를 확인해보면 CloudFormation, Lambda가 생성되었고


    AWS Console에서도 실행하능하고 API Gateway까지 연동된 Lambda가 생성되었다.


    그리고 제일 중요한 remote run!(안타깝게도 당연히 remote debug는 없다)


    Duration/Billed Duration Time이 더 빨라지긴했지만 메모리는 비슷하게 동작한걸 볼 수 있다.

    CloudWatch에도 Output을 제외하고는 동일한 로그가 남았다.


    잘 가지고 놀았으니 이제 지워야하는데

    이것도 Toolkit에서 할 수 있다.


    CloudFormation을 통해서 Deploy되는거라 CloudFormation을 공부해야되긴하지만

    애초에 API Gateway같은걸 설정하러 콘솔에 들어갈 필요가 없는것이니 더 편해졌다.

    (별도의 스크립트를 안짜도 된다는것)

    로컬 실행으로 좀 더 코드의 신뢰성을 줄 수 있다는게 제일 큰 장점이고 

    별도로 실행환경을 구축 안해도 되서 좋지만

    윈도우에서 Docker를 쓴다는게 생각보다 부하가 큰거 같다.

    i5-6600 사용 중인데 Window 환경에서 Docker를 키고 있는것만 해도 cpu가 4~50% 사용된다.

    pycharm을 킨상태에서 간단한 디버깅까지 하면 거의 80~90%가 되는데

    이제 서버 개발자도 클라 개발자처럼 컴퓨터가 좋아야하는 시대가 온 듯하다...


    그래도 하나 다행인 점은

    자동으로 생성된 컨테이너를 중지하려고 봤더니 pycharm에서 실행할때만 컨테이너를 활성화해놔서 

    굳이 더 손볼 필요는 없고 쓸때만 Docker를 키면 될거 같다.

    그리고 AWS에서 jetbrains, VS 제품군을 밀어주는걸 보면 이제는 툴쓰는 것도 실력인 시대가 된 것 같다.

    나도 서브라임텍스트말고 VS code 좀 써봐야지 ㅎㅎ

    반응형

    '아키텍쳐 > Cloud' 카테고리의 다른 글

    AWS S3 활용 및 단점 분석  (0) 2022.02.04
    serverless proxy 서버 구축  (0) 2021.02.04
    맥에서 AWS STS + CodeCommit 사용하기  (0) 2021.02.01
    SQS FIFO seoul 리전 추가  (0) 2019.02.10
    AWS Toolkits 출시에 대한 생각  (0) 2018.12.17
    Comments