-
概要 仕事をしていると、歴史のあるシェルスクリプトがEC2で動いていたりすることがある。 そういったスクリプトをなにかしらのスクリプト言語で書き換えるのもやぶさかではないのだが、数が多いと諦めの気持ちが湧き出てくる。 そこで、シェルスクリプトのままでもLambdaにデプロイしてバッチ的に動かして、サクッと移行できたりしないかなという思いが出てきた。 そこで、Lambdaのデプロイツールにlambrollを検証してみることにした。 インストール 手元がMacOSなのでbrewでインストール。 $ brew install fujiwara/tap/lambroll $ lambroll versions 2023/01/18 23:14:53 [info] lambroll v0.14.1 with function.json 2023/01/18 23:14:53 [error] failed to load function: open function.json: no such file or directory 使ってみる とりあえす空ディレクトリで下記を実行する $ lambroll init --function-name=testLambrollFunction --profile XXXXX 2023/01/18 23:22:05 [info] lambroll v0.14.1 with function.json 2023/01/18 23:22:05 [info] function testLambrollFunction is not found 2023/01/18 23:22:06 [info] creating .lambdaignore 2023/01/18 23:22:06 [info] creating function.json 2023/01/18 23:22:06 [info] completed 出来上がったJSONを見ると、デフォルトでは nodejs14.Created
Wed, 18 Jan 2023 16:16:32 +0000 -
事の始まり 最近、趣味でサイトのスクレイピングとか簡単なものを作ったりしている。 もちろん対象サイトに負荷をかけないようにするのはそうなんだけど、単純にBANされないようにする方法を考えた時に、UserAgentをちゃんと定義したりする以外に、やはりIPアドレスの分散は課題である。 そこで、Lambdaでスクレイピングした場合に、接続元のIPアドレスはどの程度固定になり、どの程度分散されるのか調査してみました。 IPアドレスチェック用のLambda まず、単純にIPアドレスが返ってくる簡単なLambdaを作成した。 これでCloudWatchLogsにログが記録されるため、IPアドレスがわかるようになる。 import json import requests from datetime import datetime, timedelta, timezone def lambda_handler(event, context): res = requests.get('https://ifconfig.me') JST = timezone(timedelta(hours=+9), 'JST') now = datetime.now(JST) time = now.strftime("%Y%m%d %H:%M:%S") print(time) print(res.text) 調査方法 そもそも、LambdaのIPアドレスは固定じゃないというのはどこかで記事を見かけていて、なんならVPCに配置してEIPつけるみたいな記事を見たことあったため、一旦手動で時間を空けて実行してみた。 その結果、Lambdaの実行時間の最大である15分経過すると、どうやらLambdaが破棄されるのか、IPアドレスが変わるタイミングがわかった。 ※二分探索により、最初30分、5分、20分、10分、15分といった感覚でゆっくり漫画見ながら調べた。 あとは、15分おきに実行するようにCloudWatchRuleで設定して約1日実行してみた。 CloudWatch Logsのダウンロード 設置した翌日、下記コマンドでログをダウンロード。 awslogs get /aws/lambda/ifconfig -s '24 hours ago' --profile プロファイル名 > ~/Downloads/awslogs.txt 行のカウント エディタで適当に不要な行を削除して行をカウント。 4(15min) x 24 = 96IPアドレスなので合っていることを確認。 wc -l ~/Downloads/awslogs.txt 96 /Users/DAREKAUSER/Downloads/awslogs.txt ユニークチェック IPアドレスがユニークであるかチェックTOP10。Created
Wed, 25 Dec 2019 14:01:33 +0000 -
Lambdaやりたいと言いながら放置していたので、このGWという連休でLambdaの簡単なスクリプトに手を付けよう!と意気込み、連休最終日(明日も休みにしちゃったけど)に作った。 モチベーション 単純にtodoistがAPIを公開しており、APIのリファレンスが比較的わかりやすかったことがある。 todoist api reference あと、Slackのtodoist appで特定プロジェクトのタスクの一覧表示とかできなかったのが大きい。(調べてみたけどわからなかった、、) 本当はLambdaでSlack botまで作ろうかと思ったけど、まずは通知するところからやることにした。 コード pythonを選んだ理由は,最近pythonのboto3で色々スクリプトを書いていたから。 # coding: utf-8 import json import requests import os import sys from todoist.api import TodoistAPI SLACK_CHANNEL = os.environ['SLACK_CHANNEL'] SLACK_POSTURL = os.environ['SLACK_POSTURL'] TDIAPI = TodoistAPI(os.environ['TODOISTAPITOKEN'], cache=False) TDIAPI.sync() name = os.environ['TODOIST_PJT'] def tasklist(name): list = TDIAPI.state['projects'] for projects_id in list: if projects_id['name'] == name: tasks_project_id = projects_id['id'] break try: tasks_project_id except NameError: print("プロジェクト名が正しくありません。プロジェクト名を正しく入力してください。") sys.exit() items = TDIAPI.state['items'] slackmessage = [] for name in items: if name['checked'] == 0 and name['project_id'] == tasks_project_id: taskcontent = '- ' + name['content'] slackmessage.Created
Mon, 06 May 2019 14:41:01 +0000