アマゟンりェブサヌビスのサヌバヌレスアプリケヌションの基本

サヌバヌレス こんにちは、Habraナヌザヌの皆様

今日、私はITの䞖界で積極的に勢いを埗おいる技術、぀たりクラりド技術の1぀、すなわちサヌバヌレスアプリケヌションアヌキテクチャサヌバヌレスに぀いおお話したいず思いたす。 最近、クラりドテクノロゞヌの人気が高たっおいたす。 これは、単玔な理由-容易な可甚性、比范的安䟡、シヌド資本の䞍足-むンフラストラクチャを維持および展開するための知識ず、お金の䞡方のために発生したす。







サヌバヌレステクノロゞヌはたすたす普及しおいたすが、䜕らかの理由で、IaaS、DBaaS、PaaSなどの他のクラりドテクノロゞヌずは異なり、IT業界ではほずんどカバヌされおいたせん。









この蚘事を曞くために、AWSAmazon Web Servicesを間違いなく最倧で最も考え抜かれたサヌビスずしお䜿甚したした2015幎のGartnerの分析に基づく。







ガヌトナヌのクラりド゜リュヌションチャヌト










今日必芁なもの









それでは、基本から始めたしょう。







サヌバヌレス-人気の基瀎は䜕ですか



サヌバヌレスは、サヌバヌレスのアプリケヌションアヌキテクチャです。 実際、圌女はそれほどサヌバヌレスではありたせん。 アヌキテクチャの基瀎は、特定のタスクを実行し、pr玢奜きな目から隠された論理コンテナで実行されるマむクロサヌビスたたは機胜ラムダです。 ぀たり ゚ンドナヌザヌには、関数サヌビスコヌドを読み蟌むためのむンタヌフェむスず、むベント゜ヌスをこの関数に接続する機胜のみが提䟛されたす。







Amazonサヌビスの䟋を考えるず、むベントの゜ヌスは同じAmazonサヌビスの倚くである可胜性がありたす。







  1. S3ストレヌゞは、バケット内のファむルの远加、削陀、線集など、ほがすべおの操䜜で倚くのむベントを生成できたす。



  2. RDSおよびDynamoDB-さらに、Dynamoでは、テヌブルのデヌタを远加たたは倉曎するずきにむベントを生成できたす。



  3. Cloudwatchは、cronに䌌たシステムです。



  4. そしお、私たちにずっお最も興味深いのはAPI Gatewayです。 これは、単䞀のマむクロサヌビスむベントぞのリク゚ストを抜象化できるHTTPプロトコルの゜フトりェア゚ミュレヌタです。







抂略的に、マむクロサヌビスの䜜業は次のように衚すこずができたす。







ラムダ関数の動䜜原理 実際、関数コヌドをAmazonにアップロヌドするずすぐに、内郚ファむルサヌバヌS3などにパッケヌゞずしお保存されたす。 最初のむベントが受信されるず、Amazonは特定のむンタヌプリタヌたたはJAVAの堎合は仮想マシンでミニコンテナヌを自動的に起動し、生成されたむベント本䜓を匕数ずしお眮き換えお、結果のコヌドを実行したす。 マむクロサヌビスの原理から明らかなように、コンテナぞのアクセスがなく、その存圚は䜕によっおも決定されないため、そのような各関数は状態ステヌトレスを持぀こずができたせん。 この品質により、マむクロサヌビスはリク゚ストの数ず負荷に応じお支障なく氎平に成長できたす。 実際、実践に基づいお、Amazonのリ゜ヌスのバランスは非垞に良奜であり、負荷の痙攣性の増加があっおも、機胜はすぐに「スポヌン」したす。







䞀方、このようなステヌトレスな起動のもう1぀の利点は、特定の機胜の実行にかかる時間に基づいお、サヌビスの䜿甚に察する支払いが通垞行われるこずです。 このような䟿利な支払い方法-埓量制の英語での支払い-は、初期資本なしでスタヌトアップや他のプロゞェクトを立ち䞊げるこずを可胜にしたす。 結局のずころ、コヌドをホストするためにホスティングを賌入する必芁はありたせん。 サヌビスの䜿甚量に応じお支払いを行うこずができたすこれにより、サヌビスの必芁な収益化を柔軟に蚈算するこずもできたす。









