Toolkit を使用した AWS サーバーレスアプリケーションの操作 AWS - AWS Cloud9

AWS Cloud9 は、新規顧客には利用できなくなりました。 AWS Cloud9 の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Toolkit を使用した AWS サーバーレスアプリケーションの操作 AWS

AWS ツールキットは、サーバーレスアプリケーション をサポートします。Toolkit を使用すると AWS 、 AWS Lambda関数を含むサーバーレスアプリケーションを作成し、アプリケーションを AWS CloudFormation スタックにデプロイできます。

サーバーレスアプリケーションの作成

この例では、 AWS Toolkit を使用してサーバーレスアプリケーションを作成する方法を示します。サーバーレスアプリケーションの実行とデバッグの詳細については、「サーバーレスアプリケーションの実行とデバッグ」を参照してください。

サーバーレスアプリケーションを作成するために必要な前提条件には、 AWS SAM CLIAWS CLIが含まれます。これらは に含まれています AWS Cloud9。がインストールされ AWS SAM CLIていない場合、または古い場合は、インストールまたはアップグレードの実行が必要になる場合があります。のインストール方法については AWS SAM CLI、「 のインストール AWS SAM CLI」を参照してください。 をアップグレードする方法については AWS SAM CLI、「 のアップグレード AWS SAM CLI」を参照してください。

AWS ツールキットでサーバーレスアプリケーションを作成

この例では、 AWS Serverless Application Model (AWS SAM) を使用して AWS Toolkit でサーバーレスアプリケーションを作成する方法を示します。

  1. AWS Explorer で、Lambda ノードのコンテキスト (右クリック) メニューを開き、Lambda SAMアプリケーションの作成 を選択します。

    注記

    または、 AWS: Explorer 見出しから の向こうにあるメニューアイコンを選択し、Lambda SAMアプリケーションの作成 を選択します。

  2. SAM アプリケーションのランタイムを選択します。この例では、[nodejs12.x]を選択します。

    注記

    「(Image)」を含むランタイムの 1 つを選択した場合、アプリケーションのパッケージタイプは Image です。「(Image)」を含まないランタイムの 1 つを選択した場合、アプリケーションは Zip タイプです。Image および Zip パッケージタイプの違いの詳細については、AWS Lambda デベロッパーガイドの「Lambda デプロイパッケージ」を参照してください。

  3. サーバーレスアプリケーションに以下のいずれかのテンプレートを選択します。

    • AWS SAM Hello World : クラシック「Hello World」メッセージを返す Lambda 関数を含む基本的なテンプレート。

    • AWS Step Functions サンプルアプリケーション: 株式取引ワークフローを実行するサンプルアプリケーション。ステップ関数は、関与する Lambda 関数の相互作用をオーケストレートします。

  4. 新しいプロジェクトの場所を選択します。既存のワークスペースフォルダがある場合は、これを選択できます。それ以外の場合は、別のフォルダを参照して選択します。[Select a different folder] (別のフォルダを選択) を選択すると、ダイアログボックスが表示され、フォルダの場所を選択できます。

  5. 新しいアプリケーションの名前を入力します。この例では my-sam-app-nodejs を使用します。Enter を押すと、 AWS Toolkit はプロジェクトの作成に少し時間がかかります。

プロジェクトが作成されると、[環境] ウィンドウにアプリケーションのファイルを表示できます。[Explorer] ウィンドウに表示されていることを確認します。

SAM アプリケーションで使用可能なランタイムを示すスクリーンショット。

サーバーレスアプリケーションの実行とデバッグ

Toolkit を使用して AWS 、サーバーレスアプリケーションをデバッグし、開発環境でローカルで実行する方法を設定できます。 AWS Serverless Application Model (AWS SAM) テンプレートで定義されたサーバーレスアプリケーションをデバッグできます。このテンプレートは、シンプルなYAML構文を使用して、サーバーレスアプリケーションを構成する関数APIs、、データベース、イベントソースマッピングなどのリソースを記述します。

