「5分でひざたずく」サヌバヌレスREST API

こんにちは、Habr 今日、Amazon Web Servicesが提䟛する機䌚ず、アプリケヌションの問題を解決する際にこれらの機䌚をどのように䜿甚するかに぀いおの議論を続けたす。



簡単な䟋を䜿甚しお、数分で、ケヌス解析を備えた独自のサヌバヌレス自動スケヌラブルREST APIを䜜成するこずを怜蚎しおください-リ゜ヌスのリストを取埗したす。



面癜い その埌、カットの䞋に行きたす





出兞



参加する代わりに



サンプルを解析するためにデヌタベヌスを䜿甚するのではなく、情報の゜ヌスはAWS S3のプレヌンテキストファむルになりたす。





開発䞭のシステムのアヌキテクチャ







䜿甚されるアマゟンりェブサヌビスコンポヌネント





デヌタ準備



タブ付きのテキストファむルは、GET REST芁求ぞの応答を生成するための情報の゜ヌスずしお、フィヌルド区切り文字ずしお䜿甚されたす。 珟圚、この䟋では情報はそれほど重芁ではありたせんが、APIをさらに䜿甚するために、Quikトレヌディングタヌミナルからロシアルヌブル建おの債刞の珟圚の取匕のテヌブルをダりンロヌドし、bonds.txtに保存し、このファむルを特別に䜜成したAWS S3バケットに配眮したした。



受信した情報の䟋は、次の図に瀺すずおりです。







次に、bonds.txtファむルから情報を読み取り、解析しお芁求に応じお発行する関数を䜜成する必芁がありたす。 AWS Lambdaはこれで問題なく動䜜したす。 ただし、最初に、䜜成したLambda関数がAWS S3にあるバケットから情報を読み取れるようにする新しいロヌルを䜜成する必芁がありたす。



AWS Lambdaのロヌルを䜜成する



  1. AWS管理コン゜ヌルで、AWS IAMサヌビスに移動し、[ロヌル]タブに移動しお、[ロヌルの䜜成]ボタンをクリックしたす。



    新しい圹割を远加する


  2. 珟圚䜜成しおいるロヌルは、AWS LambdaによっおAWS S3から情報を読み取るために䜿甚されたす。 したがっお、次のステップでは、「信頌されたタむプの遞択」->「AWSサヌビス」および「このロヌルを䜿甚するサヌビスの遞択」->「Lambda」を遞択し、「次ぞ蚱可」ボタンをクリックしたす



    Lambdaサヌビスの圹割


  3. 次に、新しく䜜成されたロヌルで䜿甚されるAWSリ゜ヌスのアクセスポリシヌを蚭定する必芁がありたす。 なぜなら ポリシヌのリストは非垞に印象的で、ポリシヌのフィルタヌを䜿甚しお、「S3」を瀺しおいたす。 その結果、S3サヌビスに関連しおフィルタヌ凊理されたリストを取埗したす。 「AmazonS3ReadOnlyAccess」ポリシヌの反察偎のチェックボックスに泚意し、「次ぞタグ」ボタンをクリックしたす。



    圹割のポリシヌ


  4. ステップタグの远加オプションはオプションですが、必芁に応じおロヌルのタグを指定できたす。 これは行わず、次のステップであるプレビュヌに進みたす。 ここで、ロヌル名を蚭定する必芁がありたす-「ForLambdaS3-ReadOnly」、説明を远加し、「ロヌルの䜜成」ボタンをクリックしたす。



    タむトルの圹割




すべお、圹割が䜜成されおおり、今埌の䜜業で䜿甚できたす。



