AWS Lambda를 통해 Selenium을 실행하는 API 생성
13743 단어 seleniumserverlesslambda
자체 Lambda 함수 생성, API 게이트웨이 기능 확인, Codepipeline 등 다양한 AWS 리소스를 실험했습니다. 몇 번의 시도 끝에 마침내 내 스크립트를 내부에서 실행할 수 있었습니다. 그런 다음 API를 통해 내 람다에 액세스하는 방법을 조사했습니다.
이것은 더 높은 생산성과 시간 절약으로 이어질 것입니다. 자동화된 테스트에는 인간의 상호 작용이 필요하지 않기 때문에 엔지니어는 중요한 작업에 집중할 수 있습니다. 이것은 누구나 실행할 수 있는 휴대용 테스트 장치와 같습니다. 빠른 테스트 실행을 통해 개발자는 즉시 테스트 보고서를 받을 수 있으므로 오류가 발생할 때마다 신속하게 대응합니다. 테스트 자동화를 통해 프로그램을 신속하게 업데이트하는 것이 더 쉬워집니다. 결과적으로 자동화된 테스트는 팀 응답성 향상, 사용자 경험 개선 및 고객 만족도 향상으로 이어집니다.
개요
Selenium Lambda 계층 생성
라이브러리를 python/lib/python3.6/site-packages/
에 배치하여 레이어에 포함합니다.
Selenium을 레이어 디렉토리에 다운로드
$ pip3.6 install -t selenium/python/lib/python3.6/site-packages selenium==3.8.0
$ cd selenium
$ zip -r python.zip python/
완료되면 람다 레이어를 생성한 후 zip 파일을 업로드합니다.
1. AWS 콘솔 Lambda/계층으로 이동합니다.
2. 레이어 만들기를 클릭합니다.
3. 레이어 구성에 다음을 입력합니다.
Name: selenium
Description: Selenium layer
Upload zip file created: python.zip
Compatible runtimes: Python 3.6
4. 만들기를 클릭합니다.
참고: 원하는 버전을 사용할 수 있습니다. 패키지를 업로드할 때 호환되는 런타임을 선택하기만 하면 됩니다.
Chromedriver Lambda 레이어 생성
Chrome 드라이버 다운로드
$ mkdir -p chromedriver
$ cd chromedriver
$ curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
$ unzip chromedriver.zip
$ rm chromedriver.zip
Chrome 바이너리 다운로드
$ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-41/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
$ unzip headless-chromium.zip
$ rm headless-chromium.zip
압축 드라이버 및 바이너리
$ ls
chromedriver headless-chromium
$ zip -r chromedriver.zip chromedriver headless-chromium
완료되면 람다 레이어를 생성한 후 zip 파일을 업로드합니다.
1. AWS 콘솔 Lambda/계층으로 이동합니다.
2. 레이어 만들기를 클릭합니다.
3. 레이어 구성에 다음을 입력합니다.
Name: chromedriver
Description: chrome driver and binary layer
Upload zip file created: chromedriver.zip
Compatible runtimes: Python 3.6
4. 만들기를 클릭합니다.
Lambda 함수 생성
함수 코드가 계층에 포함된 라이브러리에 액세스할 수 있도록 Lambda 런타임에는 '/opt' 디렉터리에 경로가 포함됩니다.
파일 구조
── /lambda/ # lambda function
├── /handler.py # source code of lambda function
└── /serverless.yaml # serverless config
암호
아래 코드를 /lambda/handler.py
에 복사합니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def main(event, context):
options = Options()
options.binary_location = '/opt/headless-chromium'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--single-process')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/opt/chromedriver',chrome_options=options)
driver.get('https://www.google.com/')
driver.close();
driver.quit();
response = {
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
return response
아래 코드를 /lambda/serverless.yaml
에 복사합니다.
service: selenium-lambda
provider:
name: aws
runtime: python3.6
region: ap-southeast-2
timeout: 900
functions:
main:
memorySize: 1000
handler: handler.main
events:
- http:
path: test
method: get
layers:
- arn:aws:lambda:ap-southeast-2:{}:layer:chromedriver:2
- arn:aws:lambda:ap-southeast-2:{}:layer:selenium:2
resources:
Resources:
ApiGatewayRestApi:
Properties:
BinaryMediaTypes:
- "*/*"
Lambda 함수 배포
/lambda
디렉토리로 이동
$ sls deploy
산출
Serverless: Stack update finished...
Service Information
service: selenium-lambda
stage: dev
region: ap-southeast-2
stack: selenium-lambda-dev
api keys:
None
endpoints:
GET - https://{name}.execute-api.ap-southeast-2.amazonaws.com/dev/test
functions:
main: selenium-lambda-dev-main
API에 액세스할 때 아래와 같은 응답을 받아야 합니다.
{
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
이 배포는 자동으로 Cloudformation 스택과 s3 버킷을 생성합니다.
이메일: [email protected]
Reference
이 문제에 관하여(AWS Lambda를 통해 Selenium을 실행하는 API 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ pip3.6 install -t selenium/python/lib/python3.6/site-packages selenium==3.8.0
$ cd selenium
$ zip -r python.zip python/
Name: selenium
Description: Selenium layer
Upload zip file created: python.zip
Compatible runtimes: Python 3.6
Chrome 드라이버 다운로드
$ mkdir -p chromedriver
$ cd chromedriver
$ curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
$ unzip chromedriver.zip
$ rm chromedriver.zip
Chrome 바이너리 다운로드
$ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-41/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
$ unzip headless-chromium.zip
$ rm headless-chromium.zip
압축 드라이버 및 바이너리
$ ls
chromedriver headless-chromium
$ zip -r chromedriver.zip chromedriver headless-chromium
완료되면 람다 레이어를 생성한 후 zip 파일을 업로드합니다.
1. AWS 콘솔 Lambda/계층으로 이동합니다.
2. 레이어 만들기를 클릭합니다.
3. 레이어 구성에 다음을 입력합니다.
Name: chromedriver
Description: chrome driver and binary layer
Upload zip file created: chromedriver.zip
Compatible runtimes: Python 3.6
4. 만들기를 클릭합니다.
Lambda 함수 생성
함수 코드가 계층에 포함된 라이브러리에 액세스할 수 있도록 Lambda 런타임에는 '/opt' 디렉터리에 경로가 포함됩니다.
파일 구조
── /lambda/ # lambda function
├── /handler.py # source code of lambda function
└── /serverless.yaml # serverless config
암호
아래 코드를 /lambda/handler.py
에 복사합니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def main(event, context):
options = Options()
options.binary_location = '/opt/headless-chromium'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--single-process')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/opt/chromedriver',chrome_options=options)
driver.get('https://www.google.com/')
driver.close();
driver.quit();
response = {
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
return response
아래 코드를 /lambda/serverless.yaml
에 복사합니다.
service: selenium-lambda
provider:
name: aws
runtime: python3.6
region: ap-southeast-2
timeout: 900
functions:
main:
memorySize: 1000
handler: handler.main
events:
- http:
path: test
method: get
layers:
- arn:aws:lambda:ap-southeast-2:{}:layer:chromedriver:2
- arn:aws:lambda:ap-southeast-2:{}:layer:selenium:2
resources:
Resources:
ApiGatewayRestApi:
Properties:
BinaryMediaTypes:
- "*/*"
Lambda 함수 배포
/lambda
디렉토리로 이동
$ sls deploy
산출
Serverless: Stack update finished...
Service Information
service: selenium-lambda
stage: dev
region: ap-southeast-2
stack: selenium-lambda-dev
api keys:
None
endpoints:
GET - https://{name}.execute-api.ap-southeast-2.amazonaws.com/dev/test
functions:
main: selenium-lambda-dev-main
API에 액세스할 때 아래와 같은 응답을 받아야 합니다.
{
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
이 배포는 자동으로 Cloudformation 스택과 s3 버킷을 생성합니다.
이메일: [email protected]
Reference
이 문제에 관하여(AWS Lambda를 통해 Selenium을 실행하는 API 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
── /lambda/ # lambda function
├── /handler.py # source code of lambda function
└── /serverless.yaml # serverless config
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def main(event, context):
options = Options()
options.binary_location = '/opt/headless-chromium'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--single-process')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/opt/chromedriver',chrome_options=options)
driver.get('https://www.google.com/')
driver.close();
driver.quit();
response = {
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
return response
service: selenium-lambda
provider:
name: aws
runtime: python3.6
region: ap-southeast-2
timeout: 900
functions:
main:
memorySize: 1000
handler: handler.main
events:
- http:
path: test
method: get
layers:
- arn:aws:lambda:ap-southeast-2:{}:layer:chromedriver:2
- arn:aws:lambda:ap-southeast-2:{}:layer:selenium:2
resources:
Resources:
ApiGatewayRestApi:
Properties:
BinaryMediaTypes:
- "*/*"
$ sls deploy
Serverless: Stack update finished...
Service Information
service: selenium-lambda
stage: dev
region: ap-southeast-2
stack: selenium-lambda-dev
api keys:
None
endpoints:
GET - https://{name}.execute-api.ap-southeast-2.amazonaws.com/dev/test
functions:
main: selenium-lambda-dev-main
{
"statusCode": 200,
"body": "Selenium Headless Chrome Initialized"
}
Reference
이 문제에 관하여(AWS Lambda를 통해 Selenium을 실행하는 API 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)