LoginSignup
0
1

More than 3 years have passed since last update.

AWS Toolkit for Visual Studio CodeでLamdbaデバッグができるようになるまで(自分用メモ)

Last updated at Posted at 2020-07-12

前提

Installing the AWS SAM CLI on Windows

    Step 1: Create an AWS Account
    Step 2: Create an IAM User with Administrator Permissions
    Step 3: Install Docker
    Step 4: Install the AWS SAM CLI

dockerのインストールはlocalテストのみ
deploy目的のみであれば利用しなくてもよい
(それでも個別にAPIGateway、Lambdaをデプロイしてテストするより楽)

ただし、docker Toolboxを以前利用していた環境(WinHomeでwsl2利用)だとdockerのエラーになりがち
環境変数削除で復帰(docker-machineの更新はなくても可)
対処法参考:
https://www.nuits.jp/entry/docker-could-not-read-ca-certificate

python用仮想環境を作成

conda create -n myenv python=3.8

手順

Tutorial: Deploying a Hello World Application

#Step 1 - Download a sample application
sam init

#Step 2 - Build your application
cd sam-app
sam build

#Step 3 - Deploy your application
sam deploy --guided

Step1. sam init
テンプレートとなるファイル構成を作成する(ウィザード形式)

Which template source would you like to use?
1 - AWS Quick Start Templates

Which runtime would you like to use?
2 - python3.8

Project name [sam-app]: sample-sam

AWS quick start application templates:
1 - Hello World Example

nodeで作成する場合、「7 - nodejs10.x」を選択

Step2. Build your application
開発したコードおよび依存モジュールを.aws-sam\build以下に収集

cd sample-sam
sam build

Step3. Deploy your application
3-1. パッケージをS3へ格納
3-2. CloudFormation呼び出し
3-3. AWS CloudFormation stackとして結果出力

sam deploy --guided

Stack Name [sam-app]: sample-sam
AWS Region [us-east-1]: ap-northeast-1
Confirm changes before deploy [y/N]: y
Allow SAM CLI IAM role creation [Y/n]: Y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to samconfig.toml [Y/n]: Y
(略)
Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://<restapiid>.ap-northeast-1.amazonaws.com/Prod/hello/

Step3.5. デプロイの確認
3-a. 表示されたエンドポイントに対してcurlでリクエスト実行

curl https://<restapiid>.execute-api.us-east-1.amazonaws.com/Prod/hello/
{"message": "hello world"}

3-b. AWSConsoleで確認(IAM Role,Lambda, API Gateway, CloudFormation, S3)
Cloud Formation Stackは2つ作成されている(S3、それ以外)
sam cliによるS3へのパッケージ展開、Cloud Formation呼び出しが2つに分かれる
3-c. 削除するときはFormation Stackの単位で削除するとよい

Step 4: Testing Your Application Locally (Optional)

docker環境を利用して評価環境を立ち上げる
コードを更新すると自動的に反映される(start-apiを再び呼び出さなくてもよい)

sam local start-api

Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]

4.5 確認
4-a. エンドポイントに対してcurlでリクエスト実行

curl http://127.0.0.1:3000/hello/
{"message": "hello world"}

4-b. 呼び出し後のコンソール確認

[37mGET /hello/ HTTP/1.1[0m" 200 -

4-c. docker確認

docker image ls
lambci/lambda       python3.8

自動で保存される

docker container ls
3f10xxxxxxxx lambci/lambda:python3.8 "/var/rapid/init --b…"

リクエスト時のみ作成されてすぐ破棄される

4-d. Making One-off Invocations
sam local start-apiを呼び出さなくても起動、リクエスト送付、結果取得まで実施する

sam local invoke "HelloWorldFunction" -e events/event.json -d 5858

5. AWS Toolkit for Visual Studio Code

  1. VS CodeにAWS Toolkitをインストール
  2. AWS ExplorerからLambda呼び出し(on AWS)できる

5-a. ローカルで実行する場合(その1)
CodeLensのRun Localy
Debug Localyでデバッグ開始できそうであったが動作未確認

5-b. ローカルで実行されたものにアタッチ
以下をコードに追加

import ptvsd
ptvsd.enable_attach(address=('0.0.0.0', 5858), redirect_output=True)
ptvsd.wait_for_attach()

debugオプションをつけてstart-api、invokeを起動

sam local start-api --debug --debug-port 5858
sam local invoke "HelloWorldFunction" -e events/event.json -d 5858

Launch.jsonを以下の通り更新

"launch": {
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to SAM CLI",
            "type": "python",
            "request": "attach",
            "host": "localhost",
            "port": 5858,
            "pathMappings": [
            {
            "localRoot": "${workspaceRoot}/hello_world",
            "remoteRoot": "/var/task",
            }
            ],
        }
    ]
},

ブレークポイントを設定、してVSCodeからアタッチ

その他メモ

参考

0
1
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
0
1