2021. 8. 18. 19:47ㆍCloud/AWS 기초
남자들은 '하프라이프'라는 게임을 한 번 쯤은 해 봤을것이다. 혹은 '장비를 정지합니다.'라는 밈에 대해서 한 번 쯤은 들어봤을 것이다. 지금까지 잔뜩 AWS가 어떻고 EC2가 저떻고 하다가 갑자기 게임이야기를 하는 이유가 뭘까?
그림2는 그리스어로 람다 라고 한다. 11번제 글자이며 숫자로는 30을 의미한다. 언어학에서는 이것이 발전해 알파벳 L이 되었다 라고 한다.
여기서 람다를 따서 AWS에서도 람다라는 서비스를 제공한다. 이것은 서버리스(serverless)를 통해 개발자의 편의를 제공하는 서비스이다. 서버리스란 말 그대로 서버가 없는 환경을 의미한다.
이런 서버리스환경을 사용하면 누릴 수 있는 다양한 이점이 있는데 24시간동안 서버가 구동되는 전통적인 환경에 비해 실제 여러번의 코드가 실행되는 동안에만 비용이 발생하며 이는 낮은 인프라 비용과 사용량에 따라 비용이 조절된다는 이점이 된다. 또한 사람이 직접 서버에 대한 스케일in/out을 관리할 필요가 없고 AWS가 관리하기에 매우 편하다. 또한 로직을 만들고나면 손쉽게 운영 및 배포를 할 수 있으며 이는 확장성 및 가용성을 포함하는 장점이 된다.
AWS에서는 서버리스 플렛폼으로써 컴퓨팅에는 AWS Lambda, API 프록시에서는 Amazon API Gateway, 스토리지 서비스로는 Amazon S3, 데이터베이스로는 Amazon DynamoDB, 프로세스 간 메시징으로 AmazonSNS, AmazonSQS, 오케스트레이션으로는 Amazon Step Functions, 분석 서비스로 Amazon Kinesis, Amazon Athena등이 있다.
여기서 우리는 람다에 대해 알아보도록 하겠다. 람다는 웹페이지에서 코딩을 실행시켜주는 replit사이트와 굉장히 유사하다. 또한 여기에서는 기본적으로 청사진(blueprint)를 제공해 주며 기본적으로 Java, Go, PowerShell, Node.js, C#, Python 및 Ruby 코드를 지원한다. 또한 cloudwatch에서 제공하는 logs와 연동되어 있어 특별히 로그 수집 프로그램을 생성할 필요가 없다.
그럼 이 람다함수는 어떻게 구성되어 있을까?
1. 개발자가 어떤 형식직접 개발한 코드를 람다에 저장한다.
==> 외부 라이브러리, 코드를 실행하기 위한 환경변수 참조 등 람다를 실행하기 위한 모든 자료를 람다에 저장해야한다. 그렇지 않으면 람다는 이 코드를 읽고 해석할 수 없다.
2. 누군가(개발자, 사용자, 혹은 프로그래밍!! 등등)가 람다 함수를 트리거링 했을때 실행된다. 이때 이벤트 트리거가 사용을 해야한다. 이 과정을 invoke라고 한다.
3. 정상적으로 트리거가 되고 나면 람다가 실행된다.
이때 AWS의 특징 중 하나인 접근 관리 권한을 설정해 줘야한다. 즉 IAM실행 역할을 해야한다. 이벤트 트리거가 람다를 호출할 때 접근할 수 있는 관리 정책을 마련해야 하며 특정 람다를 호출할 권한이 있어야 람다를 트리거링 할 수 있다. 이 경우 IAM 정책을 통해 람다의 접근 권한을 사용할 수 있다. 파이선을 예시로 들자면 기본적으로 json파일을 제공해 준다. 하지만 개발자가 접근할 버켓의 이름, 키 등을 수정할 필요가 반드시 있다.(샘플이기에 기본적으로 ex-key 등의 이름으로 구성되어 있다.)
* AccessDiniedException이라는 오류가 종종나올 수 있는데 말 그대로 권한이 없어서 접근을 못한다 라는 의미이다. 예방하기 위해서는 roles에서 따로 추가해 권한을 추가해 주면 된다. 또한 다른 AWS 서비스에서 요청을 하는 경우 람다가 실행역할을 한다. 접근이 가능한 권한을 부여받아야 하며 이때 role이 잘 적용되어 있어야지만 정상적으로 코드가 실행된다.
==> 람다를 실행하고자 할때 람다를 실행하는 과정에서 다른 리소스에 접근하고자 하기위해서는 람다가 가지고 있는 권한(role)을 연결하는 방식으로 세팅을 바꿔줘야지 정상적으로 로직이 실행된다.
4. 3에서 실행될때 코드 라인 중 예를들어 "kinesiss 스트리밍을 해라.", "DynamoDB와 연동을 해라." 라는 코드가 있다면 상호 작용해서 연동이 된다.
람다가 구동된다는것은 코드가 정상적으로 구동된다라는 의미이다. 그렇다고 해서 진짜로 모든것이 구동될까? 예수의 손과 옆구리에 손가락을 넣어봤다는 '도마'라는 인물처럼 인간은 보지않고서는 믿지 못하는 존재인 만큼 이것에 대해 확인할 필요가있다. 이를 위해 AWS 에서는 cloudwatch를 통해 logs를 확인할 수 있도록 해 준다.
즉 람다를 만들때 코드를 잘짜는것도 중요하지만 접근권한을 잘 설정하는것도 중요하다.
다음 시간에는 람다의 코드 작성 및 관리에 대해 알아보도록 하겠다.
'Cloud > AWS 기초' 카테고리의 다른 글
AWS Lamdba(개발환경 설정) (0) | 2021.08.18 |
---|---|
AWS Lamdba (코드 작성 및 관리) (0) | 2021.08.18 |
AWS EC2의 시스템 인프라 (0) | 2021.08.12 |
AWS DataBase 서비스 (0) | 2021.08.11 |
AWS 스토리지 및 컨텐츠 배포 서비스(Amazon S3, EBS, cloud front) (0) | 2021.08.11 |