aws lambda + python3.9+selenium (psyhon 이전 버전이 정지된 사람을 위함)

대상
  • aws lambda + python3.9 중 Layers에서 headlesschrome+selenium을 사용해 움직이지 못하는 씁쓸한 경험을 한 사람(127 실수로 우는 날)
  • 현재python 3.7로 이동하고 있는데 AWS에 언제 들킬까 봐 두려워하는 사람
  • ※ python의 쓰기 방법, aws lambda의 사용 방법 등에 대해서는 언급하지 않았음(참고 기사만 남김)
    오프닝 (상관없는 사람 건너뛰기)
    우연한 계기가 여기 기사입니다.
    이 기사를 봤을 때 Docker에 대해서는 잘 모르겠지만 Docker 이미지(OS+필요한 응용 프로그램과 실행 파일의 총집합)를 만들어 ECR에 올리면 Lambda에서 사용할 수 있습니다!그런 것 같아요.
    그때는 아직 오지 않았다
    어느 날 인터넷 서핑을 하다가 이런 상황을 만났어요.
    뇌 재생(docker를 사용하면 cherome+chromedriver를 사용한 후 필요한 라이브러리도 docker의 인상에 녹아들어 움직이면 움직이는 ZE!)
    머릿속 한구석에 있지만 선조께서 우리에게 성적을 내주셨다면 시도만 할 수 있었을 텐데, 그래서 시도한 결과를 여기까지 총결산하였다
    이 실천을 읽으면 넌 이렇게 되겠지
    그걸 해결할 수 있다면.
    설명을 잘 못하는 것보다 기사를 참고하세요!
    나는 다른 사람의 보도를 읽을 때 필요한 정보를 취사 선택하는 것이 매우 중요하다고 생각한다
    특히 이 기사를 쓸 때는 술을 마시면서 썼으니 참고하기 어려운 부분이 있다
    이렇게 되면 참고 기사보다 원자재 추적이 더 수월할 것 같아서 참고 기사를 먼저 올려놓을게요.
    Docker에서 시도할 수 있는 계기를 준 git serverless.아쉽게도 YML이 몰입을 안 했어요.
    Docker file만 복사해도 잘 될 것 같은 그런 말도 안 돼.
    그래도 사용하고 싶은python 버전이 있는 것 같아서 사용하고 싶은 버전을 선택하는 게 좋을 것 같아요.
    비용이 효과적이라면 arm64이지만 크롬을 제공하지 않아 크롬+크롬 드라이브로 자극을 주고 싶은 사람에게 적합할 수 있습니다(※ 시도해보지 않아 적절합니다)
    Docker로 프로세스를 중지하려면 어떻게 해야 합니까?구문을 사용합니다.
    읽으려고 했는데 Docker Desktop의 쓰레기통 아이콘이 멈춰서 전원 버튼을 길게 누르면 컴퓨터를 멈추는 바깥길이 됐어요.
    Doke rfile을 만들고 로컬 환경에서 만들면 그 다음엔 어떻게 하면 좋을까
    라고 말했을 때 흐름을 이해할 수 있는 기사,'아마존 ECR push'가 어려운 부분을 구해줬어요.
    그것을 옮겨라!
    그럼, 주제는 여기서부터 (맞아, 술 많이 마셨어, 마시면서 썼어)
    개발 환경
  • windows10
  • Office가 너무 낡아서 옮길 수 없음
  • aws-Cliver2 이후
  • ver1이면 명령이 움직이지 않기 때문에 조회한 기사에 버전을 쓰지 않은 것을 주의하세요. 명령이 없으면 정말 곤란합니다
  • Docker 4.2.x라면 요즘 엉망인 문제니까 업데이트해 주세요.
  • 어쨌든 지금 최신 버전이 좋은 것 같아요
  • VSCode
  • Power Shell
  • 필요
    결론
    지금까지 도면층에 제목이 없는 크롬을 넣으면aws 컨트롤러에서 파일을 수정할 수 없습니다
    로컬 파일을 사용하여 파일을 편집하고 Docker 이미지를 만들고 ECR에 로그인합니다.
    Lambda로 ECR을 차서 등록한 Docker의 인상 같은 형식이 됐어요.
    그렇긴 한데, 아마존 라인 2면 도저히 할 수 없으니까 어쩔 수 없지, (좋은 방법이 있다면 알려주세요)
    Docker file 준비
    베이스는 여기를 참고해서 다음 서류를 만들었어요.
    FROM public.ecr.aws/lambda/python@sha256:b8fb2628d7622a94b53c041d4c0cd14e001fbf97452c528fe9421fe7dae35aba as build
    RUN yum install -y unzip && \
        curl -Lo "/tmp/chromedriver.zip" "https://chromedriver.storage.googleapis.com/97.0.4692.71/chromedriver_linux64.zip" && \
        curl -Lo "/tmp/chrome-linux.zip" "https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F938549%2Fchrome-linux.zip?alt=media" && \
        unzip /tmp/chromedriver.zip -d /opt/ && \
        unzip /tmp/chrome-linux.zip -d /opt/
    
    FROM public.ecr.aws/lambda/python@sha256:b8fb2628d7622a94b53c041d4c0cd14e001fbf97452c528fe9421fe7dae35aba
    RUN yum install atk cups-libs gtk3 libXcomposite alsa-lib \
        libXcursor libXdamage libXext libXi libXrandr libXScrnSaver \
        libXtst pango at-spi2-atk libXt xorg-x11-server-Xvfb \
        xorg-x11-xauth dbus-glib dbus-glib-devel -y
    COPY app.py requirements.txt hogefuga.json ${LAMBDA_TASK_ROOT}/
    RUN pip install --requirement requirements.txt
    
    ENV HOGE=fuga
    
    COPY --from=build /opt/chrome-linux /opt/chrome
    COPY --from=build /opt/chromedriver /opt/
    CMD [ "app.lambda_handler" ]
    
    차이는 Requirements에 있다.txt로 환경을 구축하고 싶어서, 그 전에 LAMBDATASK_ROOT에 필요한 파일 복사
    과거에 설치된 lambda에서 파일을 디렉터리 바로 아래에 놓은 경우 LAMBDATASK_파일을 ROOT에 복사하지 않으면 실행할 수 없습니다.
    AWS에서 환경 변수를 설정한 경우 원활하게 읽을 수 없기 때문에 이동하기만 하면 ENV를 통해 피할 수 있다.다만, docker-compose 같은 더 좋은 수단이 있는 것 같다
    하지만 저는 어떻게 해야 좋을지 하나도 모르겠어요.
    원본 파일 수정
    두건 크롬을 사용할 때 지정한 옵션과 크롬이 사용하는 옵션이 다소 다르기 때문에 그 오차를 메워야 한다
    ※ 상기 내용을 참고하여 Docker file 제작 시 크롬과 크롬 드라이브의 경로를 수정하지 않으면 이동이 불가능하니 주의하십시오
    Docker file을 사용하여 로컬 환경에서 작업 확인
    docker build -t ${PJ名} .
    
    docker run -p 9000:8080 ${PJ名}
    
    시작 후 명령 프롬프트를 통해 다음 URL에 액세스합니다.
    로컬 환경에서 Lambda의 동작을 확인할 수 있습니다(-d 이후의 매개 변수는 설치에 의존하기 때문에 간단한 공을 찰 때의 예만 남깁니다)
    curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d "{}"
    
    성과를 ECR에 등록하다
    로컬 환경에서 작업을 확인한 후 ECR에 Docker 이미지를 등록해야 합니다.
    aws cli 최초 준비 방법을 잊어버려서 사랑을 끊는다.
    ECR 저장소를 작성하려면 다음 명령을 실행합니다.
    aws ecr create-repository --repository-name ${PJ名}
    
    실행이 완료되면registryId,repositorryUri는 이후의 작업에서 중요하게 변할 수 있으므로 복사한 후 남겨두십시오
    ECR Push를 사용하려면 Docker에 로그인해야 합니다.
    로그인 방법은 PowerShell에서 다음 명령을 사용합니다.
    aws --region ap-northeast-1 ecr get-login-password | docker login --password-stdin --username AWS ${registryId}.dkr.ecr.ap-northeast-1.amazonaws.com
    
    하는 일은 매우 간단하다. 파이프 앞의 지령으로 비밀번호를 얻고, "password-stdin"으로 파이프의 내용을 비밀번호로 처리하는데, 고려하지 않고 집행해도 기본적으로 상당히 괜찮다.
    다음push에서 어떤 그림을 선택할지 다음 명령으로 Docker 이미지 목록을 표시합니다
    docker images
    
    봐도 모르잖아!만약 그렇다면, Doker 실행 중, 아래 그림과 같다

    Docker Desktop을 통해서 실행 중인 IMAGE ID를 보는 것도 수단이라고 생각합니다.
    docker tag ${↑のID} ${repositoryUri}
    docker push ${repositoryUri}
    
    그리고 해시태그를 잘라내고 push를 해주면 돼요 (Giit 느낌)
    Lambda 지정 방법
    글을 쓰고 싶지만 그림이 다음과 같은 기사가 존재하기 때문에 사랑을 끊는다(바퀴를 발명하고 싶지 않다)
    차라리 여기 참고하면 셀레니움 말고는 거의 다 해결될 것 같아요.
    최후
    그럼 쓴 후에 참고 가치가 있나요?
    금북 산업이래요.
  • aws-cli 설치ver2
  • Docker 이미지를 ECR
  • 로 push
  • Docker 이미지로 람다 킥 만들기
  • 여기까지
    그러면 너도'그건 이제 해결될 수 있어, 닥터라면'이런 말을 하겠지(´·´)

    좋은 웹페이지 즐겨찾기