본문 바로가기
Amazon Web Service

[AWS] NICE DCV Sesssion Manager + Lambda runtime Error 문제 그리고 Open SSL로 해결하기

by 클수저 2024. 5. 10.
728x90
반응형

최근에 Nice EnginFrame 서비스를 실행해보려고 NICE DCV Sesssion Manager를 설치하는 과정에서 cdk deploy  단계에서 똑같은 오류가 발생해서 에러 해결과정을 적어보려고한다.

위 과정에서 다음 설치과정이 진행되지 않았다.

 

그래서 여러가지 과정을 검색하고 확인하는 와중에, 아래의 내용을 발견했다.

 

Lambda 런타임 - AWS Lambda

Lambda는 때때로 해당 런타임이 지원하는 언어 버전의 지원 종료일 이후 제한된 기간 동안 Lambda 런타임의 지원 중단을 지연합니다. 이 기간 동안 Lambda는 런타임 OS에만 보안 패치를 적용합니다. Lam

docs.aws.amazon.com

 

해당 NICE DCV Sesssion Manager의 Lambda Cert.py 파일은 Python 3.7버전이었고, 그렇기 때문에 설치가 되지 않았다.

위에서도 지원되는 런타임은 3.9부터이다.

 

결국, 

버전은 3.9로 업데이트 하면서 발생했던 오류로 openssl을 패키징하지 않는다면, 코드 내에서 실행시키지 못한다는 오류를 찾았다. 이것을 해결하기 위해서 openssl을 패키징하여 lambda layer에 업로드 진행

 

즉, Lambda 3.9로 업데이트를 하면서 기존에 있던 라이브러리가 없을 수 있다. 거기서 OpenSSL이 패키징되어 있지 않아서 설치가 되지 않았다.

 

  #elastic_vdi_infrastructure_stack.py 추가 사항
  # OpenSSL Layer ARN
        openssl_layer_arn = "arn:aws:lambda:ap-northeast-2:549721396530:layer:openssl-layer:6"
        # Lambda Layer 객체 생성
        openssl_layer = _lambda.LayerVersion.from_layer_version_arn(
            self, "OpenSSLLayer",
            layer_version_arn=openssl_layer_arn
        )
         layers=[openssl_layer],  # Layer 추가
         nvironment={
         "OPENSSL_PATH": "/opt/bin/openssl"# OpenSSL 바이너리 경로 환경 변수
         
        
         if event['RequestType'] == 'Create':
   # Create the private key
     subprocess.check_output(os.environ['OPENSSL_PATH'] + " genrsa 2048 > /tmp/server.key", shell=True)

 

위와 같이 OpenSSL이 실행될 때 지정된 환경변수를 통해 Lambda Layer에 있는 OpenSSL을 실행할 수 있도록 했다.

 

AWS Lambda Layer는 AWS Lambda 환경에서 사용자 정의 라이브러리나 종속성을 관리하는 방법을 제공한다.

이 Layer를 사용하면 공통 라이브러리나 종속성을 Lambda 함수들 간에 공유하거나 재사용할 수 있습니다.

 

결국 Layer에서 라이브러리를 사용하기 때문에 외부와의 통신이 필요!!  여기서 OpenSSL 등장!

OpenSSL 같은 라이브러리도 이 Layer를 통해 패키지로 포함시켜서 Lambda 함수에서 사용할 수 있다. 

특히, OpenSSL 같은 보안 관련 라이브러리는 시스템에 기본적으로 설치되어 있지 않은 경우가 많고, Lambda 환경에서도 이를 기본적으로 제공하지 않기 때문에, 사용자가 직접 패키징해서 Lambda Layer를 통해 제공해야 할 필요성을 느꼈다.

 

간단하게 말해서, OpenSSL과 Lambda Layer의 관계는 Lambda에서 외부 라이브러리를 사용할 필요가 있을 때, 그 라이브러리를 패키징하고 배포하는 메커니즘을 제공한다는 점

 

이번 에러를 접하면서 느낀점은 프로그램의 버전 또한 중요하고 그 버전과 호환되는 라이브러리, 프레임워크등이 연동되는지 확인해야한다는 점이었다.

 

728x90
반응형