AWS SAM テンプレートの詳細については、「 デベロッパーガイド」のAWS SAM 「 テンプレートの構造」を参照してください。 AWS Serverless Application Model

または、SAMテンプレートにコミットされていないサーバーレスアプリケーションを迅速にデバッグすることもできます。

インラインアクションを使用して対象となる AWS Lambda 関数を識別することで、デバッグ動作の設定を開始します。SAM テンプレートで定義されたインフラストラクチャを使用するには、関連する YAML形式のファイルでインラインアクションを使用します。テンプレートなしで関数を直接テストするには、アプリケーションファイルの Lambda ハンドラーのコンテキストに応じたリンクを使用します。

注記

この例では、 を使用するアプリケーションをデバッグします JavaScript。ただし、 AWS Toolkit で使用できるデバッグ機能は、次の言語とランタイムで使用できます。

  • JavaScript – Node.js 10.x 、12.x 、14.x

  • Python – 3.7、3.8、3.9、3.10 (Python 2.7 および 3.6 サーバーレスアプリケーションは実行できますが、 AWS ツールキットではデバッグできません)。

言語の選択は、コンテキストに応じたリンクが適格な Lambda ハンドラーを示す方法にも影響します。詳細については、「コードからサーバーレス関数を直接実行およびデバッグ」を参照してください。

SAM テンプレートを使用したサーバーレスアプリケーションの実行とデバッグ

SAM テンプレートを使用して実行およびデバッグされるアプリケーションの場合、 YAML形式のファイルはアプリケーションの動作と使用するリソースを記述します。 AWS Toolkit を使用してサーバーレスアプリケーションを作成すると、プロジェクト用に template.yaml という名前のファイルが自動的に生成されます。

この手順では、サーバーレスアプリケーションの作成 で作成したサンプルアプリケーションを使用します。

SAM テンプレートを使用してサーバーレスアプリケーションを実行およびデバッグするには

  1. サーバーレスアプリケーションを構成するアプリケーションファイルを表示するには、[環境 ]ウィンドウに移動します。

  2. アプリケーションフォルダ ( などmy-sample-app) から template.yaml ファイルを開きます。

  3. template.yaml で、[Edit Launch Configuration] (起動設定の編集) を選択します。

    新しいエディタに表示されるlaunch.jsonファイルは、デフォルト属性があるデバッグ設定を提供します。

  4. 次の設定プロパティの値を編集または確認します。

    • "name" – 読みやすい名前を入力して、[実行] ビューの [設定] ドロップダウンフィールドに表示します。

    • "target" – 値が "template" であることを確認します。これにより、SAMテンプレートがデバッグセッションのエントリポイントになります。

    • "templatePath"template.yaml ファイルに相対パスまたは絶対パスを入力。

    • "logicalId" – 名前がSAMテンプレートのリソースセクションで指定されている名前と一致することを確認します。この場合はタイプ AWS::Serverless::FunctionHelloWorldFunction です。

    launch.json ファイル内のこれらと他の入力に関する詳細は、「サーバーレスアプリケーションのデバッグ用設定オプション」を参照してください。

  5. デバッグ設定に問題がなければ、launch.json を保存します。次に、 の横にある緑色の「再生」ボタンを選択してデバッグRUNを開始します。

    注記

    SAM アプリケーションの実行に失敗した場合は、出力ウィンドウをチェックして、エラーが Docker イメージが構築されていないために発生したかどうかを確認します。環境でディスク容量の解放が必要になる場合があります。

    詳細については、「AWS Cloud9 環境に十分なディスク容量がないため、 AWS Toolkit で SAM アプリケーションをローカルで実行中にエラーが発生しました」を参照してください。

    デバッグセッションが開始されると、DEBUGCONSOLEパネルにデバッグ出力が表示され、Lambda 関数によって返される値がすべて表示されます。SAM アプリケーションをデバッグする場合、AWS ツールキット出力パネルの出力チャネルとして選択されます。

    注記

    Windows ユーザーの場合、このプロセス中に Docker マウントエラーが表示されたら、[Docker Settings] (Docker 設定) で共有ドライブの認証情報を 更新する必要があります。Docker マウントエラーは次のように表示されます。

    Fetching lambci/lambda:nodejs10.x Docker container image...... 2019-07-12 13:36:58 Mounting C:\Users\<username>\AppData\Local\Temp\ ... as /var/task:ro,delegated inside runtime container Traceback (most recent call last): ...requests.exceptions.HTTPError: 500 Server Error: Internal Server Error ...

