Lチカ開発ブログ

https://l-chika.com/の開発ブログ

CloudWatch Logsのログファイルを監視メモ

アプリケーション・サーバーのログをCloudWatchで集約するための設定時のメモ。

基本的には以下を参考にする。

dev.classmethod.jp

AccessDeniedExceptionが発生

この際、インスタンスに設定したロールにCloudWatchポリシーを設定するのを失念した為、ログの転送がされずに、以下のエラーがログ・ファイルに出力された。

$ sudo cat /var/log/awslogs.log
2017-01-16 05:30:07,690 - cwlogs.push.publisher - WARNING - 3947 - Thread-3 - Caught exception: An error occurred (AccessDeniedException) when calling the PutLogEvents operati

・・・中略・・・

ClientError: An error occurred (AccessDeniedException) when calling the PutLogEvents operation: User: arn:aws:sts::913687097810:assumed-role/ec2_hoge/i-8aa0ff05 is not author
ized to perform: logs:PutLogEvents on resource: arn:aws:logs:ap-northeast-1:913687097810:log-group:api_/var/log/syslog:log-stream:hoge.com
2017-01-16 05:30:07,693 - cwlogs.push.publisher - WARNING - 3947 - Thread-5 - Caught exception: An error occurred (AccessDeniedException) when calling the PutLogEvents operati

CloudWatchポリシーをアタッチ

インスタンスのロールに、CloudWatchポリシーをアタッチしてログエージェントを再起動でOK。

CloudWatchLogポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}
$ sudo service awslogs restart

関連本

AWSのオススメ本。

Amazon Web Services完全ソリューションガイド

Amazon Web Services完全ソリューションガイド

screenコマンドについて

screenコマンドのメモ。

screenの説明のサイトはすごいあるけど、sshでセッションが切れてからの復帰方法について書かれているサイトが中々見つからなかったのでメモ。

手順

sshでログインしてscreen 実行。

$ screen

で、このままタイムアウトした場合に、

再度sshでログインして、screen -r をするとThere is no screen to be resumed.となってscreenにアタッチできない

$ screen -ls
There is a screen on:
    14188.pts-0.hoge-dev    (01/11/2017 03:01:17 PM)    (Attached)
1 Socket in /var/run/screen/S-foo.

$ screen -r
There is a screen on:
    14188.pts-0.hoge-dev    (01/11/2017 03:01:16 PM)    (Attached)
There is no screen to be resumed.

上記のようになったら、以前のsshでのログインプロセスをkillする

$ ps aux|grep pts|grep sshd
foo 13786  0.0  0.1 107736  1888 ?        S    14:54   0:00 sshd: foo@pts/0
foo 14920  0.0  0.1 107736  1880 ?        S    15:22   0:00 sshd: foo@pts/2
foo 14987  0.0  0.0  10460   932 pts/2    S+   15:23   0:00 grep --color=auto sshd

$ kill 13786

killをしたら、再度アタッチ

$ screen -r

これで大丈夫。

[改訂第3版]Linuxコマンドポケットリファレンス

[改訂第3版]Linuxコマンドポケットリファレンス

screenコマンドの説明

dotnsf.blog.jp

qiita.com

qiita.com

アタッチの説明

bayashi.net

Webサイト構築の構造・骨格・表層

自分なりのWebサイト構築手順のまとめ。

IAシンキング Web制作者・担当者のためのIA思考術 を参考にフローを整理し、サイトのコンセプト以降からシステム設計の手前に至るまでの手順。

Webサービス構築のきっかけについては、 こちら で。

Webサイト構築に必要なプロセス

  1. 戦略
    • サイトの目的
    • ユーザーニーズ
  2. 要求
    • 機能仕様
    • コンテンツ要求
  3. 構造
  4. 骨格
    • 情報デザイン
      • インターフェースデザイン
      • ナビゲーションデザイン
  5. 表層
    • ビジュアルデザイン

1 -> 5 は時系列な順序であり、上から下に行く事で 抽象的->具体的 となる。

ここでは、「3. 構造」以降についてをまとめてみる。

※ 戦略・ 要求については、こちら で。

サイトストラクチャ

簡単に言うとサイトマップの事。動作手順や画面遷移のフローチャート等をつくる。

そしてこの段階で以下を決める

表現方法の統一

IAシンキングでは設計での表現方法の統一としているが、自分の場合にはサイトで利用する文言統一をこの段階で決定する

ハイレベルサイトストラクチャ

IAシンキングでは「サイトを俯瞰し要点をおさえる」とし、コアコンテンツを見つけ出し、それを書き出すとある。 で、その思考フレームワークとして以下を例示。

  1. トップページとその他コンテンツ群
  2. メインメニュー類
  3. サブカテゴリー
  4. 詳細コンテンツ群

で、自分の場合をザックリと以下に。

  1. ホーム:最新記事
  2. グローバル:部品、記事
  3. 部品一覧、記事検索
  4. 部品詳細

画面設計

IAシンキングでは「画面設計」とは、「ラベル設計」「サイトストラクチャ設計」「ナビゲーション設計」の集大成とある。 そして、次の3つを抑える必要がある 1. 画面内のエリア定義(レイアウト) 2. 画面前後のフロー(ナビゲーション) 3. 画面内の機能(アクション)

