AWS Cloud9 は、新規顧客には利用できなくなりました。 AWS Cloud9 の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Toolkit を使用した AWS サーバーレスアプリケーションの操作 AWS
AWS ツールキットは、サーバーレスアプリケーション
トピック
サーバーレスアプリケーションの作成
この例では、 AWS Toolkit を使用してサーバーレスアプリケーションを作成する方法を示します。サーバーレスアプリケーションの実行とデバッグの詳細については、「サーバーレスアプリケーションの実行とデバッグ」を参照してください。
サーバーレスアプリケーションを作成するために必要な前提条件には、 AWS SAM CLIと AWS 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 でサーバーレスアプリケーションを作成する方法を示します。
-
AWS Explorer で、Lambda ノードのコンテキスト (右クリック) メニューを開き、Lambda SAMアプリケーションの作成 を選択します。
注記
または、 AWS: Explorer 見出しから の向こうにあるメニューアイコンを選択し、Lambda SAMアプリケーションの作成 を選択します。
-
SAM アプリケーションのランタイムを選択します。この例では、[nodejs12.x]を選択します。
注記
「(Image)」を含むランタイムの 1 つを選択した場合、アプリケーションのパッケージタイプは
Image
です。「(Image)」を含まないランタイムの 1 つを選択した場合、アプリケーションはZip
タイプです。Image
およびZip
パッケージタイプの違いの詳細については、AWS Lambda デベロッパーガイドの「Lambda デプロイパッケージ」を参照してください。 -
サーバーレスアプリケーションに以下のいずれかのテンプレートを選択します。
-
AWS SAM Hello World : クラシック「Hello World」メッセージを返す Lambda 関数を含む基本的なテンプレート。
-
AWS Step Functions サンプルアプリケーション: 株式取引ワークフローを実行するサンプルアプリケーション。ステップ関数は、関与する Lambda 関数の相互作用をオーケストレートします。
-
-
新しいプロジェクトの場所を選択します。既存のワークスペースフォルダがある場合は、これを選択できます。それ以外の場合は、別のフォルダを参照して選択します。[Select a different folder] (別のフォルダを選択) を選択すると、ダイアログボックスが表示され、フォルダの場所を選択できます。
-
新しいアプリケーションの名前を入力します。この例では
my-sam-app-nodejs
を使用します。Enter を押すと、 AWS Toolkit はプロジェクトの作成に少し時間がかかります。
プロジェクトが作成されると、[環境] ウィンドウにアプリケーションのファイルを表示できます。[Explorer] ウィンドウに表示されていることを確認します。
サーバーレスアプリケーションの実行とデバッグ
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 テンプレートを使用してサーバーレスアプリケーションを実行およびデバッグするには
-
サーバーレスアプリケーションを構成するアプリケーションファイルを表示するには、[環境 ]ウィンドウに移動します。
-
アプリケーションフォルダ ( などmy-sample-app) から
template.yaml
ファイルを開きます。 -
template.yaml
で、[Edit Launch Configuration] (起動設定の編集) を選択します。新しいエディタに表示される
launch.json
ファイルは、デフォルト属性があるデバッグ設定を提供します。 -
次の設定プロパティの値を編集または確認します。
-
"name"
– 読みやすい名前を入力して、[実行] ビューの [設定] ドロップダウンフィールドに表示します。 -
"target"
– 値が"template"
であることを確認します。これにより、SAMテンプレートがデバッグセッションのエントリポイントになります。 -
"templatePath"
–template.yaml
ファイルに相対パスまたは絶対パスを入力。 -
"logicalId"
– 名前がSAMテンプレートのリソースセクションで指定されている名前と一致することを確認します。この場合はタイプAWS::Serverless::Function
のHelloWorldFunction
です。
launch.json
ファイル内のこれらと他の入力に関する詳細は、「サーバーレスアプリケーションのデバッグ用設定オプション」を参照してください。 -
-
デバッグ設定に問題がなければ、
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) |
関数には以下の特徴があります。
|
Python (3.7、3.8、3.9、3.10) |
関数には以下の特徴があります。
|
サーバーレスアプリケーションをアプリケーションコードから直接実行およびデバッグ
-
サーバーレスアプリケーションのファイルを表示するには、エディタの横にあるフォルダアイコンを選択して、アプリケーションフォルダに移動します。
-
アプリケーションフォルダ ( などmy-sample-app) から、関数フォルダ (この例では hello-world ) を展開し、
app.js
ファイルを開きます。 -
対象の Lambda ハンドラー関数を識別するインラインアクションで、
Add Debug Configuration
を選択します。[Add debug configuration] (デバッグ設定の追加) オプションが表示されない場合は、コードレンズを有効にする必要があります。コードレンズを有効にするには、「AWS Toolkit コードレンズの有効化 」を参照してください。 -
SAM アプリケーションを実行するランタイムを選択します。
-
launch.json
ファイルのエディターでは、次の設定プロパティの値を編集または確認します。-
"name"
– 分かりやすい名前を入力します。 -
"target"
– 値が"code"
で、Lambda 関数ハンドラを直接呼び出せることを確認します。 -
"lambdaHandler"
– 関数を呼び出すために Lambda が呼び出すコード内のメソッドの名前を入力します。例えば、 のアプリケーションの場合 JavaScript、デフォルトは ですapp.lambdaHandler
。 -
"projectRoot"
– Lambda 関数を含むアプリケーションファイルにパスを入力します。 -
"runtime"
– Lambda 実行環境の有効なランタイム ("nodejs.12x"
など) を入力または確認します。 -
"payload"
– 以下のいずれかのオプションを選択して、Lambda 関数に入力として提供するイベントペイロードを定義します。-
"json"
: イベントペイロードを定義する JSON形式のキーと値のペア。 -
"path"
: イベントペイロードとして使用されるファイルへのパス。
-
-
-
デバッグ設定に問題がなければ、 の横にある緑色の再生矢印を選択してデバッグ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ゲートウェイリソースを実行およびデバッグするには
-
ゲートウェイ 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": {} }
-
-
[Run] (実行) ボタンの横のドロップダウンメニューで、起動設定を選択します (上の例では
myConfig
という名前です)。 -
(オプション) Lambda プロジェクトコードにブレークポイントを追加します。
-
緑の「再生」ボタンの横にある[Run (実行)]ボタンを選択します。
-
出力ペインで、結果を表示します。
構成
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リポジトリの両方があることを確認します。
サーバーレスアプリケーションの同期
-
AWS Explorer ウィンドウで、Lambda ノードのコンテキスト (右クリック) メニューを開き、SAMアプリケーション の同期を選択します。
-
デプロイ AWS リージョン 先の を選択します。
-
デプロイに使用する
template.yaml
ファイルを選択します。 -
このデプロイで使用できる Amazon S3 バケットの名前を入力します。バケットは、デプロイ先のリージョンにある必要があります。
警告
Amazon S3 バケット名は、Amazon S3 内のどの既存バケット名とも重複しないグローバルに一意な名前である必要があります。次の例に示す名前に一意の識別子を追加するか、別の名前を選択します。
-
サーバーレスアプリケーションにパッケージタイプ の関数が含まれている場合は
Image
、このデプロイで使用できる Amazon ECRリポジトリの名前を入力します。リポジトリは、デプロイ先のリージョンにある必要があります。 -
デプロイしたスタックの名前 (新しいスタック名または既存のスタック名) を入力します。
-
コンソールの[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 コードレンズの有効化
-
メニューバーで、[AWS Cloud9]、[設定]の順に選択します。
-
[設定] タブで、サイドバーの [AWS ツールキット] を選択します。
-
コードレンズを有効にするには、[Enable Code Lenses] (コードレンズを有効にする) を選択します。
AWS クラウドからのサーバーレスアプリケーションの削除
サーバーレスアプリケーションを削除するには、以前に AWS クラウドにデプロイした AWS CloudFormation スタックを削除する必要があります。この手順を実行しても、ローカルホストからアプリケーションディレクトリは削除されないことにご注意ください。
-
[AWS Explorer]を開きます。
-
[AWS Explorer]ウィンドウで、削除したいデプロイされたアプリケーションを含むリージョンを展開し、AWS CloudFormationを拡張します。
-
削除するサーバーレスアプリケーションに対応する AWS CloudFormation スタックの名前のコンテキスト (右クリック) メニューを開きます。次に、 CloudFormation スタックの削除 を選択します。
-
選択したスタックを削除したいことを確認する場合は、[削除 ]を選択します。
スタックの削除が成功すると、 AWS ツールキットは AWS Explorer のリストからスタック名 AWS CloudFormation を削除します。