AWS が提供するAWS Toolkitを使い AWS Lambda Python を実行してみる
- この記事でやることは、
- VSCodeを使いAWS Lambda の hello-lambdaをローカルから実行する(ローカルからリモート実行)
- VSCode上でソース編集してAWSクラウドにアップロードする(Lambda関数をデプロイする)
-
sam local invoke
等の sam コマンドは利用しない
- 簡単なLambda作って、EC2インスタンス再起動する、CloudWatchLogsからlambda実行、みたいなインフラスクリプト相当を手軽に実行するくらいの用途です
- API Gateway等で実行するLambdaは
serverless framework
やsam
やcdk
を使う方が良いです - 間違って別のLambdaを編集してしまうこともあったり、消してしまうこともあるので開発用です。ソースはGit等で管理しておきましょう。
- JetBrainsのPyCharmやWebSotrmでLamdba関数作成で利用したことはあったけど、VSCodeで使うのは始めてなので勝手が違う
前提
- VSCodeはローカルにインストールしていること
- Dockerコンテナを使います、リモートコンテナでPython3.8と、そのコンテナ内でVSCodeを使う
- AWS ToolkitのインストールはAWSのドキュメントを見るとわかります(後述)
Python実行用のリモートコンテナ
-
よもやま話、Mac・Jetbrains使わなくなり、WindowsメインになってからはVSCode+Remote Containerで開発環境を作成するようになりリモートコンテナばかりどんどん増えていきます。Python3.9 使おうかと作成したんだけど、AWS Lambdaで対応しているバージョンは Python3.8 だった
-
リモートコンテナ用の Dockerfile,devcontainer.json を GitHubのgistに置いています。
https://gist.github.com/ssugimoto/132e0785212be58b0c0a6b4b7b42bc91 -
VSCodeで2つのファイルがあるディレクトリの1つ上の階層を開く、下記でいう
lambda-python
のディレクトリを開く
lambda-python
│
├─.devcontainer
│ devcontainer.json
│ Dockerfile
│
├─aws
│ config
│ credentials
│
└─ssh
config
known_hosts
- VSCodeからフォルダ
lambda-python
を開いた後に、さらにReOpen in Container
で開くとコンテナのビルドが始まる - ビルド後のバージョン確認(aws cliとコンテナ内のPythonのバージョンはマイナーバージョンが違うが、このまますすめる)
root ➜ /workspaces $ aws --version
aws-cli/2.2.27 Python/3.8.8 Linux/5.4.72-microsoft-standard-WSL2 exe/x86_64.debian.10 prompt/off
root ➜ /workspaces $ python --version
Python 3.8.11
AWS ToolkitをVSCodeで使えるようにする
https://docs.aws.amazon.com/ja_jp/toolkit-for-vscode/latest/userguide/welcome.html
(日本語のページです、私自身の場合はいつも英語のページが出てきて日本語ページ出てこない、日本語ページは訳がおかしかったりする)
- ドキュメントの通りにすすめ 以下をやる
- 前提として、VScodeは先に記載のPython3.8用のリモートコンテナに接続して使います。aws toolkitはリモートコンテナごとにinstallとなるため、ローカル環境のVSCodeでaws toolkitが入っていてもそれは使われない。
- AWS toolkitインストール
- toolkitが使用するAWSへの接続情報(クレデンシャルなど)を設定、IAMユーザーによる接続、AWS SSOによる接続、
- toolkitを使ってAWSへ接続、接続するリージョンの変更
- toolkitの簡単な説明(AWS Explorer/ AWS CDK Explorer / Visual Studio Code コマンドパレット
AWSマネジメントコンソールでLambda関数を作成する
-
いきなりローカル環境でのLambdaはちょっと、ということで、GUIで手軽にできるマネジメントコンソールを使う
-
hello-lambdaの参考
https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/
-
AWSマネジメントコンソールに接続し、サービスからLambdaを選択する
-
「関数の作成」ボタンを押す
-
- 選び、入力した内容の例
sugimoto-hello-lambda-python Python3.8 基本的な Lambda アクセス権限で新しいロールを作成
-
テストをしてみます
オレンジ色のTestボタンを押して、イベントテンプレート「hello-world」、イベント名は何らか入力して、他はデフォルトのまま、「作成」ボタンを押す
AWS toolkitで作成したLambdaを表示する
-
先にAWSマネジメントコンソールで作成したLambda関数の「sugimoto-hello-lambda-python」を選択
-
保存場所で
/workspaces
を選ぶと、その直下に関数一式がダウンロードされるroot ➜ /workspaces $ ls -la total 24 drwxr-xr-x 1 root root 4096 Aug 8 12:44 . drwxr-xr-x 1 root root 4096 Aug 6 07:04 .. drwxr-xr-x 5 root root 4096 Aug 8 11:46 .venv. drwxr-xr-x 2 root root 4096 Aug 8 12:44 .vscode drwxr-xr-x 2 root root 4096 Aug 8 12:44 sugimoto-hello-lambda-python
{ "configurations": [ { "type": "aws-sam", "request": "direct-invoke", "name": "sugimoto-hello-lambda-python:lambda_function.lambda_handler (python3.8)", "invokeTarget": { "target": "code", "projectRoot": "${workspaceFolder}/sugimoto-hello-lambda-python", "lambdaHandler": "lambda_function.lambda_handler" }, "lambda": { "runtime": "python3.8", "payload": {}, "environmentVariables": {} } } ] }
ローカルからLambdaを実行する
-
AWS Explorerで、「invoke on AWS」を選択し、「Or, use a sample request payload from a template 」で「Hello World」を選び、「invoke」ボタンを押す
- コンソールログに実行結果が表示される