AWS CDKを用いてPythonのLambda functionをデプロイしたい(失敗例)

tl;dr 外部モジュールはrequirements.txtにfreezeしてソースファイルと同じディレクトリに配置する。 handlerはeventとcontextを受け取るので引数を用意する。 Dynamodb等Lambda関数の実行時にAWSの他のサービスを使用する場合、IAMロールへの権限付与を行う。 FunctionNameはCDKで管理する場合、名前が変動するので環境変数からきちんと渡す。 失敗例 CDKを用いてLambda関数をデプロイした時、必要な外部モジュールが見つからずエラーになっていた。 requirements.txtはcdk.jsonと同様のルートディレクトリに配置していたが、deploy時にモジュールのインストールが行われなかった。 handlerが呼び出されたとき、引数の個数でエラーが送出された。 Lambdaから他のLambdaがInvokeできない 対処 CDKを用いてLambda関数をデプロイするときのモジュール requirements.txtはstackで指定したentryと同じディレクトリを探索するので同じ場所に配置する必要がある。 1 2 3 4 5 6 7 8 9 const getFeedLambdaFunc = new PythonFunction(this, 'getFeedFunc', { entry: './src/getFeed/', timeout: cdk.Duration.seconds(180), runtime: Runtime.PYTHON_3_7, index: 'lambda_getFeed.py', environment: {'RSSSOURCE_TABLENAME': rssSourceTableName, 'UPDATEFUNC_NAME': updateArticleLambdaFunc.functionName } }); handlerが呼び出されたとき引数の個数でエラーになる Lambda関数が呼び出されたときhandlerにはeventとcontextが渡される。 eventにはLambda関数を呼び出したイベントから渡されたデータが格納され、contextにはAWSの環境情報(ロググループ、実行されている関数のバージョン等)が格納される。 参照するかの有無に関わらず、2つの引数を受ける必要があるので注意する。 LambdaからLambdaのInvokeができない 開発中非常に詰まった点、 stack内では 1 B_LambdaFunc.grantInvoke(A_LambdaFunc) とすることでAがBを実行する権限を得ることができる。 A_LambdaFuncからの呼び出しは次のように行っていた。 1 2 3 4 5 invoke_response = boto3....

June 12, 2022 · 1 min · under.

競プロメモ

個人用メモ、今度まとめる a a a a

May 21, 2022 · 1 min · under.

格安PCで自宅にサーバーを建てる - wireguard編

自宅サーバーを建てよう 知り合いから1000円で売ってもらったCeleron積んでる謎のファンレスPCがあるので、いい加減活用したい。 外からアクセスできて、大公開するポートは1つにしたいね → VPN+etc… とりあえずwireguardとsambaを入れて、wireguardを介したアクセス以外で見えないようにする。 wireguardを入れる前に サーバーを建てるということは、当然外部からの疎通を考えないといけない。 しかしながら家の環境はmap-e方式の接続であり、いつものように開けゴマとルーターに設定を書くだけではポートが開いてくれない。ついでに言えばwireguardはUDPを使用するため疎通確認がだるい。 map-e最高だ! 謎のサイトをつかってmap-eで家に割り当てられているポート番号を調べる。 そして、NTTのモデム設定画面(192.168.11.1)から静的NAT設定を開いて公開対象のポートを開けゴマしたいがそもそも設定欄がない。 biglobeのIPv6オプションを使うと裏設定画面の方に移動するらしい 192.168.11.1:8888/t/ に裏設定画面があるのでこっちで設定する。 疎通チェック TCPであればwebサーバーを適当にlistenさせればいいわけなのだが、wireguardはUDPを使うらしいので疎通チェックが面倒な感じ。 と思っていたらncコマンドを使うことで簡単に疎通チェックできるらしい サーバー側でnc -lu 50000のように入力することで簡易的なサーバーを建てる事ができる。 (-lでListen -uでUDPポートの指定) 適当に別IPのクライアントを用意してnc -u <target addr> <target port>のように入力すると対象に文字列を送信できる。(なんも出てこないけどInteractiveなので適当に文字打ってEnter) いい感じにポートが開いてる事がわかるのでwireguardを建てる。 wireguard導入 Dockerに載せる とりあえずdockerに乗っけておく。(環境が壊れづらいってのもある) 適当な場所にDocker周りをまとめる 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 --- version: "2....

May 11, 2022 · 1 min · under.

Windows上のコンソールでエイリアスを永続化する

なぜ Linux環境下のコンソール(bash, zsh, fish等)では起動時に*_profileなどが自動実行されるため、PATHの指定やエイリアスの設定などを書き込んでおくことで疑似的な永続化ができる。 Windows上のコンソール(cmd, Powershell)でも同様に永続化したい。 どのように 基本的にはbash_profileのように、最初に実行されるべき内容を記述したファイルを自動で実行されるように変更する。(Cmdの方はエイリアスのみ。AutoRunにバッチファイル入れたら動きそうだけど、WindowsくんはPATH永続だもんね) Cmdでの永続化 任意の場所にエイリアスを記述するファイルを作成する HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processorあるいは HKEY_CURRENT_USER\Software\Microsoft\Command Processorを開く 文字列型のキーAutoRunを作成する 値をdoskey /macrofile=<path/to/1で作ったやつ>に変更する HKEY_CURRENT_USERの方にCommand Processorがなかったので要検証(作ったら動くかも) PowerShellでの永続化 ユーザー権限でPowerShellを開きNew-Item –type file –force $profile 次にnotepad $profileあるいはcode $profile Set-Alias d dockerのようにエイリアスを書き込む 最高の人生 俺はAWS CLIを使いたいわけ Function AWSCLI {docker run --rm -it -v $env:userprofile\.aws:/root/.aws -v $pwd\aws:/aws amazon/aws-cli $args} Set-Alias -Name aws -Value AWSCLI 参考 PowerShellの方 Cmdの方 AWS CLI関係

April 16, 2022 · 1 min · under.