web-technical-blog

web開発に関する技術メモ

Lambdaの呼び出し元について

LambdaFunctionには2つの呼び出し元がある

  1. ストリームベース
  2. ストリームベースではない
1.ストリームベース
2.上記以外はストリームベースではない呼び出し

ストリームベースではないイベントソースからの呼び出しは2種類がある

  • 同期呼び出し
    • AWS CLIや各SDKにてLambda関数をInvokeした場合(デフォルト動作)
    • API Gateway(デフォルト動作)※参考AWS Lambda 関数の API GatewayAPI を作成する
    • Cognito
    • Alexa
    • Lex
  • 非同期呼び出し(非同期のLambdaFunctionでエラーが発生した場合、自動的に間隔をあけて2回再試行される)
    • AWS CLIや各SDKにてInvocationType=EventでInvokeした場合
    • API Gateway(ヘッダでEvent指定時)※参考AWS Lambda 関数の API GatewayAPI を作成する
    • AWS IoT
    • CloudWatch Events(スケージュル含む全てのトリガー)
    • CloudWatch Logs
    • CodeCommit
    • S3
    • SNS
    • SES
    • CloudWawtch Logs
    • KinesisFirehose
    • CloudFormation(Lambdaを利用したカスタムリソース)
    • CodeCommit
    • AWS Config

www.h4a.jp dev.classmethod.jp

Gitのコミットメッセージの書き方

Gitへコミットする際にあまり意識しなかったので勉強になった。

qiita.com

▼基本規則
1行目:変更内容の要約(タイトル、概要)
2行目 :空行
3行目以降:変更した理由(内容、詳細)
▼スリーライン派(コミットベース派)
[fix]削除フラグが更新されない不具合の修正

refs #110 更新SQLの対象カラムに削除フラグが含まれていなかったため追加しました。
▼ワンライン派(チケット駆動派)
[fix]refs #110 削除フラグが更新されない不具合の修正

更新SQLの対象カラムに削除フラグが含まれていなかったため追加しました。

コミット種別(通常版)

  • fix:バグ修正
  • hotfix:クリティカルなバグ修正
  • add:新規(ファイル)機能追加
  • update:機能修正(バグではない)
  • change:仕様変更
  • clean:整理(リファクタリング等)
  • disable:無効化(コメントアウト等)
  • remove:削除(ファイル)
  • upgrade:バージョンアップ
  • revert:変更取り消し

コミット種別(ライト版)

  • fix:バグ修正
  • add:新規(ファイル)機能追加
  • update:機能修正(バグではない)
  • remove:削除(ファイル)

DeNAのデータ分析基盤

logmi.jp

  • Hadoopクラスタの運用は大変そうです。。
  • アナリスト側にYAML定義を理解してもらうのが大変なのは分かる。。

App -> LogGateway

  • LogGatewayで認証したサービスのログを受け取る
    • Log
      • Fluentd
    • DB SnapShot
      • オンプレの場合はApache Sqoopというもので収集

Hadoop

  • データレイクとして使用
    • HiveQL使用者のためにHue提供していたり
  • サービスごとに、分けて異なるHDFSパスへ

HDFS -> Vertica or BIgQuery

  • 内製のバルクロードツール「Medjed」を使用
    • EmbulkとEmbulkを管理するWebアプリケーション
    • アナリスト職やビジネス職の方にとっては、YAMLを理解していただくというハードルがある
    • ハードルを解消するために、Googleスプレッドシートに定義してもらうとYAMLが実行時に生成されるというような仕組みを持っている
    • Googleスプレッドシートベースではあるがスキーマ管理が行えるようになる

ダッシュボード

  • 柔軟な対応ができる内製ダッシュボード「Argus」を使用
  • クエリエンジン
  • 細かな要望に素早く対応できる
  • 社内に合わせた細かな権限管理を行える
  • ActiveDirectoryのグループに合わせた管理・編集・閲覧それぞれの権限を付与できる
  • 権限管理やグルーピングなどのかゆいところに手が届くのがポイント

ジョブスケジューラー

  • ジョブスケジューラーはJenkinsを使用
    • アナリストの方が慣れていたり、使いやすいというのが使い続けている理由
    • いろんなことができてしまう
    • 権限管理もプラグインを入れるとかなり柔軟に対応できる
  • Jenkinsで完結しない業務のために、LinuxのWorkstationも提供している
    • 普通のLinuxサーバーで、アナリストの方がSSHでログインして使用している

