공부하기싫어
article thumbnail

발행일 2022-05-19 18:51

 

서버로 사진을 보내고 변환 후 사용자 휴대폰으로 다시 데이터를 받아와야하는데

그래서 생각한 것이 버튼을 3개를 만드는 것이다.

[사진선택] - [변환하기] - [결과보기]

이렇게 3개의 버튼을 만들고

각각 이전 버튼의 작업이 끝나야만 동작되도록 하는 것이다.

 

[변환하기] 로 S3에 올린 사진을 변환 후 버킷 내 before 폴더에 저장하고

[결과보기] 로 S3 버킷 안의 after 폴더 에서 데이터를 받아오는 것이다.

 

광고는 [변환하기] 가 활성화 되고 클릭이 되었을 때 나오도록 하면 될 것 같다.

근데 그건 나중이고

 

 

 

 

 

  • 3 버튼 구현

결과 보기 버튼을 추가로 만들어 주자

그리고 이전 단계들이 완료되어야만 다음 버튼을 눌렀을때 실행되게 하고

이전 단계가 완료되지 않았다면 팝업이 뜨도록 해보자

https://youtu.be/SmsshpB1O38

팝업을 만드는 과정은 이 유튜브를 참고해서 만들었다

 

중간에 getcacheDir() 을 사용하는데 오류가 있어서 시간이 좀 오래 걸렸다...

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bgpoilkj&logNo=222030724865 

 

[오류 정리]안드로이드 on null object reference

프로젝트 개발 중 on null objectg reference에러 발생 이는 변수를 초기화하지 않고 데이터를 집어넣으려...

blog.naver.com

 

팝업 구현

여기다가 구현할꺼다

 

구현 성공

 

  • 간단한 사진 변환 후 다른 버킷에 저장

간단한 변환만 할 생각이라 입력된 사진을 좌우 반전시켜서 다른 버킷에 저장해보자

 

그럼 우선

  • S3에 이미지가 들어오는 것을 트리거로 한 lambda 함수를 만들어 보자

이거 알아보는데만 거의 2시간 썻는데

일단 S3 트리거를 만들고 기본 lambda 함수를 활용해서 이미지를 만지려는데

event 로 받아온 이미지 경로정보를 명확하게 하는게 힘들었다.

이벤트 로그

s3에 이미지를 올리니 이렇게 로그에 'Records' 정보가 나오는데

records

이중에서 어떤걸 빼내야 python 으로 이미지 파일을 열 수 있는지 잘 모르겠다

 

역시 잘 모를땐 공식문서 찾아보는게 ㅋㅋ

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-tutorial.html#with-s3-tutorial-create-function-code

 

자습서: Amazon S3 트리거를 사용하여 썸네일 이미지 생성 - AWS Lambda

자습서: Amazon S3 트리거를 사용하여 썸네일 이미지 생성 이 자습서에서는 Lambda 함수를 생성하고 Amazon Simple Storage Service(Amazon S3)에 대한 트리거를 구성합니다. Amazon S3는 S3 버킷에 업로드된 각 이

docs.aws.amazon.com

 

이걸 보고 각각의 코드가 뭘 의미하는지 알고싶었는데

uuid 쪽이나 /tmp 를 이용하는게 무슨 소리인지 이해가 안되서 그냥 무지성으로 코드 복붙해서 쓰기로 했다;;

 

그냥 저걸 쓰면 s3 이벤트를 받아서 쓸 수 있다 까지만 이해하자

이게 한계다 ㅅㅂ

 

그래서 그냥 코드 가져다 쓰려는데

??

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'PIL'

 

;; 이건 또 뭐임

 

모듈을 추가해주자...

https://jsikim1.tistory.com/180

 

AWS Lambda Layers 사용 방법 - AWS Lambda import module(package) (Lambda 모듈(패키지) 추가 및 사용 방법)

AWS Lambda Layers 사용 방법 - AWS Lambda import module(package) (AWS Lambda 모듈(패키지) 추가 및 사용 방법) AWS Lambda 를 사용할 때, 원하는 모듈(패키지) 를 추가하여 사용해야하는 경우가 있습니다. 또,..

jsikim1.tistory.com

이분 블로그를 따라했다

 

pillow 설치

pillow 를 받아주고

계층 생성

lambda 에 계층을 새로 생성해줬다

계층추가

그리고 lambda 함수로 들어가 생성한 계층을 추가해줬다

 

ㅋㅋ

그래도 안된다

이것만 몇시간째 하는지 모르겠다

 

https://github.com/keithrozario/Klayers/blob/master/deployments/python3.8/arns/ap-northeast-2.csv

 

GitHub - keithrozario/Klayers: Python Packages as AWS Lambda Layers

Python Packages as AWS Lambda Layers. Contribute to keithrozario/Klayers development by creating an account on GitHub.

github.com

여기서 arn 으로 찾아서 layer 를 넣어봤는데

arn지정
에러 구문이 바뀌었다

 

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': cannot import name '_imaging' from 'PIL' (/opt/python/PIL/__init__.py)

 

이라고 하는데

(         이미 지금 몇시간 연속으로 하고있어서 좀 지침

비공개로 저장하고 이따 오후헤 시험공부 하고나서 다시 만져보자      )

 

5.21 00:48

다시 위에 저 오류 구문을 해결해보자

 

https://stackoverflow.com/questions/57197283/aws-lambda-cannot-import-name-imaging-from-pil

 

AWS Lambda: cannot import name '_imaging' from 'PIL'

I currently try to get this AWS Lambda Getting started tutorial running: https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-python Howe...

stackoverflow.com

음 잘 모르겠는데 대충 보니까

지금 내 lambda에서의 python version이 3.7이여서 그런가보다

3.8로 새로 만들어서 진행해보자

 

이전에 pillow 로 계속 오류가 나서

다른 라이브러리인 opencv 로 해보려고 했는데

계층 추가
ㅋㅋ

이번엔 또 새로운 오류가 나타났다

 

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': libgthread-2.0.so.0: cannot open shared object file: No such file or directory
Traceback (most recent call last):

 

파일이나 디렉토리가 없다고??

 

.

.

.

.

.

.

.

.

 

별 지랄 다해봤는데

계층으로 할수있는건 없고

결국 ec2 를 만들여서 lambda 에 연동해야 하나보다

 

뭐 어쩌겠어 해야지

 

처음부터 다시 해보자

 

 

 

  • 변환한 사진 S3로부터 android로 불러오기