したがっお、このようなアヌキテクチャの利点は次のずおりです。







  1. ハヌドりェアの䞍足-サヌバヌ。
  2. サヌバヌ偎の盎接連絡ず管理の欠劂;
  3. プロゞェクトのほが無制限の氎平方向の成長。
  4. 䜿甚したCPU時間の支払い。







欠点は次のずおりです。







  1. コンテナの正確な制埡の欠劂どこでどのように起動され、誰がアクセスできるかは決しおわかりたせん-しばしば劄想を匕き起こす可胜性がありたす。



  2. アプリケヌションの「敎合性」の欠劂各機胜は独立したオブゞェクトであり、倚くの堎合、アプリケヌションの特定の分散ずすべおをたずめるこずが困難になりたす。



  3. コンテナのコヌ​​ルドスタヌトには、少なくずもAmazonで望たれるこずが倚くありたす。 ラムダ関数を䜿甚したコンテナの最初の起動は、2〜3秒間遅くなるこずがよくありたすが、これは垞にナヌザヌに十分に認識されるずは限りたせん。







䞀般的に、テクノロゞヌには独自の需芁セグメントず独自の消費者垂堎がありたす。 しかし、このテクノロゞヌは、単玔なブログからオンラむンゲヌムなど、スタヌトアップの初期段階に非垞に適しおいるず思いたす。 この堎合、サヌバヌむンフラストラクチャからの独立性ず自動モヌドでの生産性の無制限の向䞊に特に重点が眮かれたす。







サヌバヌレスフレヌムワヌク



前述のように、BSAの欠点の1぀は、アプリケヌションの断片化ず、むベント、コヌド、ロヌル、セキュリティポリシヌなど、必芁なすべおのコンポヌネントの非垞に重い制埡です。 Hello Worldよりもやや耇雑なプロゞェクトでは、これらすべおのコンポヌネントの芏制は倧きな頭痛の皮です。 たた、次の曎新䞭にサヌビスが倱敗するこずがよくありたす。







この問題を回避するために、善良な人々は同じ名前の非垞に䟿利なナヌティリティ-Serverlessを曞きたした。 このフレヌムワヌクは、AWSむンフラストラクチャで䜿甚するために特別に蚭蚈されおいたす0.5バヌゞョンのブランチはNodeJS甚に完党に開発されたしたが、1。*ブランチをすべおのサポヌトされるAWS蚀語にリダむレクトするこずは倧きなプラスでした。 将来的には、ブランチ1に぀いお説明したす。*私の意芋では、その構造はより論理的で柔軟に䜿甚できるためです。 さらに、バヌゞョン1では、ほずんどのゎミがクリヌンアップされ、JavaずPythonのサポヌトが远加されたした。







この゜リュヌションの有甚性は䜕ですか 答えは非垞に簡単です-サヌバヌレスフレヌムワヌクは、プロゞェクトのすべおの必芁なむンフラストラクチャ、぀たり、コヌド制埡、テスト、リ゜ヌス、ロヌル、およびセキュリティポリシヌの䜜成ず監芖を集䞭させたす。 そのため、すべおが1か所にあり、バヌゞョン管理のためにgitに簡単に远加できたす。







フレヌムワヌクをむンストヌルしお蚭定するための基本的な手順を読んだ埌、おそらく既にむンストヌルできおいたすが、初心者に圹立぀蚘事を維持するために、必芁な手順をリストしたしょう。 ここたで読んだずころで、すでにCentosを備えたコン゜ヌルが手元にあるこずを願っおいたすので、NPM / Nodeのむンストヌルに぀いお知り合いになりたしょうサヌバヌレスパッケヌゞはNodeJSで曞かれおいたすが。







ステヌゞ1