コードからサーバーレス関数を直接実行およびデバッグ

AWS SAM アプリケーションをテストするときは、Lambda 関数のみを実行およびデバッグすることを選択できます。SAM テンプレートで定義されている他のリソースを除外します。このアプローチでは、インラインアクションを使用して、直接呼び出すことができる、ソースコード内の Lambda 関数ハンドラーを特定します。

コンテキスト対応リンクによって検出される Lambda ハンドラーは、アプリケーションで使用している言語とランタイムによって異なります。

言語/ランタイム Lambda 関数をコンテキスト対応リンクで特定するための条件

JavaScript (Node.js 10.x、12.x、および 14.x)

関数には以下の特徴があります。
  • 最大 3 つのパラメータがあるエクスポートされた関数です。

  • WorkSpaces フォルダー内の親フォルダーにpackage.json ファイルがあります。

Python (3.7、3.8、3.9、3.10)

関数には以下の特徴があります。
  • 上位レベルの関数です。

  • WorkSpace フォルダー内の親フォルダーにrequirements.txt ファイルがあります。

サーバーレスアプリケーションをアプリケーションコードから直接実行およびデバッグ

  1. サーバーレスアプリケーションのファイルを表示するには、エディタの横にあるフォルダアイコンを選択して、アプリケーションフォルダに移動します。

  2. アプリケーションフォルダ ( などmy-sample-app) から、関数フォルダ (この例では hello-world ) を展開し、 app.js ファイルを開きます。

  3. 対象の Lambda ハンドラー関数を識別するインラインアクションで、Add Debug Configuration を選択します。[Add debug configuration] (デバッグ設定の追加) オプションが表示されない場合は、コードレンズを有効にする必要があります。コードレンズを有効にするには、「AWS Toolkit コードレンズの有効化 」を参照してください。

    Lambda 関数ハンドラーのインラインアクション内の [Add Debug Configuration] オプションにアクセスします。
  4. SAM アプリケーションを実行するランタイムを選択します。

  5. launch.json ファイルのエディターでは、次の設定プロパティの値を編集または確認します。

    • "name" – 分かりやすい名前を入力します。

    • "target" – 値が "code" で、Lambda 関数ハンドラを直接呼び出せることを確認します。

    • "lambdaHandler" – 関数を呼び出すために Lambda が呼び出すコード内のメソッドの名前を入力します。例えば、 のアプリケーションの場合 JavaScript、デフォルトは ですapp.lambdaHandler

    • "projectRoot" – Lambda 関数を含むアプリケーションファイルにパスを入力します。

    • "runtime" – Lambda 実行環境の有効なランタイム ("nodejs.12x" など) を入力または確認します。

    • "payload" – 以下のいずれかのオプションを選択して、Lambda 関数に入力として提供するイベントペイロードを定義します。

      • "json": イベントペイロードを定義する JSON形式のキーと値のペア。

      • "path": イベントペイロードとして使用されるファイルへのパス。

  6. デバッグ設定に問題がなければ、 の横にある緑色の再生矢印を選択してデバッグRUNを開始します。

    デバッグセッションが開始されると、DEBUGCONSOLEパネルにデバッグ出力が表示され、Lambda 関数によって返される値がすべて表示されます。SAM アプリケーションをデバッグする場合、AWS Toolkit出力パネルの出力チャネルとして選択されます。

    注記

    エラーメッセージに Docker が記載されている場合は、この注記を参照してください。

