Help us understand the problem. What is going on with this article?

AWS Toolkit for Visual Studio Code試す

More than 1 year has passed since last update.

はじめに

AWS Toolkit for Visual Studio Codeがリリースされたので試してみます。
SAM localと連携していて、VSCodeからローカルテストやAWS環境へのデプロイで実施することが可能になります。

https://www.publickey1.jp/blog/19/aws_toolkit_for_visual_studio_codeaws_lmabda.html
https://docs.aws.amazon.com/ja_jp/toolkit-for-vscode/latest/userguide/welcome.html

前提

MACでの作業を想定
awscliがインストールされていること
aws-sam-cliがインストールされていること※pythonは3.6.4以上が必要

pyenv local 3.6.4
pip install aws-sam-cli

手順

AWS Toolkit for Visual Studio Codeのインストール
AWSクレデンシャル設定
AWSに接続
アプリケーション作成
ローカルテスト
デプロイ

やってみる

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

左ペインでExtentionsをクリックする

image.png

「AWS Toolkit for Visual Studio Code」を検索してInstallをクリックする
image.png

左ペインにAWSアイコンが作成される
image.png

AWSクレデンシャル設定

CMD+Shift+PでExplorerを開いて、AWS: Create Credentials Profileを実行する。
image.png

~/.aws/credentialsファイルが開くので、アクセスキー・シークレットアクセスキーを入力する。

[vscode]
aws_access_key_id = XXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX

AWSに接続

左ペインでAWSアイコンをクリックする。
Connect to AWSをクリックする
image.png

作成したプロファイルを入力する
image.png

既存のCloudformationとLambdaが表示される

アプリケーション作成

Create new SAM Applicationをクリック
image.png

runtimeを指定する
image.png

Localのプロジェクトディレクトリを指定する
image.png

アプリケーションの名称を記載する
image.png

SAMのテンプレートファイルなどが作成される

$ tree My1stApp/
My1stApp/
├── README.md
├── event.json
├── hello-world
│   ├── app.js
│   ├── package.json
│   └── tests
│       └── unit
│           └── test-handler.js
└── template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  My1stApp

  Sample SAM Template for My1stApp

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs10.x
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn

ローカルテスト

作成されたapp.jsを開くと、「Run Locally」「Debug Locally」「Configure」が表示されており、それぞれをクリックすることで実行できる。
image.png

Run Locallyをクリックする。
sam localが実行され、テスト用のDockerイメージがダウンロードされて、テストが実行される。

Preparing to run app.lambdaHandler locally...
Building SAM Application...
Build complete.
Starting the SAM Application locally (see Terminal for output)
Running command: sam local invoke awsToolkitSamLocalResource --template /tmp/aws-toolkit-vscode/vsctk7VFCcJ/output/template.yaml --event /tmp/aws-toolkit-vscode/vsctk7VFCcJ/event.json --env-vars /tmp/aws-toolkit-vscode/vsctk7VFCcJ/env-vars.json
2019-07-17 12:25:29 Invoking app.lambdaHandler (nodejs10.x)

Fetching lambci/lambda:nodejs10.x Docker container image......
2019-07-17 12:25:33 Mounting /tmp/aws-toolkit-vscode/vsctk7VFCcJ/output/awsToolkitSamLocalResource as /var/task:ro,delegated inside runtime container

-略-

[32mREPORT RequestId: 52fdfc07-2182-154f-163f-5f0f9a621d72 Duration: 51.24 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 44 MB  [0m
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}
Local invoke of SAM Application has ended.

デプロイ

CMD+Shift+PでExplorerを開いて、AWS: Deploy SAM Applicationを実行する。
image.png

SAMのテンプレートファイルを選択する
image.png

デプロイ先のリージョンを指定する
image.png

S3バケットを指定する
image.png

Stack名を入力する
image.png

Starting SAM Application deployment...
Building SAM Application...
Packaging SAM Application to S3 Bucket: XXXX with profile: vscode
Deploying SAM Application to CloudFormation Stack: myapp with profile: vscode
Successfully deployed SAM Application to CloudFormation Stack: myapp with profile: vscode

デプロイしたLambda関数を右クリックして、Invoke on AWSをクリックする
image.png

localにあるevnet.jsonを指定してInvokeを実行
image.png

成功することを確認する。

Loading response...
Invocation result for arn:aws:lambda:ap-northeast-1:XXXXXX:function:myapp-HelloWorldFunction-EXCZ2RTGP7SE
Logs:
START RequestId: 1f4736fc-960b-4b98-9183-da8e978ebcf8 Version: $LATEST
END RequestId: 1f4736fc-960b-4b98-9183-da8e978ebcf8
REPORT RequestId: 1f4736fc-960b-4b98-9183-da8e978ebcf8  Duration: 106.54 ms Billed Duration: 200 ms     Memory Size: 128 MB Max Memory Used: 62 MB  


Payload:
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}

Loading response...
Invocation result for arn:aws:lambda:ap-northeast-1:XXXXXX:function:myapp-HelloWorldFunction-EXCZ2RTGP7SE
Logs:
START RequestId: b4a3420d-2ba8-4bdc-b21b-6b0f20b35252 Version: $LATEST
END RequestId: b4a3420d-2ba8-4bdc-b21b-6b0f20b35252
REPORT RequestId: b4a3420d-2ba8-4bdc-b21b-6b0f20b35252  Duration: 27.32 ms  Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 62 MB  


Payload:
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

atsumjp
Cloud Consultant, Google Cloud Professional Services. All views and opinions are my own. GCPサービスについて試してみた内容について書いていきたいと思います。 GCP<-AWS<-NetApp<-SES
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away