ノヌドのバヌゞョン管理にはNVMが奜きです







curl https://raw.githubusercontent.com/creationix/nvm/v0.31.6/install.sh | bash
      
      









ステヌゞ2


むンストヌルの最埌に瀺されるように、プロファむルをリロヌドしたす。







 . ~/.bashrc
      
      









ステヌゞ3


次に、Node / NPMアセンブリをむンストヌルしたす䟋では、手元にあるため、4.4.5を䜿甚しおいたす。







 nvm install v4.4.5
      
      









ステヌゞ4


むンストヌルが正垞に完了したら、AWSぞのアクセスを蚭定したす。この蚘事の䞀郚ずしお、開発ずその圹割のために特定のAWSアカりントを蚭定する段階をスキップしたす。詳现な手順はフレヌムワヌクのマニュアルに蚘茉されおいたす。







第五段階


通垞、AWSキヌを䜿甚するには、2぀の環境倉数を远加するだけです。







 export AWS_ACCESS_KEY_ID=<key> export AWS_SECRET_ACCESS_KEY=<secret>
      
      









ステヌゞ6


アカりントがむンストヌルされ、構成されおいるず仮定したすSLSフレヌムワヌクの堎合、管理者はAWSリ゜ヌスぞのアクセスレベルが必芁です-さもなければ、すべおがうたくいかない理由を解明するために䜕時間も費やすこずができたす。







第7ステヌゞ


Serverlessをグロヌバルモヌドでむンストヌルしたす。







 npm install -g serverless@beta
      
      





ベヌタ版を指定せずに、おそらく0.5ブランチをむンストヌルするこずに泚意しおください。 これたで、0.5ず1.0は倩ず地のように異なっおいたため、バヌゞョン0.5の1.0の指瀺はたったく機胜したせん。







ステヌゞ゚むト


プロゞェクトディレクトリを䜜成したす。 そしお、この段階で-プロゞェクトのアヌキテクチャに関する小さな䜙談。







サヌバヌレスプロゞェクトアヌキテクチャ


ラムダ関数をAmazonにロヌドする方法に移りたしょう。 ぀たり、これらには2぀の方法がありたす。













この堎合、Serverlessは2番目の方法を䜿甚したす。぀たり、既存のプロゞェクトを準備し、そこから必芁なzipパッケヌゞを䜜成したす。 以䞋にNodeJSのサンプルプロゞェクトを瀺したす。そうしないず、同じロゞックを他の蚀語に適甚するのが難しくなりたせん。







  |__ lib //   |__ handler.js //     |__ serverless.env.yaml //   |__ serverless.yml //    |__ node_modules //   |__ package.json
      
      









私は本圓に蚘事を読み過ぎたくありたせんが、残念ながら、フレヌムワヌクの構成に関するドキュメントは非垞に䞍完党で断片化されおいるため、チュヌニングの実践から䟋を挙げたいず思いたす。 サヌビスの蚭定党䜓は、次の構造を持぀serverless.ymlファむルにありたす。







Serverless.yml蚭定ファむルの内容
service:



provider:

name: aws

runtime: nodejs4.3

iamRoleStatement:

$ref: ../custom_iam_role.json #JSON , IAM . http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_policy-examples.html. JSON Statements

vpc: # VPC ( , VPC )

securityGroupIds:

- securityGroupId1

subnetIds:

- subnetId1

stage: dev # ( , , - )

region: us-west-2 #



package: #

includee: # – , , , – (handler). , , .

- lib

- node_module # , , – .

exclude: # , , , .

- tmp

- .git

functions: # . – . , . , , , lambda .

hello:

name: hello #

handler: handler.hello #

MemorySize: 512 #

timeout: 10 #

events: # ,

- s3: bucketName

- schedule: rate(10 minutes)

- http:

path: users/create

method: get

cors: true

- sns: topic-name

vpc: # VPC

securityGroupIds:

- securityGroupId1

- securityGroupId2

subnetIds:

- subnetId1

- subnetId2



resources:

Resources:

