サーバーレスで
ガチ本番運用までやってるお話し
2016/11/16
株式会社サーバーワークス
クラウドインテグレーション部 技術4課
永田 明
Page: 2 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
自己紹介
株式会社サーバーワークス
京都事業所(自称)
Page: 3 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
自己紹介(コミュニティ)
メンター募集中!
http://coderdojo-nagaokakyo.doorkeeper.jp
3
CoderDojo高槻を設立したい人も
募集中!!
Page: 4 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
本日お話ししたいこと
サーバーレスで本番サービスを開発・運用してみて、
• 事前に知っておきたかったこと
• (知ってたけど)あらためて痛感したこと
Content Index
Page: 5 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Content Index
Page: 6 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Page: 7 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
1. 作ったサービス
デジタルコンテンツ販売サービスの販売管理API
• 開発スピード、運用の省力化を追求するため、サーバーレスで開発
• アカウント管理 / 購入管理 / ライセンス管理等の機能をWEB-APIで提供
• Serverless Frameworkは当時Beta版だったので不採用
Page: 8 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
みんな大好きEC2で構築したほうが
無難ちゃうん・・
Content Index
Page: 9 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Page: 10 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
認証の仕組みは自前で実装
• API Keyを認証に使うのはNG
• 自前で実装
• 接続元のIPアドレス制限
• これも自前で実装
Page: 11 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
環境変数をどこにもつか
• 教科書どおり『Stage Variables』を使う
• RDS / Redisのエンドポイント、接続パスワード等の保持に利用
• 但し、Stage Variablesには利用文字制限あり。例えば、ランダムパ
スワード文字列がそのまま使えない!!
Page: 12 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
30秒ルール
• API Gatewayのタイムアウトは30秒
• Lambdaのタイムアウトを延ばしても、API Gatewayで切られちゃう
• 但しLambdaは自身のタイムアウトまで走り続ける。更新系処理は
Lambdaのタイムアウトを最大まで延ばしておいたほうが無難
• 重い処理は非同期で
• Lambdaが最大のパフォーマンスを出せるようチューニングしておく
(後述)
Page: 13 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
呼び出し元で、適切にリトライしてる??
https://docs.aws.amazon.com/apigateway/api-reference/handling-errors/
• API Gateway推奨のリトライ仕様がある
Page: 14 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
2. API Gatewayのあれこれ
第3者機関によるセキュリティ診断は不可
• API Gatewayに対する第3者機関によるセキュリティ診断は許可され
ていない!!
• 制限事項として、お客さまへ事前説明ができたら◎。
Content Index
Page: 15 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Page: 16 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
VPC使う??
• VPC内に構築されたLambdaファンクションはインターネットにアクセスできない
• つまり、、Lambdaファンクション内でAWS SDKが使えない
• 実行中のLambdaファンクションのDescriptionも取得できない
• 『NAT Gateway』or『NATインスタンス』が必要
Page: 17 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
デプロイどうする?
ServerlessFrameworkを採用できなかったのでスクリプトを実装
1. 開発環境用の設定ファイルを削除
2. pipパッケージをアプリケーションルート以下にインストール
pip install -r requirements.txt -t ./vendored/
3. デプロイ用のZipファイルを作成
4. S3バケットにZipファイルをアップロード
5. Lambdaファンクションにデプロイ(Aliasの参照先を変更)
Page: 18 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
API GWを使わないLambdaでは、環境変数をどこにもつか
• 案1)LambdaファンクションのDescriptionにConfigを値記載
• Lambdaファンクションが複数あると設定値が重複分散することに
• VPC内にLambdaファンクションがあると、インターネットアクセ
スができないためDescriptionがファンクションから参照できない
• 案2)S3に独自Configファイルを配置
• VPC内にLambdaファンクションがある場合、VPCエンドポイント
を利用することでS3アクセスを可能にした
• Lambdaファンクション起動の度にS3アクセスが発生してしまう
Page: 19 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
デプロイZipファイルのサイズと実行の遅延
ソースコードや、利用するライブラリ等が増えると、その分Zipファイルのサイズが大き
くなる。Lambdaファンクションは実行時にZipファイルを展開をするので、処理のスター
トがサイズと比例して遅くなる。
数分以内に再実行された際は、再利用されるので速い。
• 開発環境でしか使わないライブラリはZipに含めない
• nose
• python-lambda-local
Page: 20 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
バージョン管理
Page: 21 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
3. Lambdaのあれこれ
ロググループと監視
• すべてのAliaseのログが、ひとつのロググループに出力されてしまう。
• LoggerにAliase名も出力させるよう改訂し、Aliase名+監視対象文字
列で検知させる。
Content Index
Page: 22 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Page: 23 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
4. 本番運用での障害あれこれ
軽い処理なのにタイムアウトエラーだと!?
軽い処理のLambdaファンクションなのに、30秒で終わらずに、API
GatewayがHTTPステータス502を返すことがある!?
• Lambdaファンクションは、コンテナの初回利用時、(特に、VPC内に設置された
Lambdaファンクションの場合にはENIの生成に)時間を要することがある。
• メモリの増加やパッケージサイズの縮小、クライアントからのリトライ等で対処する
しかない。
Page: 24 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
4. 本番運用での障害あれこれ
Lambdaファンクションが実行されない!?
Lambdaファンクションが実行されずに、API GatewayがHTTPステー
タス400を返すことがある!?
• リクエストのBODYのデータサイズが大きくて、API Gatewayでのマッピング処理に
時間がかかった場合に発生するらしい
Page: 25 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
4. 本番運用での障害あれこれ
予期せぬエラーな・・・
API Gateway から Lambda function の呼び出しにおいて「An error
occurred and the request cannot be processed.」が発生!?
Content Index
Page: 26 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
SECTION 作ったサービス1
API Gatewayのあれこれ
Lambdaのあれこれ
本番運用での障害あれこれ
最後に
SECTION 2
SECTION 3
SECTION 4
SECTION 5
Page: 27 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
枯れてないし、制約も多い
Page: 28 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
運用では、手間要らず
Page: 29 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
5. 最後に
サーバーワークスは開発しない!?
AWSインフラに特化したCI業から、
AWS専業屋にしかできない新しいCI業へ。
Page: 30 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
サーバーレスで構築してみたら
ええんちゃう!?
Page: 31 CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved.
END