自分のサイトの特性から、あらかじめあるページタイプ、レイアウトパターンをイメージして細部をつめてみる。 自分の場合には、Free Responsive Mobile Website Templates Designs - w3layouts.com から近いカテゴリーを見つけて、設計をしてみる

ワイヤーフレーム

上記から近いイメージのページをみつけたら、 Wirify ブックマークレットを利用してワイヤーフレームを表示し、それを元に自分でCacooやKyenoteを利用してワイヤーフレームを作成する。

これ以降は?

ここまでがコンセプトを決めてからの画面イメージを決めるまでのざっとした概要。

ここからシステム設計(URL、DB、etc)に行程を進めていく。

IAシンキング Web制作者・担当者のためのIA思考術

IAシンキング Web制作者・担当者のためのIA思考術

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

w3layouts.com

www.wirify.com

cacoo.com

「Amazon Web Services完全ソリューションガイド」を読んで

Amazon Web Services完全ソリューションガイド を読んで

概要

実践的な導入事例からAWSでの以下の実現方法を解説

  • ネットワーク
  • Webサーバー
  • ファイルストレージ
  • データベース
  • 監視

どんな人向け

AWSの入門ではなく、サービス運用の各種ケーススタディからAWSによる解決策を解説。 とはいえ、各種サービスの前提を丁寧に解説しているので初・中級者向けの内容に感じた。

AWSを利用して、シンプルな構成でアプリケーションを開発したことがあり、スケールメリット・監視を意識した構築をしたい方には良書だと思う。

他のAWS書籍と比較して

どんな所が新しいか

最新の書籍ということだけあって、自分が知る限りでは、これまで出版されている中では以下の内容が新しかった。

  • Lambda、API Getewayでのサーバーレスアプリケーション
  • Application Load Balancer(ALB)の設定
  • RDSのAurora(内容的には少しだけど)
  • CloudTrail、AWS Configでの監視

どんな書籍と読み較べたか・一緒に読むと良い本

本書を読んで内容が近く、読んでおくとより知識が深まると感じた書籍。

Amazon Web Services完全ソリューションガイド

Amazon Web Services完全ソリューションガイド

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築

「成功者の告白」を読んで。ベンチャーで働くプログラマーも参考になった

成功者の告白 (講談社+α文庫) の感想

概要

 経営コンサルタントの著者が、これまでの自身の経験や出会った企業をベースに経営者が陥るパターンを物語にしたもの。

 物語は主人公がベンチャー企業を創業するところから始まり、その成長過程を描いている。

感想

 最初は V字回復の経営 2年で会社を変えられますか 企業変革ドラマ (日経ビジネス人文庫) のように経営者や起業家を対象にした本かと思った(これはこれで面白い)が、ベンチャーで働く人間であれば、誰でも共感できる内容。

出版は結構前の本だけど、内容は色褪せない普遍的なところがある。

 自分は複数のベンチャー企業で成長していく過程を経験しているが、本書にあるパターンが「あるある」として受け入れられ、 そのパターンがなぜ起こるのかというメカニズムが説明されている点に、ものすごく共感と学びを得た。

気づきをえたところ

  • 「成長カーブ」を利用した説明のわかりやすさ
  • 事業(仕事)と家庭との相関
  • 組織が拡大していくと現れるポジティブグループとネガティブグループ
  • 鬼の経営、仏の経営とマネジメント

 企業が成長していく過程にいるとどうしてる起きる諸問題に対して、経営者だけでなく、社員に対してもどう向き合っていけば良いかという示唆を得られる。

どんな人にオススメ

 IT系は特にベンチャー企業が多く、本書のような成長カーブを描いていえる企業が多く感じる。そうゆう意味では職種、メンバー・リーダーに係わらずIT系で働く全般にオススメ。

成功者の告白 (講談社+α文庫)

成功者の告白 (講談社+α文庫)

ActiveRecordでMySQLの正規表現(REGEXP)

ActiveRecordを利用して、MySQLのREGEXPを利用したい場合

class Book < ActiveRecord::Base
  scope :with_title_regexp, -> (pattern) { with_regexp(columns_hash['title'].name, pattern) }
  scope :with_regexp, -> (column, pattern) { where("`#{table_name}`.`#{column}` REGEXP ?", pattern) }
end

こうすると、以下のように正規表現を利用した検索ができるようになる

Book.with_title_regexp('^[a-d]') #=> SELECT * FROM `books` WHERE (`books`.`title` REGEXP '^[a-d]');

ActiveRecordのincludesでネストされた関連をロードする方法

ActiveRecordのincludesメソッドで関連テーブル(belongs_to, has_one, has_many)をキャッシュできる。 そこからさらに、関連テーブルの関連をキャッシュする方法

環境

前提

  • Bookがauthor,publisher,categories をもつ
  • Authorがaddress, affiliationをもつ

やりたいこと

Bookの関連をキャッシュ、かつAuthorの関連もキャッシュしたい

class Book < ApplicationRecord
  belongs_to :author
  has_one :publisher
  has_many: categories
end

class Author < ApplicationRecord
  has_one :address
  has_one :affiliation
end
Book.includes([{ author: [:address, :affiliation] }, :publisher, :categories]).where(id: ids)

ちなみに自分の開発のある機能で、このincludesを利用する前後でシステムのLatencyが半減した。 Railsで簡単にできるパフォーマンス改善。

参考

Railsで複数テーブルのjoins/includesとwhere検索 | EasyRamble