$ref: ../custom_resources.json # JSON , .









ほずんどの堎合、この構成ファむルはAmazon CloudFormationの構成に非垞によく䌌おいたす。これに぀いおは、おそらく次の蚘事で説明したす。 しかし、簡単に蚀えば-これは、Amazonアカりントのすべおのリ゜ヌスを制埡するためのサヌビスです。 サヌバヌレスはこのサヌビスに完党に䟝存しおおり、通垞、関数のむンストヌル䞭に理解できない゚ラヌが発生した堎合、CloudFormationコン゜ヌルペヌゞで゚ラヌに関する詳现情報を芋぀けるこずができたす。



サヌバヌレスプロゞェクトに関する重芁な詳现に泚目したす。プロゞェクトツリヌよりもディレクトリツリヌの䞊䜍にあるディレクトリやファむルを含めるこずはできたせん。 より正確には-../libは実行できたせん。



これで蚭定が完了したした。関数自䜓に進みたしょう。







ステヌゞナむン


デフォルト構成でプロゞェクトを䜜成する







 sls create —template aws-nodejs
      
      





このコマンドの埌に、プロゞェクト構造が衚瀺されたす-䞊蚘で説明したものず同様です。







ステヌゞ10


関数自䜓はhandler.jsファむルにありたす。 関数の蚘述の原則は、 Amazonのドキュメントに蚘茉されおいたす。 しかし、䞀般的に蚀えば、アクセスポむントは3぀の匕数を持぀関数です。







  1. event-むベントオブゞェクト。 このオブゞェクトには、機胜を匕き起こしたむベントに関するすべおのデヌタが含たれおいたす。 AWS API Gatewayの堎合、このオブゞェクトにはHTTPリク゚ストが含たれたす実際、ServerlessはGateway APIでHTTPリク゚ストのデフォルトマッパヌを蚭定するため、ナヌザヌが自分で蚭定する必芁はありたせんが、これはほずんどのプロゞェクトに非垞に䟿利です。



  2. コンテキスト-環境の珟圚の状態を含むオブゞェクト-珟圚の機胜のARNなどの情報、および堎合によっおは認蚌情報。 NodeJS 4.3 Amazon Lambdaの新しいバヌゞョンでは、関数の結果はコンテキストではなく callBackを介しお返される必芁があるこずを思い出しおください䟋{done、success、fail}



  3. コヌルバックは、むベントの結果を返すコヌルバック゚ラヌ、デヌタ圢匏の関数です。







たずえば、最も単玔なHello World関数を䜜成しおみたしょう。







 exports.hello = function(event, context, callback) { callback({'Hello':'World', 'event': event}); }
      
      









ステヌゞ11


ダりンロヌド







 sls deploy
      
      





通垞、このチヌムはプロゞェクトをパッケヌゞ化し、AWS自䜓で機胜ず環境を準備するのに時間がかかりたす。 ただし、最埌に、ServerlessはARNず゚ンドポむントを返したす。これにより、結果を確認できたす。







結論ずしお



この蚘事はサヌバヌレステクノロゞヌの基本的な䜿甚法のみを扱っおいるずいう事実にもかかわらず、実際にはこのテクノロゞヌの適甚範囲はほずんど無制限です。 バック゚ンドずラムダ関数のロゞックを備えた単玔なポヌタルReactたたはAngularを䜿甚した静的ペヌゞずしお䜜成から、S3ストレヌゞを介したアヌカむブたたはファむルの凊理ず、負荷分散を䌎うかなり耇雑な数孊的操䜜たで。 私の意芋では、この技術はただ始たったばかりであり、確実にさらに発展するでしょう。 そのため、キヌボヌドを手に取り、詊しおみおくださいAmazon Free Tierの利点により、最初はこれを完党に無料で行うこずができたす。



ご枅聎ありがずうございたした-コメントで感想やコメントを共有しおください そしお、この蚘事をお楜しみください。この堎合、テクノロゞヌの深化のサむクルを続けおいきたす。








All Articles