AWS Toolkit for Visual Studio CodeでLambdaを操作してみた

2020.11.30

DA事業本部の横山です。

Visual Studio Codeの拡張機能で、AWS上でのアプリケーションの作成、デバッグ、デプロイを支援してくれるAWS Toolkit for Visual Studio Codeがあります。
存在は知っていましたが実際に利用したことがなかったため、どんなことができるのか確認しまとめたいと思います。

はじめに

AWS Toolkit for Visual Studio Codeを利用するには、AWSアカウントの作成、Visual Studio Codeのインストール、AWS Toolkit for Visual Studio Codeのインストールが必要となります。手順については公式ドキュメントのリンクを記載しますので本記事では割愛させていただきます。

AWS Toolkit for Visual Studio Codeのインストール

ちなみに、AWSアカウントを所持しておりAWS CLIで認証情報を設定済み、Visual Studio Codeをインストール済みの方は、Visual Studio Codeの拡張機能からAWS Toolkit for Visual Studio Codeをインストールしてください。どのプロファイルを使用するか等のナビゲーションが行われますので特に困ることなく設定可能だと思われます。

設定が完了すると、AWS Explorerが表示され各AWSリソースの参照が可能になります。

概要

AWS Toolkit for Visual Studio Codeは、次の機能が含まれています。
今回は、Lambda で可能な操作について確認していきます。

  • AWS Explorer
  • 資格情報と地域の管理
  • Amazon EC2
  • AWS Lambda
  • AWS CodeCommit
  • Amazon DynamoDB
  • Amazon S3
  • Amazon RDS
  • AWS Elastic Beanstalk
  • AWS CloudFormation
  • AWS Identity and Access Management(IAM)
  • AWS CloudWatch Logs

ロググループとログストリームの表示

VSCodeの左ペインからAWS Explorerを開きます。Lambdaのプルダウンを開くと、関数のリストが表示されます。

任意の関数の名前を右クリックし、「Invoke on AWS」を選択します。

エディタ部にInvoke用のイベント内容を入力するUIが表示されるので、ファイルを選択するかテンプレートを利用するか、任意のJSONを入力します。
今回は「S3 Put」を選択し、S3のPutイベントサンプルをイベント内容としてLambdaを起動したいと思います。

「S3 Put」のイベント内容は下記でした。

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "{region}",
      "eventTime": "1970-01-01T00:00:00Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "EXAMPLE123456789",
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "sourcebucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          },
          "arn": "arn:{partition}:s3:::mybucket"
        },
        "object": {
          "key": "HappyFace.jpg",
          "size": 1024,
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901"
        }
      }
    }
  ]
}

今回実行するLambdaのコードは下記です。起動時に渡されたイベント内容をprintするだけのLambdaとなっています。

import json

def lambda_handler(event, context):
    print(json.dumps(event, indent=2))
    return {
        'status': 200
    }

一番下にある「Invoke」を押下すると実際にLambdaが実行され、出力タブに「AWS Lambda」の出力として以下の情報が表示されました。

Loading response...
Invocation result for arn:aws:lambda:ap-northeast-1:0000000000:function:cm-yokoyama-test
Logs:
START RequestId: 27e07e6e-cf10-4951-8455-f9a9f7fb5ffa Version: $LATEST
{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "{region}",
      "eventTime": "1970-01-01T00:00:00Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "EXAMPLE123456789",
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "sourcebucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          },
          "arn": "arn:{partition}:s3:::mybucket"
        },
        "object": {
          "key": "HappyFace.jpg",
          "size": 1024,
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901"
        }
      }
    }
  ]
}
END RequestId: 27e07e6e-cf10-4951-8455-f9a9f7fb5ffa
REPORT RequestId: 27e07e6e-cf10-4951-8455-f9a9f7fb5ffa	Duration: 1.29 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 52 MB	


Payload:
{"status": 200}

InvokeされたLamdaのARN、CloudWatch Logsに出力されたログ内容、returnされたPayload内容が確認できます。 動作確認をする分には十分な内容ではないでしょうか。

AWSコンソールを確認せずに気軽にLambdaをVSCodeから実行できるのはとても便利ですね。

Lambdaの関数名とARNのコピー

任意の関数の名前を右クリックすると表示される、Copy Name, Copy ARNを選択すると関数の名前とARNのコピーを行うことができます。

Lambdaの削除

任意の関数の名前を右クリックすると表示される、Delete...を選択すると関数の削除を行うことができます。

選択すると下記のように確認モーダルが表示されるのでYesを押下することで実際に削除可能です。

注意点
この削除機能を用いて、CloudFormationに関連付けられているLambda関数を削除しないでください。 これらの関数は、CloudFormationスタックを介して削除する必要があります。

まとめ

AWS Toolkit for Visual Studio Codeを利用して、Lambdaで行える操作についてまとめてみました。
結果としてLambdaの実行、実行結果の確認、関数の削除が行えることがわかりました。
VSCode上から手軽にLambdaを実行したい、実行結果を確認したいといった目的として使う分には便利なものであると感じました。

さいごに

AWSもVisual Studio Codeも利用しているが、AWS Toolkit for Visual Studio Codeは使ったことがないという方が少しでも興味を持っていただければ幸いです。

以上になります。ドキュメントは英語になりますがスクリーンショット付きでわかりやすいのでみなさんも是非触ってみてください。