2017-03-07 3 views
9

크롬 리눅스에 이미 헤드리스 (headless) 모드 : https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md크롬 - AWS 람다를위한 헤드리스?

그것은 지금 카나리아에서만 작동하지만

AWS (λ)에 구글 크롬을 실행하는 모든 기회는 크롬 57에서 공식 오는?

+1

나는 똑같은 것을 궁금해했습니다. 나는 그것에 균열을 가지고 갔다. 그러나 그것은 아주 바로 아직 일하는 것처럼 보이지 않는다. 내 진행 상황은 다음과 같습니다. https://github.com/adieuadieu/thingamajigs/tree/master/serverless-chrome-pdf https://groups.google.com/a/chromium.org에서이 주제에 대한 주제도 있습니다./d/msg/headless-dev/qqbZVZ2IwEw/Wr9wmgb1EQAJ –

답변

10

예; 있을 수있다. Headless Chrome의 비 디버그 빌드를 컴파일

는 gzip으로 압축 할 때 ~ 125 MB, 그리고 바로 아래 44메가바이트의 바이너리를 얻을 수 있습니다. 즉, 기능 배포 패키지의 경우 압축되지 않은 250MB 크기와 50MB 크기의 limitation 내에 들어 맞습니다. (현재)가 필요 무슨

dev에/SHM /에서 공유 메모리를 사용하지 않고 컴파일 크롬을 강제하는 것입니다. headless-dev Google 그룹 here의 주제에 대한 스레드입니다. 여기

내가 AWS 람다에서 작동 헤드리스 크롬의 바이너리를 빌드하는 데 사용 한 단계입니다. 그들은 thisthis을 기반으로합니다.
  1. 는 AMZN-AMI-HVM-2016.03.3.x86_64-GP2 (미국 서쪽이 AMI-7172b611) 이름으로 지역 사회에 AMI를 사용하여 새 EC2 인스턴스를 생성합니다.
  2. 메모리의 최소 16 GB의 인스턴스 유형을 선택합니다. 컴파일 시간은 t2.xlarge에서 약 4-5 시간, t2.2xlarge에서 2-3ish, c4.4xlarge에서 약 45 분이 소요됩니다.
  3. 최소 30GB의 루트 볼륨 (디버그 빌드를 컴파일하려는 경우 40GB - 너무 커서 람다에 업로드 할 수 없음)을 지정하십시오.
  4. SSH를 새 인스턴스에 추가하십시오 실행 :
sudo printf "LANG=en_US.utf-8\nLC_ALL=en_US.utf-8" >> /etc/environment 
sudo yum install -y git redhat-lsb python bzip2 tar pkgconfig atk-devel alsa-lib-devel bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel freetype-devel gcc-c++ GConf2-devel glib2-devel glibc.i686 gperf glib2-devel gtk2-devel gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs nspr-devel nss-devel pam-devel pango-devel pciutils-devel pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff --enablerepo=epel 

이 존재하지 않는 일부 패키지에 대해 불평 할 것이다. 도대체 무엇이. 나는 그들을 들여다 보지 않았다. 헤드리스 쉘을 만드는 것을 저를 막을 수는 없었습니다. whiney 작은 무시하고 이동합니다. 다음 :

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 
echo "export PATH=$PATH:$HOME/depot_tools" >> ~/.bash_profile 
source ~/.bash_profile 
mkdir Chromium && cd Chromium 
fetch --no-history chromium 
cd src 

이 시점에서 Chrome 코드를 아주 조금 변경해야합니다. Linux에서는 기본적으로 /dev/shm에 tmpfs가 있다고 가정합니다. 람다 함수에 사용할 수있는 tmpfs가 없습니다. :-(

우리가 변경해야 할 파일이 src/base/files/file_util_posix.cc입니다. GetShmemTempDir() 등이 항상 OS에서 임시 디렉토리 (/tmp를) 반환 수정합니다.이 그냥 GetShmemTempDir() 기능에 전체 #if defined(OS_LINUX) 블록을 제거하는 것입니다 간단한 방법을. . 그 변화와

bool GetShmemTempDir(bool executable, FilePath* path) { 
#if defined(OS_LINUX) 
    bool use_dev_shm = true; 
    if (executable) { 
    static const bool s_dev_shm_executable = DetermineDevShmExecutable(); 
    use_dev_shm = s_dev_shm_executable; 
    } 

// cuz lambda 
use_dev_shm = false; // <-- add this. Yes it's pretty hack-y 

    if (use_dev_shm) { 
    *path = FilePath("/dev/shm"); 
    return true; 
    } 
#endif 
    return GetTempDir(path); 
} 

,이 빌드를 시작 일부는 다음 인수 및 (마지막 명령) 컴파일 설정 src 디렉토리에 다시 일을 따기 컴파일 시간 : 덜 급격한 변화는 use_dev_shmfalse에 하드 코딩하는 것입니다 과정.

mkdir -p out/Headless 
echo 'import("//build/args/headless.gn")' > out/Headless/args.gn 
echo 'is_debug = false' >> out/Headless/args.gn 
echo 'symbol_level = 0' >> out/Headless/args.gn 
echo 'is_component_build = false' >> out/Headless/args.gn 
echo 'remove_webcore_debug_symbols = true' >> out/Headless/args.gn 
echo 'enable_nacl = false' >> out/Headless/args.gn 
gn gen out/Headless 
ninja -C out/Headless headless_shell 

마지막으로 람다에서 실행해야하는 관련 파일의 타볼을 만듭니다./ tmp에 람다 함수의 유일한 쓰기 가능한 장소입니다

/path/to/headless_shell --disable-gpu --no-sandbox --remote-debugging-port=9222 --user-data-dir=/tmp/user-data --single-process --data-path=/tmp/data-path --homedir=/tmp --disk-cache-dir=/tmp/cache-dir 

때문에, 단지 크롬 말하는 플래그의 무리가 : 실행하여 활성화 된 원격 디버거 인터페이스 headless_shell 실행 람다 내

mkdir out/headless-chrome && cd out 
cp Headless/headless_shell Headless/libosmesa.so headless-chrome/ 
tar -zcvf chrome-headless-lambda-linux-x64.tar.gz headless-chrome/ 

, 어디에서 데이터를 덤프 할 것인가. 필요하지 않지만 Chrome을 행복하게 유지합니다. 또한 --disable-gpu 플래그로 libosmesa.so이 필요하지 않은 mentioned 이었음을 유의하십시오. 누락은 우리 패키지 zip에서 약 4MB를 면도합니다.

나는 시작하기 쉽도록하기 위해 this 프로젝트를 시작했습니다. here을 얻을 수있는 사전 제작 된 헤드리스 크롬 바이너리가 함께 제공됩니다.

관련 문제