Software Design(7月号)のDevOpsの掲載

「DevOps」とは

  • Dev(Development:開発)
  • Ops(Operation:運用/保守) をくっつけた造語

開発担当と運用/保守担当が密に情報共有し、共通の目的に向けて互いの理解を深め

  • リリースサイクルの短縮
  • システムの安定稼働
  • ひいてはビジネスへの貢献をするために継続的に取り組むこと を言う

2009年にO'Reilly主催のVelocityというイベントで発表された資料から「DevOps」という言葉が生まれた

6つの重要なポイント

(1)インフラストラクチャ構築の自動化 従来は手作業で行っていたインフラストラクチャー構築や変更作業をコードで定義し、自動化すること Dockerfile,Terraform,Ansible

(2)バージョン管理 開発者と運用者で、共通のバージョン管理システムを使用する Git,Subversion

(3)ビルドやデプロイの自動化 繰り返し行う定型作業は、手順書など使い手動で実行するのではなく、自動化する

(4)フィーチャー(機能)フラグ運用 フィーチャートグルとも言う 開発した新しい機能にフラグをつけておき、一部のユーザーにだけ試してほしいときに活用する

(5)指標(メトリクス)の共有と評価 ダッシュボードなどで、指標の結果をプロジェクトの各ステークホルダと共有し、評価することが必要

(6)通知ボット ビルドやデプロイ、新しいバージョン、バグ報告など共有するために、ボットを用いて通知を自動化する

組織の文化を作り上げるための4つの心がまえがを唱えている

(1)互いに尊敬する

(2)互いに信頼する

(3)互いに仕事を任せ合う

(4)相手を非難しない

Twitterのタイムラインのスクレイピング

  • はじめに

  • TwitterAPIの仕様

    • TwitterAPIは1週間より前のツイートは取得できない仕様
  • スクレイピングについて

    • スクレイピングによって、収集されたコンテンツを他人に譲渡する(ネット配信なども含む)行為は、著作権法上、違反とされています。
    • スクレイピングによって、コンテンツ情報を取得した事業者は、集めたコンテンツを自社で分析して再構成し、その結果を自社の顧客などに提供する必要があります。
    • 情報解析目的以外で、スクレイピングによって、他者のコンテンツを情報収集することは認められていませんので、注意が必要です。
  • 注意点

    • useragent_windows.datファイルのUA(ユーザーエージェント)は新しいものに書き換える必要あり
    • 変更した場合でもエラーする可能性はある
    • crawler.py
      • 170行目付近

        • windows環境だとJSONのデコード処理でエラーするので

          with open(crawler.output_file, "at", encoding='utf-8') as f: ← 書き換える(utf-8)にする

      • 234行目付近

        • csvファイルを書き出し後に継続して処理したい場合は

          sys.exit(1)だと処理が終了してしまうので、returnに変更する

  • pipでパッケージのインストール

pip install twitterpastcrawler  # twitterページをクロールするライブラリ
pip install requests            # HTTPライブラリ
pip install beautifulsoup4      # スクレイピング処理に必要
pip install wordcloud           # タグクラウドを生成できるライブラリ
pip install pillow              # 画像処理ライブラリ
pip install matplotlib          # グラフ描画ライブラリ
pip install janome              # 内部で辞書を持っているので、Mecabをインストールする必要がない

Lambdaの開発をローカル環境でする方法

mac環境でlambdaをローカル環境で開発する方法

  • python-lambda-local
  • event.json
    • lambdaでテストする際のテスト呼び出しコードを記入する
  • AWSサービスを使用する場合は、.aws/credentialsが必要
    • --profile=xxxというような呼び出しはできない
  • 以下のURLに書いてある「requirements.txt」は特に設定は必要ない https://kakakakakku.hatenablog.com/entry/2017/08/02/085839

  • windows環境ではSIGALRMをCallできないとかでエラーするので無理

signal.signal(signal.SIGALRM, signal_handler)
AttributeError: module 'signal' has no attribute 'SIGALRM'

https://qiita.com/tanj/items/70c57ed9ca742884c61e

CloudWatchでLambdaのエラー内容を確認するコマンド

Lambdaでエラーした内容は以下のコマンドで確認できる

### awslogsコマンド
awslogs get /aws/lambda/lambda-function -S --timestamp --start=1d --profile=xxx -f=ERROR