ローカル Amazon API Gateway リソースの実行とデバッグ

で指定された Gateway ローカルリソースを実行またはデバッグ AWS SAM APIできますtemplate.yaml。そのためには、 type=aws-samで の AWS Cloud9 起動設定を実行しますinvokeTarget.target=api

注記

API Gateway は 2 種類の をサポートしていますAPIs。これらは RESTと HTTP ですAPIs。ただし、 AWS Toolkit の API Gateway 機能は REST のみをサポートしますAPIs。HTTP APIs 「ゲートウェイ V2API」と呼ばれることもありますAPIs。

ローカルAPIゲートウェイリソースを実行およびデバッグするには
  1. ゲートウェイ AWS SAM APIリソースの起動設定を作成するには、次のいずれかの方法を選択します。

    • オプション 1: AWS SAM プロジェクトのハンドラーソースコード (特に .js、.cs、または .py ファイル) にアクセスし、Lambda ハンドラーにカーソルを合わせて、[Add debug configuration] (デバッグ設定の追加) を選択します。[Add debug configuration] (デバッグ設定の追加) オプションが表示されない場合は、コードレンズを有効にします。コードレンズを有効にするには、「AWS Toolkit コードレンズの有効化 」を参照してください。次に、メニューで、APIEvent とマークされた項目を選択します。

    • オプション 2 launch.json を編集して、次の構文を使用して新しい起動設定を作成します。

      { "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} } }, "sam": {}, "aws": {} }
  2. [Run] (実行) ボタンの横のドロップダウンメニューで、起動設定を選択します (上の例では myConfig という名前です)。

  3. (オプション) Lambda プロジェクトコードにブレークポイントを追加します。

  4. 緑の「再生」ボタンの横にある[Run (実行)]ボタンを選択します。

  5. 出力ペインで、結果を表示します。

構成

invokeTarget.target プロパティ値 api を使用すると、ツールキットは起動設定の検証と動作を変更して、api フィールドをサポートします。

{ "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} }, "querystring": "abc=def&qrs=tuv", "headers": { "cookie": "name=value; name2=value2; name3=value3" } }, "sam": {}, "aws": {} }

例の値を、次のように置き換えます。

invokeTarget.logicalId

API リソース。

パス

起動設定がリクエストするAPIパス (例: "path": "/hello")。

で指定された から解決template.yamlされた有効なAPIパスである必要がありますinvokeTarget.templatePath

httpMethod

「delete」、「get」、「head」、「options」、「patch」、「post」、「put」のいずれかの動詞とすることができます。

payload

lambda.payload フィールドと同じ構造とルールでリクエストに送信するJSONペイロード (HTTP本文)。

payload.path はペイJSONロードを含むファイルを指します。

payload.json はJSONペイロードをインラインで指定します。

headers

名前と値のペアのオプションのマップ。これを使用して、リクエストに含めるHTTPヘッダーを指定します。

"headers": { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5", "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", "cookie": "name=value; name2=value2; name3=value3", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", }
querystring

(オプション) この文字列を使用してリクエストの querystring を設定します (例: "querystring": "abc=def&ghi=jkl")。

aws

AWS 接続情報の提供方法。詳細については、サーバーレスアプリケーションのデバッグ用設定オプションAWS 接続 (aws) プロパティ表を参照してください。

SAM

が AWS SAM CLIアプリケーションを構築する方法。詳細については、「」のAWS SAM CLI「(sam"") プロパティ」を参照してくださいサーバーレスアプリケーションのデバッグ用設定オプション

サーバーレスアプリケーションの同期

この例では、 AWS Toolkit for Visual Studio Codeを使用して、前のトピック(「サーバーレスアプリケーションの作成」) で作成したサーバーレスアプリケーションを AWS に同期する方法を示します。

前提条件

  • グローバルに一意な Amazon S3 バケット名を必ず選択します。

  • で設定した認証情報に、Amazon S3、、および Amazon Gateway のサービスへの適切な読み取り/書き込みアクセスが含まれていることを確認します。 AWS CloudFormation AWS Lambda API

  • デプロイタイプが のアプリケーションの場合Image、デプロイURIに使用するグローバルに一意の Amazon S3 バケット名と Amazon ECRリポジトリの両方があることを確認します。

サーバーレスアプリケーションの同期

  1. AWS Explorer ウィンドウで、Lambda ノードのコンテキスト (右クリック) メニューを開き、SAMアプリケーション の同期を選択します。

  2. デプロイ AWS リージョン 先の を選択します。

  3. デプロイに使用する template.yaml ファイルを選択します。

  4. このデプロイで使用できる Amazon S3 バケットの名前を入力します。バケットは、デプロイ先のリージョンにある必要があります。

    警告

    Amazon S3 バケット名は、Amazon S3 内のどの既存バケット名とも重複しないグローバルに一意な名前である必要があります。次の例に示す名前に一意の識別子を追加するか、別の名前を選択します。

  5. サーバーレスアプリケーションにパッケージタイプ の関数が含まれている場合はImage、このデプロイで使用できる Amazon ECRリポジトリの名前を入力します。リポジトリは、デプロイ先のリージョンにある必要があります。

  6. デプロイしたスタックの名前 (新しいスタック名または既存のスタック名) を入力します。

  7. コンソールの[AWS ツールキット]タブ上のデプロイの成功を確認します。

    エラーが発生すると、右下にメッセージが表示されます。

    この場合は、[AWS ツールキット]タブのテキストで詳細をチェックします。以下に示しているのは、エラーの詳細の例です。

    Error with child process: Unable to upload artifact HelloWorldFunction referenced by CodeUri parameter of HelloWorldFunction resource. S3 Bucket does not exist. Execute the command to create a new bucket aws s3 mb s3://pbart-my-sam-app-bucket An error occurred while deploying a SAM Application. Check the logs for more information by running the "View AWS Toolkit Logs" command from the Command Palette.

    この例では、Amazon S3 バケットが存在しないため、エラーが発生しています。

デプロイが完了すると、アプリケーションが [AWS Explorer] に表示されます。アプリケーションの一部として作成した Lambda 関数の呼び出し方法については、「リモートの Lambda 関数を呼び出す」を参照してください。

AWS Toolkit コードレンズの有効化

  1. メニューバーで、[AWS Cloud9]、[設定]の順に選択します。

  2. [設定] タブで、サイドバーの [AWS ツールキット] を選択します。

  3. コードレンズを有効にするには、[Enable Code Lenses] (コードレンズを有効にする) を選択します。

AWS クラウドからのサーバーレスアプリケーションの削除

サーバーレスアプリケーションを削除するには、以前に AWS クラウドにデプロイした AWS CloudFormation スタックを削除する必要があります。この手順を実行しても、ローカルホストからアプリケーションディレクトリは削除されないことにご注意ください。

  1. AWS Explorer]を開きます。

  2. AWS Explorer]ウィンドウで、削除したいデプロイされたアプリケーションを含むリージョンを展開し、AWS CloudFormationを拡張します。

  3. 削除するサーバーレスアプリケーションに対応する AWS CloudFormation スタックの名前のコンテキスト (右クリック) メニューを開きます。次に、 CloudFormation スタックの削除 を選択します。

  4. 選択したスタックを削除したいことを確認する場合は、[削除 ]を選択します。

スタックの削除が成功すると、 AWS ツールキットは AWS Explorer のリストからスタック名 AWS CloudFormation を削除します。