🤖

RubyとLambdaとsamを使ってscrapingをする

2022/09/23に公開

タイトルのとおりです。

概要

  • 簡単な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