サーバーレスで ガチ本番運用までやってるお話し

  • 1.
  • 2.
    Page: 2 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 自己紹介 株式会社サーバーワークス 京都事業所(自称)
  • 3.
    Page: 3 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 自己紹介(コミュニティ) メンター募集中! http://coderdojo-nagaokakyo.doorkeeper.jp 3 CoderDojo高槻を設立したい人も 募集中!!
  • 4.
    Page: 4 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 本日お話ししたいこと サーバーレスで本番サービスを開発・運用してみて、 • 事前に知っておきたかったこと • (知ってたけど)あらためて痛感したこと
  • 5.
    Content Index Page: 5CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 6.
    Content Index Page: 6CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 7.
    Page: 7 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 1. 作ったサービス デジタルコンテンツ販売サービスの販売管理API • 開発スピード、運用の省力化を追求するため、サーバーレスで開発 • アカウント管理 / 購入管理 / ライセンス管理等の機能をWEB-APIで提供 • Serverless Frameworkは当時Beta版だったので不採用
  • 8.
    Page: 8 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. みんな大好きEC2で構築したほうが 無難ちゃうん・・
  • 9.
    Content Index Page: 9CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 10.
    Page: 10 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 認証の仕組みは自前で実装 • API Keyを認証に使うのはNG • 自前で実装 • 接続元のIPアドレス制限 • これも自前で実装
  • 11.
    Page: 11 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 環境変数をどこにもつか • 教科書どおり『Stage Variables』を使う • RDS / Redisのエンドポイント、接続パスワード等の保持に利用 • 但し、Stage Variablesには利用文字制限あり。例えば、ランダムパ スワード文字列がそのまま使えない!!
  • 12.
    Page: 12 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 30秒ルール • API Gatewayのタイムアウトは30秒 • Lambdaのタイムアウトを延ばしても、API Gatewayで切られちゃう • 但しLambdaは自身のタイムアウトまで走り続ける。更新系処理は Lambdaのタイムアウトを最大まで延ばしておいたほうが無難 • 重い処理は非同期で • Lambdaが最大のパフォーマンスを出せるようチューニングしておく (後述)
  • 13.
    Page: 13 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 呼び出し元で、適切にリトライしてる?? https://docs.aws.amazon.com/apigateway/api-reference/handling-errors/ • API Gateway推奨のリトライ仕様がある
  • 14.
    Page: 14 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 2. API Gatewayのあれこれ 第3者機関によるセキュリティ診断は不可 • API Gatewayに対する第3者機関によるセキュリティ診断は許可され ていない!! • 制限事項として、お客さまへ事前説明ができたら◎。
  • 15.
    Content Index Page: 15CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 16.
    Page: 16 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ VPC使う?? • VPC内に構築されたLambdaファンクションはインターネットにアクセスできない • つまり、、Lambdaファンクション内でAWS SDKが使えない • 実行中のLambdaファンクションのDescriptionも取得できない • 『NAT Gateway』or『NATインスタンス』が必要
  • 17.
    Page: 17 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ デプロイどうする? ServerlessFrameworkを採用できなかったのでスクリプトを実装 1. 開発環境用の設定ファイルを削除 2. pipパッケージをアプリケーションルート以下にインストール pip install -r requirements.txt -t ./vendored/ 3. デプロイ用のZipファイルを作成 4. S3バケットにZipファイルをアップロード 5. Lambdaファンクションにデプロイ(Aliasの参照先を変更)
  • 18.
    Page: 18 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ API GWを使わないLambdaでは、環境変数をどこにもつか • 案1)LambdaファンクションのDescriptionにConfigを値記載 • Lambdaファンクションが複数あると設定値が重複分散することに • VPC内にLambdaファンクションがあると、インターネットアクセ スができないためDescriptionがファンクションから参照できない • 案2)S3に独自Configファイルを配置 • VPC内にLambdaファンクションがある場合、VPCエンドポイント を利用することでS3アクセスを可能にした • Lambdaファンクション起動の度にS3アクセスが発生してしまう
  • 19.
    Page: 19 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ デプロイZipファイルのサイズと実行の遅延 ソースコードや、利用するライブラリ等が増えると、その分Zipファイルのサイズが大き くなる。Lambdaファンクションは実行時にZipファイルを展開をするので、処理のスター トがサイズと比例して遅くなる。 数分以内に再実行された際は、再利用されるので速い。 • 開発環境でしか使わないライブラリはZipに含めない • nose • python-lambda-local
  • 20.
    Page: 20 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ バージョン管理
  • 21.
    Page: 21 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 3. Lambdaのあれこれ ロググループと監視 • すべてのAliaseのログが、ひとつのロググループに出力されてしまう。 • LoggerにAliase名も出力させるよう改訂し、Aliase名+監視対象文字 列で検知させる。
  • 22.
    Content Index Page: 22CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 23.
    Page: 23 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 4. 本番運用での障害あれこれ 軽い処理なのにタイムアウトエラーだと!? 軽い処理のLambdaファンクションなのに、30秒で終わらずに、API GatewayがHTTPステータス502を返すことがある!? • Lambdaファンクションは、コンテナの初回利用時、(特に、VPC内に設置された Lambdaファンクションの場合にはENIの生成に)時間を要することがある。 • メモリの増加やパッケージサイズの縮小、クライアントからのリトライ等で対処する しかない。
  • 24.
    Page: 24 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 4. 本番運用での障害あれこれ Lambdaファンクションが実行されない!? Lambdaファンクションが実行されずに、API GatewayがHTTPステー タス400を返すことがある!? • リクエストのBODYのデータサイズが大きくて、API Gatewayでのマッピング処理に 時間がかかった場合に発生するらしい
  • 25.
    Page: 25 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 4. 本番運用での障害あれこれ 予期せぬエラーな・・・ API Gateway から Lambda function の呼び出しにおいて「An error occurred and the request cannot be processed.」が発生!?
  • 26.
    Content Index Page: 26CONFIDENTIALCopyright © Serverworks Co.,Ltd. All Rights Reserved. SECTION 作ったサービス1 API Gatewayのあれこれ Lambdaのあれこれ 本番運用での障害あれこれ 最後に SECTION 2 SECTION 3 SECTION 4 SECTION 5
  • 27.
    Page: 27 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 枯れてないし、制約も多い
  • 28.
    Page: 28 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 運用では、手間要らず
  • 29.
    Page: 29 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. 5. 最後に サーバーワークスは開発しない!? AWSインフラに特化したCI業から、 AWS専業屋にしかできない新しいCI業へ。
  • 30.
    Page: 30 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. サーバーレスで構築してみたら ええんちゃう!?
  • 31.
    Page: 31 CONFIDENTIALCopyright© Serverworks Co.,Ltd. All Rights Reserved. END