로컬에서 docker를 통해서 ECR에 올라간 Lambda 함수를 보려고 한다.
보려고 한 이유는 Github main 상용 브랜치에 올라간 람다와 Lambda 이미지에 올라간 함수가 다른 것 같아 확인해보기 위한 것이다.
-> main의 가장 최신 commit 상태의 코드와 현재 Lambda 이미지에 올라가 있는 함수가 다름
main 브랜치의 현재 코드를 Lambda에 배포할 때 문제가 생길지 아닐지 확인해야해서 필요했다.
1. docker 설치
docker 공심 홈페이지에서 docker를 설치해준다.
설치 후 버전을 확인하여 설치가 잘 되었는지 확인한다.
MacBookPro ~ % docker --version
>> Docker version 27.0.3, build 7d4bcd8
2. ECR에 로그인하여 이미지 갖고오기
ECR에 접근하기 위해 해당 기기(데탑or노트북 등)에 AWS credentials 정보가 필요하다.
나는 이전에 저장된 credentials 정보가 있어서 해당 계정들중 prod 함수를 테스트 해야했기 때문에 prod credentials을 확인했다.
# 1. 해당 기기에 저장되어있는 AWS credentials 확인
MacBookPro ~ % cat ~/.aws/credentials
# 2. 조회했을 때 나오는 credentials 이름 확인
[ss-dev]
aws_access_key_id = ###
aws_secret_access_key = ###
[ss-prod]
aws_access_key_id = ###
aws_secret_access_key = ###
prod용 credentials 이름은 ss-prod인 것을 확인했다.
ECR의 람다 이미지가 저장된 URI를 통해서 갖고 올 수 있다.
가져온 URI를 아래 명령어에 넣어서 사용하면 된다.
aws ecr get-login-password --region ap-northeast-2 --profile {AWS Credentials 이름} | docker login --username AWS --password-stdin {ECR Image URI}
예시
aws ecr get-login-password --region ap-northeast-2 --profile ss-prod | docker login --username AWS --password-stdin {###.ap-northeast-2.amazonaws.com}
접속이 잘 되었다면 아래와 같이 성공했다는 메세지가 뜬다.
ECR에 접근하였으니 해당 Image에 올라가있는 파일들을 pull해와야 한다.
명령어에는 아래 정보들이 필요하다.
docker pull {ECR Image URI}/{Lambda 이름}:{Image Tag 이름}
위 명령어를 치면 Pull complete 목록들이 뜨면서 정상적으로 가져온 것을 알 수 있다.
3. Docker 컨테이너 생성 및 실행
docker create --platform linux/amd64 --name temp_container {ECR Image URI}/{Lambda 이름}:{Image Tag 이름}
docker run -it --entrypoint /bin/sh --platform linux/amd64 {ECR Image URI}/{Lambda 이름}:{Image Tag 이름}
>> sh-4.2# cd /
4. 실행 후 확인하려는 파일로 접속
3번까지 진행하면 이미지 안으로 들어오게 된다.
람다 코드가 짜여져 있는 main.py로 접속하여 현재 업로드된 코드를 확인해야해서 main.p 이름을 갖고 있는 파일을 찾았다.
find / -name main.py
main.py 이름을 갖고 있는 파일들 목록이 떴고 거기서 보려고 하는 main.py로 들어가니 정상적으로 파일의 코드를 확인할 수 있었다.