6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Toolkitの使用例(AWS Lambdaのリモート実行)

Last updated at Posted at 2021-08-08

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 frameworksamcdkを使う方が良いです
  • 間違って別の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関数を作成する

  1. AWSマネジメントコンソールに接続し、サービスからLambdaを選択する

  2. 「関数の作成」ボタンを押す

  3. 関数を定義
    image.png

    • 選び、入力した内容の例
    sugimoto-hello-lambda-python
    Python3.8
    基本的な Lambda アクセス権限で新しいロールを作成
    
  4. Lambda functionができました
    01.png

  5. テストをしてみます
    オレンジ色のTestボタンを押して、イベントテンプレート「hello-world」、イベント名は何らか入力して、他はデフォルトのまま、「作成」ボタンを押す
    image.png

  6. Testを押すと、先に設定したイベントが表示されるので選択する
    image.png

  7. 実行結果
    image.png

AWS toolkitで作成したLambdaを表示する

  1. VSCodeの 左サイドバーのAWSを選択 , EXplorer ->Lambdaを開く
    image.png

  2. 先にAWSマネジメントコンソールで作成したLambda関数の「sugimoto-hello-lambda-python」を選択
    image.png

  3. クリックして、「Download」を選択
    image.png

  4. 保存場所で /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
    
    • VSCodeでファイルを開くと
      image.png
      image.png
    {
        "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を実行する

  1. AWS Explorerで、「invoke on AWS」を選択し、「Or, use a sample request payload from a template 」で「Hello World」を選び、「invoke」ボタンを押す

    10.png

    • コンソールログに実行結果が表示される

ローカルで編集したソースをアップロード

  1. VSCodeでソースを変更

    image.png

    Hello from Lambda! mod local machine に変更

  • AWS Explorerで変更するLambdaを選び、「Uplodad Lambda」を押す
    12.png
  • アップロードするソースのあるディレクトリを選択する、zipではない
    13.png
  • zipではなく、directoryを使う(Yesを選択)
    14.png
  • 「This will immediately publish the selected code as the$LATEST bersion of Lambda:....」にてYes を選択 Latestのバージョンでアップロード
    15.png
  • yesを選んだ後
    16.png
  • クラウド側にアップロードされ、Lambda関数が更新される
    17.png
    18.png
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?