🤖
RubyとLambdaとsamを使ってscrapingをする
タイトルのとおりです。
概要
- 簡単なscrapingとapiを作りたい
Dependencies
Ruby: 2.7
SAM CLI: 1.56.1
Docker: 20.10.17
ローカル環境構築
$ sam init --runtime ruby2.7 --name foo_scraper
$ cd foo_scraper
build
code変更後は常にbuildを走らせる必要がある
$ sam build --use-container
テスト実行
$ sam local invoke HelloWorldFunction --event events/event.json
Init Duration: 0.77 ms Duration: 314.30 ms Billed Duration: 315 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode":200,"body":"{\"message\":\"Hello World!\"}"}
コード実装
require "bundler/setup"
Bundler.require
require 'open-uri'
def lambda_handler(event:, context:)
url='https://www.yahoo.co.jp/'
html = open(url) do |f|
f.read
end
nokogiri = Nokogiri::HTML.parse(html, nil, nil)
{
"isBase64Encoded": true,
"statusCode": 200,
"headers": { "headerName": "headerValue" },
"body": {
"pageTitle": nogogiri.title,
}.to_json
}
end
timeoutをすぐしてしまうので10秒に延長
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 10
Tracing: Active
Api:
TracingEnabled: True
デプロイ
$ sam package --output-template-file output.yaml --s3-bucket foo_scraper
$ sam deploy --template-file output.yaml --stack-name FooScraper --capabilities CAPABILITY_IAM
Discussion