ITの隊長のブログ

ITの隊長のブログです。Pythonを使って仕事しています。最近は機械学習をさわりはじめたお(^ω^ = ^ω^)

雑ログ CROSを全く理解できていない

一応成果をおいておく

github.com

2019年2月1~2週目の振り返り

先週の書いてない。

体調管理

  • 尿酸値やばい
  • 運動しなきゃなんだけど全くしていない
    • 多分いろんな意味でやばい

技術

数学

  • 特にしていない

個人開発

  • 何もしていない

  • 「イシューからはじめよ」を読み始めた

趣味

映画

  • みていない

ゲーム

  • やっておらぬ

仕事

  • バタバタながら成果は出はじめてきている
  • が、まだまだ手が遅い気がするので意識すべし

家庭

  • 洗濯機購入した。約30万 12ヶ月分割... まぁ借金してたころより全然まし

雑感

  • 個人開発と数学全然進めていないのでなんとか
  • ダイエット。というか、健康がやばいのでやらないといけないけど体動かぬ

先週金、土でLTしてきた話

2/1 金曜日

re-build.connpass.com

株式会社サイダスx株式会社リビルド主催の勉強会。AWSでサーバーレスなクローラーやWebアプリ作ってみたいなーと思い、2週間前ぐらいにポチった。

で、発表してきたのはこれ

speakerdeck.com

間に合わなかった。クローラー頑張ったけど、それってサーバサイド?とかでぐるぐるしてWebアプリを短時間で作ろうとしたけどむりぽ

僕の反省をざっと書くと

  • デモを半端でいいので完成させること
    • 見た目よくないと見せれない... -> デザイン問題
  • チャンレンジした詳細をもう少し足すこと
    • 困ったこと -> 解決した話するともっと面白いのでは

イベント内容の感想をざっと書くと

  • ビールおいしかった
  • サイダスさんの会場広くて良い。うちにもほしい
  • 那覇でのイベント参加するの3〜4年前のCAアドバンスさん以来だったのでなんか久々だった
  • 那覇のエンジニアさんたちとわいわいできた

ので、よかった

まとめられてた

togetter.com

2/2 土曜日

ginowan.connpass.com

この日は実は家でごろ寝する予定だった(懇親会だけ参加しようかなーという気持ちだった)

ある人から突然のDMで手伝うことになって、せっかくだからLTしてこようかなという経緯に。

内容はこれみたらわかるはず

speakerdeck.com

イベント内容の感想をざっと書くと

  • ギークハウスの300円飲み放題安い。お酒美味しい
  • ギークな人たちの話、本当に刺激になった。なんか久々に燃えたぎった
  • 些細なことでも問題を解決しようとする姿勢、本当に勉強になる
  • 懇親会
    • 7年前に自作サーバ真似してたpixivさんのお話きけた。主に人事の話、参考になる
    • 顔なじみの先輩より、いろいろお話を聞いてもらう。悩みあった俺。引き続き頑張る
      • エンジニアとしての将来像少しずつ描きながら今を最高にしていこうと思った

あとはこちら

togetter.com

雑感

  • 2ヶ月の目標で外で発表2回やるを達成したのでインプットに戻る
  • 次やるならサーバレスで最強映画クローラーやらYOLOをサーバサイドで動かしてみるとかできたらいいな

雑ログ lambdaと他でピタゴラスイッチ

www.aipacommander.com www.aipacommander.com

続き。

今日(昨日だけど)は、lambdaからlambda叩いたり、s3のイベントからlambda叩いたり、lambdaからsqsにqueueを追加したりなどした。

やったこと箇条書きする。

結構ハマったけどピタゴラできたのでよかった.