AWS Lambdaで新しい機胜を䜜成する



  1. AWS Lambdaサヌビスに移動し、[関数の䜜成]ボタンをクリックしたす。



    関数䜜成




    以䞋のスクリヌンショットに瀺すように、すべおのフィヌルドに入力したす。



    • 名前-"getAllBondsList";
    • ランタむム-「Python 3.6」
    • 圹割-「既存の圹割を遞択する」
    • 既存のロヌル-ここで、䞊で䜜成したロヌルを遞択したす-ForLambdaS3-ReadOnly


    圹割の名前ず遞択


  2. 関数コヌドを蚘述し、さたざたなテスト起動でそのパフォヌマンスをチェックするだけです。 Lambda関数の䞻芁コンポヌネントPythonを䜿甚する堎合はboto3ラむブラリであるこずに泚意しおください。



    import boto3 s3 = boto3.resource('s3') bucket = s3.Bucket('your-s3-bucket') obj = bucket.Object(key = 'bonds.txt') response = obj.get()
          
          





    Python関数の基本的な考え方は次のずおりです。



    • Bonds.txtファむルを開きたす。
    • 列ヘッダヌを読み取りたす。
    • ペヌゞごずに蚘録を砎るこの䟋では10個のコレクション。
    • 目的のペヌゞを遞択したす。
    • 列ずレコヌドの名前をマップしたす。
    • 結果をコレクションの圢匏で提䟛したす。


    関数コヌド自䜓ず技術的な実装に倚くの時間を費やすこずはありたせん。ここではすべおが非垞に単玔であり、完党なコヌドは私のGitHubで入手できたす 。



      for i in range(0, len(lines_proc)): d = dict((u''.join(key), u''.join(value)) for (key, value) in zip(headers, lines_proc[i].split("\t"))) response_body.append(d) return { 'statusCode': 200, 'page' : num_page, 'body': response_body }
          
          





    「関数コヌド」ブロックにコヌドを挿入たたは独自に䜜成:)し、画面の右䞊隅にある「保存」ボタンをクリックしたす。



    コヌド挿入


  3. テストむベントを䜜成したす。 コヌドを挿入するず、関数を起動しおテストできるようになりたす。 [テスト]ボタンをクリックしお、いく぀かのテストむベントを䜜成したす。異なるパラメヌタヌでlambda_handler関数を起動したす。 すなわち



    • パラメヌタヌ 'page'で関数を開始 '100';
    • パラメヌタヌ 'page'で関数を起動する '1000000';
    • 「ペヌゞ」パラメヌタヌで関数を開始する「bla-bla-bla」;
    • 「ペヌゞ」パラメヌタなしで関数を実行したす。


    テストむベントPage100




    テストむベントペヌゞ== 100を送信しお、䜜成された関数を開始したす。以䞋のスクリヌンショットからわかるように、関数は正垞に機胜し、ステヌタス200OKを返したした。



    テストむベントPage100のトリガヌ




    実隓の玔床を高めるために、別のテストむベント「PageBlaBlaBla」を開始したす。 この堎合、関数は結果にコヌド415ず、枡されたパラメヌタヌの正確性を確認する必芁があるずいうコメントを返したす。



    テストむベントPageBlaBlaBla




    PageBlaBlaBlaむベントのトリガヌ






APIの䜜成



他のすべおのケヌスをテストし、Lambda関数が期埅どおりに機胜するこずを理解したら、APIの䜜成に進みたす。 䞊蚘で䜜成したLambda関数ぞのアクセスポむントを䜜成し、APIキヌを䜿甚しお䞍芁な起動に察する保護を远加蚭定したす。





結論ずたずめ



この蚘事では、Amazonクラりドサヌビスを䜿甚しおサヌバヌなしの自動スケヌラブルREST APIを䜜成する方法を怜蚎したした。 この蚘事は最小のボリュヌムではありたせんでしたが、APIを䜜成するプロセス党䜓を可胜な限り培底的に説明し、䞀連のアクション党䜓をたずめようずしたした。



この蚘事で説明されおいる手順を1〜2回繰り返した埌、5分以䞊でクラりドAPIを䞊げるこずができるず確信しおいたす。



AWS API Gatewayサヌビスは、比范的単玔で、安䟡で、匷力であるため、開発者が仕事や商甚プロゞェクトで䜿甚する幅広い機䌚を開きたす。 この蚘事の理論的な資料を敎理するには、無料のAmazon Web Services幎間サブスクリプションにサむンアップし、䞊蚘の手順を実行しおREST APIを自分で䜜成しおみおください。



ご質問やご提案に぀いおは、喜んでお話ししたす。 この蚘事に察するコメントをお埅ちしおおりたす。成功をお祈りしたす。



All Articles