AWS Lambda Python에서 S3에 요청에서 얻은 것을 업로드

8468 단어 람다파이썬pipAWS
dots. 여자부의 모쿠모쿠회에서 AWS Lambda를 사용해 크롤러를 만들려고 생각하고 무거운 허리를 올렸습니다.
허리, 정말 무거워요.

Lambda라고 하면 월 100만회 무료이므로, 1분간에 23회도 실행할 수 있다고 생각합니다.

Lambda로 만드는 크롤러/스크래핑 하지만 참고가 될 것 같아서, 처음은 이것을 보면서 S3에 request 로 취득한 것을 우선 업로드 하려고 생각했습니다.
언어는 물론 파이썬으로!
import boto3
import requests

BUCKET = 'test_requests'
s3 = boto3.client('s3')

def lambda_handler(event, context):
    key = 'corp.camon.tokyo'
    target_url = 'http://corp.camon.tokyo'
    target_html = requests.get(target_url).text
    s3.put_object(Bucket=BUCKET, Key=key, Body=target_html)

과연 AWS Lambda 낙승이다! 라고 생각하면서 Test 버튼을 누르면 ··
"errorMessage": "Unable to import module 'lambda_function'"
requests 를 읽을 수 없어서 에러\(^o^)/
AWS Lambda에서.

AWS Lambda Python을 lambda-uploader로 배포
※요 AWS CLI
pip install lambda-uploader

디렉토리를 만들고 방금 작성한 소스를 복사하여 lambda.json과 requirements.txt를 준비했습니다.

test_requests.py
import boto3
import requests

BUCKET = 'test_requests'
s3 = boto3.client('s3')

def lambda_handler(event, context):
    key = 'corp.camon.tokyo'
    target_url = 'http://corp.camon.tokyo'
    target_html = requests.get(target_url).text
    s3.put_object(Bucket=BUCKET, Key=key, Body=target_html)

lambda.json
  {
    "name": "test_requests",
    "description": "test requests",
    "region": "ap-northeast-1",
    "handler": "test_requests.lambda_handler",
    "role": "arn:aws:iam::????????????:role/lambda_s3_exec_role",
    "timeout": 300,
    "memory": 128
  }

requirements.txt
requests

구성은 이런 느낌입니다.
$ tree
.
├── lambda.json
├── requirements.txt
└── test_requests.py

0 directories, 3 files

준비가 되었으므로 명령 실행.
lambda-uploader
λ Building Package
λ Uploading Package
⁉️ Unexpected error. Please report this traceback.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/lambda_uploader/shell.py", line 151, in main
    _execute(args)
  File "/usr/local/lib/python2.7/site-packages/lambda_uploader/shell.py", line 82, in _execute
    upldr.upload(pkg)
  File "/usr/local/lib/python2.7/site-packages/lambda_uploader/uploader.py", line 112, in upload
    self.version = self.upload_new(pkg)
  File "/usr/local/lib/python2.7/site-packages/lambda_uploader/uploader.py", line 89, in upload_new
    Publish=self._config.publish,
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 301, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 398, in _make_api_call
    raise ClientError(parsed_response, operation_name)
ClientError: An error occurred (AccessDeniedException) when calling the CreateFunction operation: User: arn:aws:iam::????????????:user/WakanaYoshizawa is not authorized to perform: lambda:CreateFunction

권한이 없으면



AWSLambdaFullAccess 추가 및 실행

오류 · ·

여기서 dots.여자부의 모쿠모쿠회가 막판에 임박해 맥주가 지급되었기 때문에 닦아 마셨습니다.
맥주 절반 정도 열고, 좋은 감기에 취해 왔기 때문에 야쿠쿠소로 실행하면,,,
$ lambda-uploader
λ Building Package
λ Uploading Package
λ Fin

정책의 첨부 반영에 시간이 걸린 것 같았습니다.
여유있게 개발하는 것이 중요하네요.

Lambda에서 여러가지 할 것 같기 때문에 더 여러가지 만나 보겠습니다\(^o^)/

좋은 웹페이지 즐겨찾기