以下の内容はhttps://kuro-46.hatenablog.com/entry/2019/09/21/182729より取得しました。


【PyCon JP 2019 Tutorial】Lambda(Python)を使用したサーバレスのハンズオン

PyCon JP 2019 Tutorialに参加したので、学んだことをざっくり書き残しておきます。

資料

speakerdeck.com

進め方

  • Lambdaについての説明
  • Lambdaを始める(ハンズオン)
  • サーバーレスアーキテクチャとLambdaの位置付け
  • Lambdaと周辺サービスでAPIサーバーを作ってみる

チュートリアルのゴール

  • AWS上で構築するサーバーレスアプリケーションの基本構成について知る
  • Lambdaの利用に十分な基本的な構成を知る
  • AWSの基本的なマネージドサービスを使って、サーバーレスなAPIの構成と作成手順を知る

Lambdaについての説明

AWS Lambdaとは

  • FaaS(Function as a Service)の1つ
  • AWS上のカテゴリーは「コンピューティング」(その他にはEC2など、プログラミングの実行環境)
  • マネージされたコード実行環境を提供

基本機能

  • 共有されたステートレスな実行環境
  • AWSの各種サービスとの連携
  • 柔軟なスケーリング
  • 関数のバージョニング
    • バージョンを指定することも可能
  • CloudWatchによる監視
  • StepFunctionsによる関数間オーケストレーション
    • より複雑な処理が可能に
  • Lambda Layerによる共通コンポーネントの管理
    • 割と新しい機能
    • 共有レイヤーを作ることができるようになった

AWS Lambdaで利用可能な言語について

  • Python
  • Node.js
  • Go などなど

AWS Lambdaの利点

  • コンピューティングリソースの有効活用
    • アイドルタイムに課金されない
  • アプリケーションコードのスケーラビリティ
    • 冪等性は必要(関数の設計が重要になる)
    • 事前のリソースプロビジョニングが基本的に不要になる
  • AWSの各種サービスとの親和性
    • イベントドリブンによる自動化やサーバレス化

実行ライフサイクル

  1. ENIの作成
  2. コンテナの作成
  3. デプロイパッケージのロード
  4. デプロイパッケージの展開
  5. ランタイム起動・初期化
  6. 関数/メソッドの実行(課金対象)
  7. コンテナの破棄

コールドスタートとウォームスタート

  • ライフサイクルの1から全て実施するのがコールドスタート
  • コンテナを再利用して実行されるのがウォームスタート
  • コールドスタートの場合
    • 1~7をすべて行う
  • ウォームスタートの場合
    • 3~6まで

Lambdaの利用例

  • APIサーバとして
  • AWSリソース管理の自動化
  • IoTサービスのバックエンドとして
  • ストリームデータのバックエンドとして
  • ETL処理

Lambdaの開発でよく利用されるツール群

  • 構成管理
  • AWS SDK
    • boto3
  • AWSサービスのモックツール
    • LocalStack
    • moto
  • API仕様書の記述
    • OpenAPI(Swagger)

SAM

  • AWS Serverless Application Model
  • CloudFormationの拡張として実装されていて、構成管理まで含まれる

boto3

開発環境

Cloud9

  • AWSが提供しているクラウド上でのアプリケーション開発環境
  • コードエディタと開発環境がWeb上で使える
  • 今回は環境を整えるために使用

ハンズオン

ファイルのアップローダ/ダウンローダAPIを作成しながら、Lambdaについて学びました。

デプロイ

makefileを使って、デプロイ手順をMakefileにタスクとして記載することで継続的に実行するようです。

dev.classmethod.jp

エラーの確認方法

  • CloudFormation内部のイベントに、エラーが出力される
  • CloudFormationがErrorでRollbackになっているときには、一度削除してから再実行すること

リソースタイプの調べ方

AWSの公式ドキュメントから探していくことになる

docs.aws.amazon.com

困ったら、「使いたい機能 + Cloud Formation」で検索をかけるのが手っ取り早い

SAMはCloudFormationをサーバーレスアプリケーションに拡張したものなので、CloudFormationを知っておくと早いようです。

qiita.com

感想

AWS Lambdaを使用する上で、基本的な知識を学ぶことができました。

デバッグの方法とか、調べ方について学べたことは、本を読んで学ぶ以上に価値があったと思います。

自分でやろうと思ったときに全く分からなくなりそうなので、ハンズオン形式で学べてとても良かったと思いました。

AWS Lambdaは万能ではなく、現場で使う際には、他のAWSサービスと比較・検討した上で使用する必要があると学んだので

取り急ぎは個人でAPIを作りたいときや、何かしらのAWSサービスをトリガーとして関数を実行したいときに使ってみようと思いました。

その他、作業しながら感じたこと

  • awsのコマンド、SAMのコマンド、makeのコマンドとか、CLIをたくさん学んだ
  • そもそも、CloudFormationってなんだろう?
    • デプロイを簡単に、再現性を持たせるためのツール
    • ちゃんと調べる
  • Cloud9のいいところは?現場に使う?料金体系は?
  • クラウドサービスは、余剰にお金がかかってしまうんじゃないかという不安がある
    • 中途半端な知見で始めると、痛い目を見そうという不安
  • こういうのやってみたい



以上の内容はhttps://kuro-46.hatenablog.com/entry/2019/09/21/182729より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14