수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다
개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!
교재 <아마존 웹 서비스 AWS DevOps Discovery Book - 권영환 지음>를 토대로 실습을 진행하였습니다.
* 실습요약
1. IAM 역할 생성 및 S3 버킷 설정
2. Lambda 함수 생성 및 기본 설정 구성
3. Lambda의 Python 3.7에서 라이브러리 작성 및 등록 방법
4. 생성된 리소스 종료
1. IAM 역할 생성 및 S3 버킷 설정
IAM > 역할 만들기 >
'AWSLambdaBasicExecutionRole' , 'S3FullAccess' 항목 체크
적절한 이름 입력 후 '만들기' 클릭
사용자 추가 > 이름 입력 > 프로그래밍 방식 액세스 체크 >
S3FullAccess 정책 연결 > 만들기 > csv 파일 다운로드
IAM 설정을 했다면 S3 버킷을 생성한 후, 테스트를 위해 이미지 파일을 업로드 합니다.
기존에 생성한 버킷 이름과 동일하게 작성하고 뒤에 '-resized' 를 추가해 버킷을 생성합니다.
(향후 Lambda 테스트를 위해 필요함)
2. Lambda 함수 생성 및 기본 설정 구성
Lambda 검색 > 함수 생성
[함수 코드] 작성 페이지에 다음과 같이 작성하여 저장합니다.
구성 > 권한 > 실행 역할 편집 > Lambda-S3-ExcutionRole 선택
트리거 추가 > S3 선택 > 처음 생성한 버킷 선택 > 만들기
테스트 > 이벤트 템플릿 : Amazon S3 Put > 이벤트 이름 : S3PutTest > 코드 수정
example-bucket 항목이 들어가는 자리에 이전에 생성한 버킷 이름으로 수정하고
'Object' 항목의 key에 대한 값을 'mohang.jpg'로 수정 후 저장합니다.
제 버킷 이름은 mybucket0408 입니다. 아래 사진은 오타난 사진입니다.
코드로 돌아와 'Deploy' 를 눌러 저장한 후, 테스트로 돌아와 '호출' 을 눌러 테스트해봅니다.
S3에 Thumbnail을 생성하기 위해 Python 3.7에서 사용되는 라이브러리인 'PTL' 라이브러리가 등록되지 않아서 발생된 오류입니다.
아래 단계를 통해 Python 3.7 라이브러리를 사용해보도록 하겠습니다.
3. Lambda의 Python 3.7에서 라이브러리 작성 및 등록 방법
EC2 생성 > Amazon Linux AMI 2 선택 > t2.micro 선택 > [검토 및 시작] 클릭 > 보안그룹에서 SSH에 대해 0.0.0.0/0 포트가 열려있는지 확인 >키페어 생성 > 키페어 다운로드 > 인스턴스 시작
인스턴스 상태가 '실행 중' 으로 변경될 때 까지 기다립니다.
다운로드 받은 키 페어 파일을 pem -> ppk로 변환합니다.
Puttyygen 실행 > 'Conversions -> import' > pem 파일 선택 > 'Save private key' 클릭
EC2 인스턴스를 Putty로 실행합니다.
인스턴스 업데이트를 하고, Root 권한 획득 작업을 수행합니다.
$sudo yum update -y
$sudo su
기존에 설치되어 있던 python2.7 Packages 중 PIL 라이브러리 제거 작업을 진행합니다.
$cd /usr/lib64/python2.7/site-packages/
$rm -rf PIL
필요한 라이브러리 설치를 진행합니다.
$sudo yum install -y gcc bzip2-devel ncurses-devel gdbm-devel xz-devel sqlite-devel openssl-devel tk-devel uuid-devel readline-devel zlib-devel libffi-devel
python 3.7의 다운로드와 압축 해제 작업을 수행합니다.
$wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
$tar -xJf Python-3.7.0.tar.xz
$cd Python-3.7.0
환경의 최적화 작업 및 구성 진행, 기존에 설치된 Python 2.7과 병행 사용하기 위해 make install(기존 2.7을 덮어씀) 대신 make altinstall을 사용합니다.
$./configure --enable-optimizations
$make altinstall
$export PATH=$PATH:/usr/local/bin
Lambd layer 등록이 필요한 Pillow, boto3에 대한 설치를 진행하고, 설치된 라이브러리의 Python3.7 site-packages를 지정된 경로로 복사한 후 정상적으로 라이브러리가 등록되었는지 확인합니다.
$pip3.7 install pillow
$pip3.7 install boto3
$cd /usr/local/lib/python3.7/
$mkdir -p /home/ec2-user/lambda_layers/python/lib/python3.7/site-packages
$cp -r site-packages /home/ec2-user/lambda_layers/python/lib/python3.7/
$cd site-packages
$ls -al
저는 pip3.7 명령어를 실행할 때 ImportError가 발생해서 실행이 안됐습니다.
이 오류는 새롭게 pip를 업데이트했을 때 pip에 설치된 main module를 찾을 수 없다는 것이였는데,
업데이트 이전에 모듈을 설치하여 에러를 해결할 수 있었습니다.
$sudo python3 -m pip uninstall pip && sudo yum install python3-pip --reinstall
제대로 재설치가 되지 않아도 일단 실행하고 다시 pip3.7 install pillow를 실행해보니 정상적으로 실행되었습니다.
lambda_layers 폴더로 이동 후 등록된 라이브러리들을 zip 명령을 이용하여 lambda_layers.zip 파일명으로 압축을 진행합니다.
$cd /home/ec2-user/lambda_layers
$zip -r lambda_layers.zip *
$ls -al
AWS CLI를 통해 S3에 파일을 업로드하기 위해 AWS configure를 실행하고, 이전에 발급받은 IAM의 신규 사용자 정보 중 액세스 키, 비밀 액세스 키와 본인 서비스에 대한 리전 정보를 추가로 입력합니다.
ouput format은 그냥 [Enter] 치시면 됩니다.
이제 작성된 파일을 S3로 업로드합니다.
$aws s3 cp lambda_layers.zip s3://버킷이름
파일이 업로드된 S3 Bucket으로 이동 후 업로드된 파일의 URL을 확인하여 복사합니다.
Lambda Layer 등록을 위해
Lambda > 계층 > 계층 생성
함수 > 계층 > Add a Layer
테스트에서 '호출'을 클릭하여 정상적으로 테스트가 수행됨을 확인합니다.
근데.....어찌 된 일인지 실패만 뜨네요......ㅜ
뭐가 문제인지 잘 모르겠네요...
하여튼!!
테스트에서 '호출'을 클릭하였을 때,
첫 번째로 생성한 S3버킷으로 이동하여 이미지 파일을 업로드하고, 두 번째로 생성된 S3버킷으로 이동하여 사이즈가 변경된 이미지가 정상적으로 생성됨을 확인하시면 됩니다..!
'클라우드 > AWS' 카테고리의 다른 글
AWS Summit Online Korea 행사 참여 (2) | 2021.06.07 |
---|---|
Terraform 기초 튜토리얼 (0) | 2021.05.13 |
AWS OpsWorks for Chef Automate (1) | 2021.04.08 |
웹 서버에서 실행되는 PHP 애플리케이션에 MySQL 데이터베이스 연결하기 (0) | 2021.03.30 |
AWS S3와 Ubuntu gnuboard간 파일 자동 백업 (0) | 2021.03.10 |
댓글