AWS Cloud9 は、新規顧客には利用できなくなりました。 AWS Cloud9 の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Toolkit AWS は、サーバーレスアプリケーションの
サーバーレスアプリケーションの作成
この例では、 AWS Toolkit を使用してサーバーレスアプリケーションを作成する方法を示します。サーバーレスアプリケーションの実行とデバッグの詳細については、「サーバーレスアプリケーションの実行とデバッグ」を参照してください。
サーバーレスアプリケーションを作成するために必要な前提条件には、AWS SAM CLI と AWS CLI が含まれます。これらは に含まれています AWS Cloud9。CLI AWS SAM がインストールされていない場合、または古い場合は、インストールまたはアップグレードを実行する必要があります。 AWS SAM CLI をインストールする方法については、AWS SAM 「CLI のインストール」を参照してください。また、CLI AWS SAM のアップグレード方法については、AWS SAM 「CLI のアップグレード」を参照してください。
AWS ツールキットでサーバーレスアプリケーションを作成
この例では、 AWS Serverless Application Model (AWS SAM) を使用して AWS Toolkit でサーバーレスアプリケーションを作成する方法を示します。
-
[AWS Explorer] で [Lambda] ノードを右クリックしてコンテキストメニューを開き、[Create Lambda SAM Application] (Lambda SAM アプリケーションの作成) を選択します。
注記
または、[AWS: Explorer] のリストからメニューアイコンを選択し、[Create Lambda SAM Application] (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] ウィンドウに表示されていることを確認します。

サーバーレスアプリケーションの実行とデバッグ
AWS Toolkit を使用して、サーバーレスアプリケーションをデバッグし、開発環境でローカルで実行する方法を設定できます。 AWS Serverless Application Model (AWS SAM) テンプレートで定義されたサーバーレスアプリケーションをデバッグできます。このテンプレートは、シンプルな YAML 構文を使用して、サーバーレスアプリケーションを構成する関数、API、データベース、API、データベース、イベントソースのマッピングなどのリソースを記述します。
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 Toolkit によってデバッグすることはできません)。
言語の選択は、コンテキストに応じたリンクが適格な 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 テンプレートの [Resources] (リソース) セクションに指定されている名前と一致することを確認します。この場合はタイプAWS::Serverless::Function
のHelloWorldFunction
です。
launch.json
ファイル内のこれらと他の入力に関する詳細は、「サーバーレスアプリケーションのデバッグ用設定オプション」を参照してください。 -
-
デバッグ設定に問題がなければ、
launch.json
を保存します。次に、RUN の横の緑色の[play] (再生) ボタンを選択してデバッグを開始します。注記
SAM アプリケーションの実行に失敗した場合は、[出力]ウィンドウをチェックして、Docker イメージが構築されていないためにエラーが発生しているかどうかを確認します。環境でディスク容量の解放が必要になる場合があります。
詳細については、「AWS Cloud9 環境に十分なディスク容量がないため、 AWS Toolkit で SAM アプリケーションをローカルで実行中にエラーが発生しました」を参照してください。
デバッグセッションを開始すると、[DEBUG CONSOLE] (デバッグコンソール) パネルにデバッグ出力が表示され、Lambda 関数から返された値が表示されます。SAM アプリケーションをデバッグする場合、AWS ツールキットを [Output] (出力) パネルの [Output] (出力) チャネルとして選択します。
注記
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]の横の緑の再生矢印を選択して、デバッグをスタートします。
デバッグセッションが開始すると、[DEBUG CONSOLE] (デバッグコンソール) パネルにデバッグ出力が表示され、Lambda 関数から返された値が表示されます。SAM アプリケーションをデバッグする場合、AWS ツールキットを [Output] (出力) パネルの [Output] (出力) チャネルとして選択します。
注記
エラーメッセージに Docker が記載されている場合は、この注記を参照してください。
ローカル Amazon API Gateway リソースの実行とデバッグ
で指定された AWS SAM API Gateway ローカルリソースを実行またはデバッグできますtemplate.yaml
。これを行うには、 type=aws-sam
で の AWS Cloud9 起動設定を実行しますinvokeTarget.target=api
。
注記
API Gateway は、2 種類の API をサポートしています。REST API と HTTP API です。ただし、 AWS Toolkit の API Gateway 機能は REST APIs のみをサポートします。時に、HTTP API は「API Gateway V2 API」と呼ばれます。
ローカル API Gateway リソースを実行およびデバッグ
-
以下のいずれかのアプローチを選択し、 AWS SAM API Gateway リソース用の起動設定を作成します。
-
オプション 1: AWS SAM プロジェクトのハンドラーソースコード (特に .js、.cs、または .py ファイル) にアクセスし、Lambda ハンドラーにカーソルを合わせて、[Add debug configuration] (デバッグ設定の追加) を選択します。[Add debug configuration] (デバッグ設定の追加) オプションが表示されない場合は、コードレンズを有効にします。コードレンズを有効にするには、「AWS Toolkit コードレンズの有効化 」を参照してください。次に、メニューで API イベントとマークされた項目を選択します。
-
オプション 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"
)。invokeTarget.templatePath
で指定したtemplate.yaml
から解決された有効な API パスでなければなりません。 - 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
-
CLI AWS SAM がアプリケーションを構築する方法。詳細については、サーバーレスアプリケーションのデバッグ用設定オプション の AWS SAM CLI (「
sam
」) のプロパティを参照してください。
サーバーレスアプリケーションの同期
この例では、 AWS Toolkit for Visual Studio Codeを使用して、前のトピック(「サーバーレスアプリケーションの作成」) で作成したサーバーレスアプリケーションを AWS に同期する方法を示します。
前提条件
-
グローバルに一意な Amazon S3 バケット名を必ず選択します。
-
で設定した認証情報に、Amazon S3、 AWS CloudFormation AWS Lambda、および Amazon API Gateway のサービスへの適切な読み取り/書き込みアクセスが含まれていることを確認します。
-
デプロイタイプが
Image
であるアプリケーションの場合、グローバルに一意の Amazon S3 バケット名と、デプロイに使用する Amazon ECR リポジトリ URI の両方があることを確認します。
サーバーレスアプリケーションの同期
-
[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
クラウドからサーバーレスアプリケーションを削除
サーバーレスアプリケーションの削除には、以前に AWS クラウドにデプロイした AWS CloudFormation スタックの削除が含まれます。この手順を実行しても、ローカルホストからアプリケーションディレクトリは削除されないことにご注意ください。
-
[AWS Explorer]を開きます。
-
[AWS Explorer]ウィンドウで、削除したいデプロイされたアプリケーションを含むリージョンを展開し、AWS CloudFormationを拡張します。
-
削除するサーバーレスアプリケーションに対応する AWS CloudFormation スタックの名前のコンテキスト (右クリック) メニューを開きます。次に、[Delete CloudFormation Stack] (CloudFormation スタックを削除) を選択します。
-
選択したスタックを削除したいことを確認する場合は、[削除 ]を選択します。
スタックの削除が成功すると、 AWS Toolkit は AWS Explorer の AWS CloudFormation リストからスタック名を削除します。