AES夏:EFSとラムダ+ Serverlessフレームワーク


秋のイコノキはちょうど戻ってきましたが、この夏は、AWSによってリリースされた機能の一部をレビューしています.

無力な挑戦


あなたがしばらくの間Serverlessなアプリケーションを開発しているならば、かなりの確信があなた自身がいくつかの挑戦に直面しているのを発見しました.
例えば、ラムダ関数によって消費されるルールの大きなファイルをロードする必要があるとしましょう.これはルールエンジンを実装します.あるいは、呼び出しの間の関数によって動的にデータファイルを生成する必要があります.ラムダはいくつかのローカル・スペースを提供します-- 512 MB -あなたが使うかもしれません、しかし、それは小さくて、一時的です.
他の解決策は心に浮かぶ:データベースに格納- RDS、ダイナモ、S 3.しかし、開発、パフォーマンスとコストの高い価格が付属しています.私たちが何百ものピークを持っていた場合、または何千ものリクエスト-毎秒、起動時に大きなファイルを読み込み、データストアに同時にファイルを書き込むか?
まあ、少なくとも、私たちは大きなパフォーマンスをヒットすることができます、ファイルのサイズに応じて、スタートアップ時にファイルを取得するの遅延+ラムダのコールドスタート-プロビジョニングされたコンカレンシーを入力し、データストアに中間ファイルを格納するのレイテンシプラス-それはDynamoDBからのS 3から同じ保存と検索ではありません.
それで、代わりに?さて、我々は運が、AWSリリースEFS 月のラムダのサポート!
AWSのイメージ特性
アマゾンEFS 広く知られているので、私はサービスの深さを掘り下げるつもりはありませんが、Amazonのエラスティックファイルサービスは、オンデマンドをエスカレートし、高いスループットと低レイテンシを提供するNFSファイルシステムを提供することに言及します.共有ストレージ、およびサービスからの並列アクセスが必要なときに非常に便利です.

構成と考慮


“電源を持つ責任”、または強力な機能を持つ私たちのケースではいくつかの構成の制約が来る.EFSはVPCの中で異なるサブネットで動きます.そして、それは我々のラムダ機能が同様にVPCの範囲内で走らなければならないことを意味します.それは価格が付属しています:IPディレクション、可能なパフォーマンスヒット、AWSグローバルサービスへの接続の損失、したがって、NATゲートウェイまたはプライベートリンク/ゲートウェイが使用される必要があります使用ケースに応じて.
その制約は昨年、大幅に改善されたHyperplane ENI for Lambda リリースされました、ほんの少しのeni - s - sを許容して、したがって、2、3のIP - s -は、多数のラムダ呼び出しを扱うのに十分です.

Serverlessフレームワーク


VPC内で実行されているラムダ関数の設定は、単純であるかもしれません.VPCリソースにアクセスする必要がある場合には、以下のイメージに示すように- VPCラベルの下にあります.
ServerlessフレームワークYAML -イメージMnube.org
セキュリティグループは、ネットワーク機能の作成、削除、および記述するために、ラムダ関数、eni(s)が置かれるサブネット(s)のID、s、およびpermissiがあります.
vpcλ- image mnubeorg
現在、私たちのVPCの中でラムダ関数が実行されており、各サブネットに置かれているENIが選択されていますが、EFSインスタンスにアクセスするためには、いくつかのPermisiを使用する必要があります.
役割permissiは、nsのEFS、ラムダ-イメージMnubeです.org
現在、EFSはVPCの中でつくられることができます.そのためには、コンソール、CloudFormation、Serverless、AWS CLI、AWS SDKなど.を使用できます.
イメージMnube .org
インスタンスを作成した後、アプリケーションポイントにアクセスポイントを提供する必要があります.これは新しいリソースです.これは、コンソールから、またはCloudformationファイルを介して作成することができます-私たちはEFS IDを提供する必要があります:${ self . provider }.
ServerlessフレームワークYAML -イメージMnube.org
最後に、ファイルシステムをラムダ関数にリンクし、EFSのARN、アクセスポイントのARN、ローカルマウントされたパスを提供します.
イメージ・ムニュー.org
EFSインスタンスはラムダ関数によりアクセス可能です.

解決策


使用しているServerless framework ソリューションを生成するには、しかし、代わりに公式の代替手段としてクラウド9とAWSサムを使用することができます.私はServerlessでかなりの経験を持っていますEveris - 大成功.
アーキテクチャ.org
ラムダ関数からアクセスできる規則ファイルを作成します.
別のサービスを使用すると、ファイルの転送には、AWS DataSync、EC 2インスタンスのような、あるいはコードからファイルを作成することができます.EC 2から転送するファイルはラムダ関数からアクセス可能ですので、このメソッドを使用します.
EC 2インスタンスが作成された後、T 2.Microは十分です- ESC ENI s sにアクセスしているVPCのサブネットのうちの1つで、我々は必要です.このディレクトリにはEFSインスタンスへのリンクがないので、ディレクトリをマウントする必要があります.
一つの方法は、EFSツールを使うことです.
                     sudo yum install -y amazon-efs-utils
以前にディレクトリをマウントするために使用できるアクセスポイントが作成されました.Webコンソールから必要なコマンドラインを取得するのは簡単です.Amazon EFSにアクセスしてください.
イメージMnube .org
ディレクトリをマウントした後に-緑で-ファイルは/efsディレクトリに移ることができます:
ファイルのマウントと作成-イメージmnube.org
この時点で、ラムダ関数からのディレクトリへのアクセスは完全に可能です.私は、ディレクトリに含まれるファイルをリストする最小のラムダ関数をコード化しました:
イメージMnube .org
解決策は、現在配備される準備ができています.私が無心の部分だけを示したということを覚えておいてください.YMLは、インフラストラクチャを提供するために使用されるかもしれないCloudFormationファイルに相当します-私はそれをエクササイズとしてあなたに任せます.
Serverless deploy -- stage - dev -- region eu - west - 1
Serverless Stack -画像のmnubeorg
ラムダ関数を呼び出すAPIゲートウェイを作成したので、URLリンクがフレームワークによって提供されます.
CloudWatchログ- Mnubeからのイメージ.org
私は、CloudWatchログからリクエストトレースをキャプチャしました.TXTとルール.と要求の低レイテンシ.

その他使用事例

  • ラムダ層が扱うことができない大きいライブラリをロードすること.
  • 定期的に更新されるファイル.
  • 同時アクセスのためにロックを必要とするファイル.
  • 大きなファイルへのアクセス- zip/解凍.
  • 別のコンピューティングアーキテクチャを使用して- EC 2、ECS -同じファイルを処理する.