11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS Lambda (本当に)ビール片手にもくもく会

Last updated at Posted at 2016-07-29
  • AWS Lambda【ビール片手に】体験するもくもく会
  • http://d-cube.connpass.com/event/36632/
  • こちらの勉強会に参加しました。
  • 聞き間違いや勘違いがあったらごめんなさい。
  • 勧められなかった部分については補足してあります。

タイムライン

  1. 環境準備
  2. chalice を使う
  3. APIGateway + Lambda で Hello,world on ブラウザ
  4. 事例紹介など
  5. 雑談

1. 環境準備

前提

AWSアカウントがあること

  • AWSCLI インストール
  • chalice インストール
  • IAM で User 作成
  • User に権限アタッチ

chaliceとは

  • Python Serverless Microframework for AWS
  • Web API のフレームワーク
  • AWS純正品
  • 現在 Preview 版
  • Serverless Framework に似てる
  • 発音は恐らくカリス(=杯)、だけど勉強会ではチャリス、Bizreachではチョリース
  • https://github.com/awslabs/chalice

Lambda + API Gateway で簡単な RESTful API を作れるが、やっぱり細かいところで準備が必要。
これをサポートしてくれる。

AWSCLI インストール

$ brew install awscli
$ aws

最後反応あればOK

AWSCLI に Access Key/Secret Access Key の登録

$ aws configure
$ AWS Access Key ID [None]: <Access Key>
$ AWS Secret Access Key [None]: <Secret Access Key>
$ Default region name [None]: ap-northeast-1
$ Default output format [None]: <empty>

インタラクティブモードになるので、順に入れていく.

chalice インストール

python のパッケージ管理ソフト pip を使ってインストールします。

python インストール

Mac の場合

デフォルトで Python が入っているので、easy_install pip で pip だけをインストールでもいいが
管理しやすいように homebrew で入れなおす

$ which python
/usr/bin/python
$ brew install python
〜略〜
$ which python
/usr/local/bin/python
$ pip
〜略〜
$ pip install --upgrade setuptools
$ pip install --upgrade pip
  • which の結果が変化しない場合は .bash_profile 等で PATH の優先順位をきちんと定義

pip でインストール

$ sudo pip install chalice

2. chalice を使う

コマンドは全部で5個

$ chalice --help
  • deploy
  • gen-policy
  • local
  • logs
  • new-project

chalice でプロジェクト作成

$ chalice new-project demo
$ tree -a

すこし覗いてみる

app.py

$ less app.py

URLルーティングとアクションがここでまとめてプログラムする

requirements.txt

Flask で使うライブラリのバージョンを書き込むことで固定できる.

.chalice/config.json

$ less .chalice/config.json

{
"app_name": "demo",
"stage": "dev"
}

まずはデフォルトでデプロイ

$ cd demo
$ chalice deploy

これだけで Lambda, API Gateway, IAM Policy までも自動で行ってくれる

デプロイされたものはオープンになっている注意

下記エラーが出る場合

Initial creation of lambda function.
Updating IAM policy.
Creating deployment package.
Traceback (most recent call last):
〜略〜
OSError: [Errno 2] No such file or directory

原因は virtualenv が入っていないため.

$ pip install virtualenv

パラメータ付きGET

次コードを追加する

app.py
@app.route('/{name}/hello')
def hello(name):
  return {'hello': name}

再度デプロイしてアクセスする

$ chalice deploy
$ curl <URL>

ログを出力する

次コードに変更する

app.py
def hello(name):
  print('return hello to {}'.format(name))
  return {'hello': name}

再度デプロイしてアクセスする

$ chalice deploy
$ curl <URL>

ログを見る

$ chalice logs

出ているログは Lambda の CloudWatch になる.

3. API Gateway + Lambda で Hello,world on ブラウザ

API Gateway

  • HTTP の Endpoint(http://---) を提供する
  • GET/POST/PUT といった HTTP メソッドに対応
  • HTTP でリクエストを受け取り次へ渡す.ここでは次とは Lambda を指す.

Lambda

イベントベース
命令を受けてから起動する
起動していた時間分を課金
タイムアウトになって課金対象
Java, Node.js, Python に対応

4. 事例紹介など

事例 1

  • よくティザーサイトを作って欲しいと言われる.
  • LP にメアドなどを登録できるフォームが必要なことがある.
  • フォームはGoogle Spretsheet に羅列する必要がある.
  • そのためにサーバ用意するのも面倒なので以下のような構成で実現している.

Route 53 -> CloudFront -> S3 -> Api Gateway -> Lambda -> Google Apps Script

事例 2

サイトのログを Lambda で集計.

  • ログにはアクセス頻度に幅がある
  • アクセスがないときにログにお金を使いたくない
  • アクセスがあるときに Lambda ならお金はかかるが、オートスケールしてくれる

構成

CloudTrail -> CloudWatch -> Lambda -> Elasticsearch Service -> Kibana or Elasticsearch

5. 雑談

  • Lambda はイベントにもフック可能
  • S3 にファイルが配置/削除された
  • S3 に何かが入ったら呼ばれ、ファイル名がこれだったら Slack に通知など
  • S3 に CSV が入ったら Lambda で DB に入れている
  • 高額請求が怖いなら, Lamdba で 対象 Lambda をコロスケ可能
  • During アラームを設定
  • そのアラームを受け取ったら
  • Lamdba で対象の Lamdba をコロスケ
  • JAWS にはかなり厳しいイベントの日もある
  • JAWS のイベント資料は Qiita に上がっている
  • 以前別のところでリクルートさんが登壇したときに、AWS Lambda 使った理由を聞いたら「インフラチームいなくてもできるから」
  • API 管理は別ファイルで管理
  • 開発者を監視
  • Config に構成変更が記録される
  • いじってほしくないファイルに変更があると、 Config から検知して Lambda で Slack に通知といったことができる
  • 同様に作ってほしくない EC2 が作成されると Lambda が EC2 をコロスケすることもできる
  • EC2 は完全に作成が成功しないと課金は発生しない.
  • EC2 のステータスがペンディング中にコロスケ
  • サービスの量が多く、全てを把握している人は恐らくいない
  • API Gateway, EC2, RDS, Route 53, S3, IAM, Lambda がよく使う
  • SNS, SQS は覚えたほうがいい, SQSは全てのサービスのベースとなっている初期から存在するサービス. ここを上手に使うことでサービスをキレイにまとめあげることができる
  • アラームは一度届くと2回目はないので、心配ならアラームを複数個設定したほうがいい
11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?