悩みと次やりたいこと

  • sqsに投げたあと一旦ピタゴラとしては終了し、queueをcloudwatchでevent発火してlambdaでポーリングしようとしてる
    • 今回クローラーなので、sleepとか挟みたいのと、fifoなので、queueに追加したあとにlambdaを叩くeventが発火できない
    • なので、一定間隔でqueueにmessageが登録されていないか確認するようにしようとしているが、定期実行なので無駄を生んでいてなんかいや
  • lambdaからDB接続
    • なんかアンチパターンらしいのでRDS使わないが、リアルタイムに追加しなくてもいいと思うので、s3に一度収集した情報をjsonかなんかで保存しておき、あとからs3の中身みて、データが存在しているのであれば、ec2起動してrdsに登録するとかの処理でいいと思った
  • lambda、lambda layersを使えば、ある程度共通化できるので、lambda関数自体は軽くなるのでそれは良い
    • ただ、ピタゴラのつながりみればわかるが、バンバン管理する関数が増えていくので管理がめんどくさい
    • 例えば、5つの関数を用意して、共通処理をlamda layersで登録した。けど、4つの関数を修正とlayersも修正すると、それぞれに紐付いている関数のlayersのバージョンの紐づけを修正し直さないといけないし、ブラウザでポチポチするのが本当めんどくさい
    • なんかそういうフレームワークないんかな
  • そうだ。今回のピタゴラで集めた情報を使って、s3とlambdaとvue.jsでフロントを用意する予定なんだが、結局のところlambdaとRDS問題があるので、どうやってデータを取得してフロントにわたすものを用意しようか
    • やっぱりdynamodbがいいんかな?????
  • 来週のLTまでに間に合わせたい気持ちだがこれは大変そうだ

雑ログ lambda layersで遊ぶ

lambda layersを触る.

qiita.com

ここを参考にした。

ディレクトリ構成

- lambda
    - lambda_layers
        - python
            - cw_logging.py
    - lambda_test
        - lambda_function.py

lambda layersの作成

$ pwd
~/lambda/

$ cd lambda_layers/
$ zip -r python.zip python/

用意したzipファイルはqiitaの記事のようにアップロードする.

呼び出し元(lambda関数)

from cw_logging import logging


def lambda_handler(event, context):
    logging('INFO', 'LambdaLayerTest', 'This is test.')
    # ...

これでできた。

ここまで来るのに5回ミスったけど、その都度上げ直すのめんどくさい。

次は、lambda layers側で、外部ライブラリが必要になるケースでやる。

import datetime
import boto3


S3 = boto3.resource('s3')


def logging(error_lv, lambda_name, error_msg):
    """Lambdaログ出力(CloudWatch Logs)関数."""
    logging_date_str =(datetime.datetime.now()).strftime('%Y/%m/%d %H:%M:%S')
    log_str = '{} [{}] {} {}'.format(logging_date_str, error_lv, lambda_name, error_msg)

    # CloudWatch Logsに出力
    print(log_str)

    # ログ文字列を返却
    return log_str


def save_s3(bucket_name, html, file_name):
    obj = S3.Object(bucket_name, file_name)
    obj.put(Body=html)

これにした.

呼び出し元(lambda関数)

from cw_logging import logging, save_s3


def lambda_handler(event, context):
    logging('INFO', 'LambdaLayerTest', 'This is test.')
    save_s3('aipa.test.log', 'text', 'test.txt')
    # ...

保存できた(°ω°)

あれー? 昨日はできなかったような...?

boto3は実はインストール済みかもしれない。

beautifulsoupとかに変更してみる。

lambda layers側のimport文を修正する。

from bs4 import BeautifulSoup
import urllib3
from urllib3.exceptions import RequestError, InsecureRequestWarning

# ...

Unable to import module 'lambda_function': No module named 'bs4'

ふむ。予想通り。

ディレクトリ構成をちょっと修正する.

$ mkdir -p lib/python3.6/site-packages/
- lambda
    - lambda_layers
        - python
            - cw_logging.py
            - lib/python3.6/site-packages/
    - lambda_test
        - lambda_function.py

こうする。

ほんで、~/lambda/lambda_layers/requirements.txtを用意する。

中身はこうした。

requests
future
boto3
beautifulsoup4==4.6.0

落とす

$ pip install -r requirements.txt --target python/lib/python3.6/site-packages/

圧縮して再アップ.

$ zip -r python.zip python/

こうするとうまくいきました。やったね!!!