自動化AWSラムダでペーパークラフトを自動化する


写真でNana Smirnova on Unsplash
TLR
The aws_lambda_python_alpha モジュールaws_lambda_<language>_alpha モジュールは、書き込み、ビルド、パッケージング、およびレスレスCDKでServerless関数を展開するのに非常に素晴らしいです.
  • インポート両方
  • import aws_cdk.aws_lambda as lambda_
    import aws_cdk.aws_lambda_python_alpha as lambda_python
    
  • ラムダインフラストラクチャalpha モジュール
  • ビルド( w/docker実行)
  • cdk synth --no-staging
    cdk deploy
    
    CDKは残りの面倒を見るでしょう.
    アバウトミー
    私の名前はヤコブです、そして、私はdevopエンジニアです.私はよく(料理の洗濯機、小売従業員、キャンプカウンセラー、軍のメディック、感染症の研究者)多くの他のものであったが、今私は悪魔のエンジニアです.私は正式なCS教育を受けませんでしたが、私は独学ではありません.ソフトウェア工学コミュニティの中での情報共有の文化は皆にとって重要です.それで、新しいことを学ぶとき、私は初めて学ぶ人の目を通してそれらを文書化します.ハッピーラーニング!そして、見知らぬ人でないでください.

    問題


    ヶ月前に私は引き起こしたquite a stir それによって、私の地元の学区(アメリカ合衆国で3番目に大きい)は、オマロン海峡の真ん中で彼らの学校ダッシュボードのcovid - 19のケースを支持していました.
    要約:グラフとグラフの凡例を変更せずに表示されたケースを変更しました.これは、伝説に基づいて、そこにされている必要があります行方不明の数千をもたらした.それは、彼らの側の非常に悪い仕事でした.
    私が物語を話して、学校地区の言い訳に反するのを手伝った1つのツールは、インターネットArchiveのWayback Machine .

    解決策


    あなたがWaybackマシンを聞いていないならば、それをチェックしに行ってください.それは本質的にWebページのタイムカプセルであり、それは私が地区のグラフは、彼らが言ったことを示していないことを証明することができました.それは私にとってとても役に立ちました.
    それで、これは何をしなければなりませんか?さて、説明責任の精神で、AWS - CDKと一緒にプレイしたいのですが、インターネットアーカイブにWebページのアーカイブを自動化するために展開できるスタックを作りました.Serverlessラムダ関数を使用すると、それはとても費用対効果の高いので、基本的に無料です(1日あたり100万のアーカイブリクエストを行う必要があるでしょう、毎日を超えてください.」AWS Free Tier .
    あなたは、レポを見つけることができますhere あなた自身の使用のために見えるか、それをクローン化したいならば、私は下でジューシーなビットも概説します、しかし、簡単に:
    PythonとAWS - CDKを使用して、私は、リモートリストPythonのライブラリを使用して、URLのリストのアーカイブを要求するラムダ関数と、ラムダをトリガーするEventBridgeイベントから構成されるCloudFormationスタックを作成しました.CDKはまた、このすべてが機能するのに必要であるすべてのアクセサリー役割と許可セットを作ります.

    機能


    以下の関数コード(以下)をディレクトリに置きますrequirements.txt ファイル.CDK(Dockerの助けを借りて)はコンテナを作り、要件をインストールします.txtファイルを、そのアーティファクトをAWSに展開します.それはかなりきちんとしている.
     1    from waybackpy import WaybackMachineSaveAPI
     2    import signal
     3    import logging
     4    
     5    logger = logging.getLogger()
     6    logger.setLevel(logging.INFO)
     7    
     8    user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0"
     9    url_list = [
    10         "https://api.cps.edu/health/help",
    11         ]
    12    
    13    def handler(sigum, frame):
    14         raise Exception("Request Sent")
    15    
    16    def lambda_handler(event, context):
    17         signal.signal(signal.SIGALRM, handler)
    18         for url in url_list:
    19              signal.alarm(5) # resets alarm
    20              try:
    21                   save_api = WaybackMachineSaveAPI(url, user_agent)
    22                   save_api.save()
    23              except Exception:
    24                   logger.info("Request Sent: {}".format(url))
    25                   continue
    
    トップのインポートとログでは、Wayback APIのためのUserRoundエージェントと同様に設定されます.次に、保存するすべてのURLのリストがあります.
    スキップするhandler 関数は、lambda_handler 関数.それが最初にすることline 17signal ライブラリは、信号アラームを聞いて、呼び出してhandler 関数は、アラームが0に達した場合に関数を返します.これは、アーカイブが行われた応答のために>30秒を待たなければならないだけで、Waybackマシンでリクエストをスローできるようにするためです.
    それから、我々は繰り返しますurl_list 毎秒5秒に信号アラームをリセットし、URLを要求する.一方、信号アラームがカウントダウンしているときに要求された例外が発生すると、要求された例外が発生すると、要求され、アラームをリセットし、URLを要求する次の反復に移動します.
    応答を待つ必要がない間、私はそれ自身の料金限界に良い方法と思います.あなたが本当にしたいならば、あなたは1秒にタイマーを下げることができたと思います.

    スタック


    CDKスタックは/wayback/wayback_stack.py .
    両方ともaws_lambda and aws_lambda_python_alpha モジュールがインポートされ、aws_lambda_python_alpha 独自にインポートされます.それは重要です.
    スタックには次の2つがあります.

    ウェーブバック関数


    この関数はaws_lambda_python_alpha モジュールです.の代わりにaws_lambda それは自動的にパッケージされ、ローカルテストを許可するので、我々はそれに興味を持っている必要があります.
    16        wayback_function = lambda_python.PythonFunction(
    17            self,
    18            "wayback",
    19            function_name="WaybackArchiver",
    20            runtime=lambda_.Runtime.PYTHON_3_9,
    21            entry="./wayback_app",
    22            index="app.py",
    23            handler="lambda_handler",
    24            memory_size=128,
    25            timeout=Duration.seconds(300),
    26            )
    
    パラメータのほとんどは文脈で見ると意味がありますがentry= on line 21 はCDKでパッケージ化されるディレクトリです.があるならばrequirements.txt このディレクトリにあるすべてのライブラリとモジュールがインストールされます.index= and handler= on lines 22-23 ファイルと関数をCDKに教えますentry ディレクトリは実行時に出発点となります.

    イベントルール


    これはどこにも参照されていないので、名前を付けませんが、このセクションではラムダをトリガーするEventBridge規則を作成します.ここには二つの重要なことしかありません.schedule and targets .
    28        event.Rule(self, "WaybackRule",
    29            rule_name="WaybackRule",
    30            schedule=event.Schedule.cron(
    31                minute="0", 
    32                hour="9",
    33                ),
    34            targets=[
    35                targets.LambdaFunction(wayback_function),
    36                ],
    37            )
    
    line 30 cdkのcron表記のバージョンを使用することを示します.タイムゾーンはUTCで、ここでの全ては文字列で表されます.また、デフォルトでは指定されていないパラメータ* . したがって、例えばday= 上記は月のすべての/任意の日を意味します.line 34 このイベントが発生したときに何をしたいかを指定できます.この場合、それはwayback_function 上記.

    ビルドと配備


    スタックは、パッケージ化されたラムダ(dockerが動作していると仮定する)を含み、以下のコマンドで展開されます.
    cdk synth --no-staging
    cdk deploy
    
    一旦作成されると、Webページのリストをアーカイブする機能があります.
    スタックまたはアプリケーションへの変更は、再構築して、配備するだけである必要があります、そして、古い計画は変更と取り替えられます.
    さて、あなたが考えるWebページはいくつかの監督を使用して、それらをアーカイブし始めることを理解してください.あなたが特定の時間内にそこにコンテンツの外部レコードが果実を負担するか分からない!