前提
Installing the AWS SAM CLI on Windows
Step 1: Create an AWS Account
Step 2: Create an IAM User with Administrator Permissions
Step 3: Install Docker
Step 4: Install the AWS SAM CLI
dockerのインストールはlocalテストのみ
deploy目的のみであれば利用しなくてもよい
(それでも個別にAPIGateway、Lambdaをデプロイしてテストするより楽)
ただし、docker Toolboxを以前利用していた環境(WinHomeでwsl2利用)だとdockerのエラーになりがち
環境変数削除で復帰(docker-machineの更新はなくても可)
対処法参考:
https://www.nuits.jp/entry/docker-could-not-read-ca-certificate
python用仮想環境を作成
conda create -n myenv python=3.8
手順
Tutorial: Deploying a Hello World Application
#Step 1 - Download a sample application
sam init
#Step 2 - Build your application
cd sam-app
sam build
#Step 3 - Deploy your application
sam deploy --guided
Step1. sam init
テンプレートとなるファイル構成を作成する(ウィザード形式)
Which template source would you like to use?
1 - AWS Quick Start Templates
Which runtime would you like to use?
2 - python3.8
Project name [sam-app]: sample-sam
AWS quick start application templates:
1 - Hello World Example
nodeで作成する場合、「7 - nodejs10.x」を選択
Step2. Build your application
開発したコードおよび依存モジュールを.aws-sam\build以下に収集
cd sample-sam
sam build
Step3. Deploy your application
3-1. パッケージをS3へ格納
3-2. CloudFormation呼び出し
3-3. AWS CloudFormation stackとして結果出力
sam deploy --guided
Stack Name [sam-app]: sample-sam
AWS Region [us-east-1]: ap-northeast-1
Confirm changes before deploy [y/N]: y
Allow SAM CLI IAM role creation [Y/n]: Y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to samconfig.toml [Y/n]: Y
(略)
Key HelloWorldApi
Description API Gateway endpoint URL for Prod stage for Hello World function
Value https://<restapiid>.ap-northeast-1.amazonaws.com/Prod/hello/
Step3.5. デプロイの確認
3-a. 表示されたエンドポイントに対してcurlでリクエスト実行
curl https://<restapiid>.execute-api.us-east-1.amazonaws.com/Prod/hello/
{"message": "hello world"}
3-b. AWSConsoleで確認(IAM Role,Lambda, API Gateway, CloudFormation, S3)
Cloud Formation Stackは2つ作成されている(S3、それ以外)
sam cliによるS3へのパッケージ展開、Cloud Formation呼び出しが2つに分かれる
3-c. 削除するときはFormation Stackの単位で削除するとよい
Step 4: Testing Your Application Locally (Optional)
docker環境を利用して評価環境を立ち上げる
コードを更新すると自動的に反映される(start-apiを再び呼び出さなくてもよい)
sam local start-api
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
4.5 確認
4-a. エンドポイントに対してcurlでリクエスト実行
curl http://127.0.0.1:3000/hello/
{"message": "hello world"}
4-b. 呼び出し後のコンソール確認
[37mGET /hello/ HTTP/1.1[0m" 200 -
4-c. docker確認
docker image ls
lambci/lambda python3.8
自動で保存される
docker container ls
3f10xxxxxxxx lambci/lambda:python3.8 "/var/rapid/init --b…"
リクエスト時のみ作成されてすぐ破棄される
4-d. Making One-off Invocations
sam local start-apiを呼び出さなくても起動、リクエスト送付、結果取得まで実施する
sam local invoke "HelloWorldFunction" -e events/event.json -d 5858
5. AWS Toolkit for Visual Studio Code
- VS CodeにAWS Toolkitをインストール
- AWS ExplorerからLambda呼び出し(on AWS)できる
5-a. ローカルで実行する場合(その1)
CodeLensのRun Localy
Debug Localyでデバッグ開始できそうであったが動作未確認
5-b. ローカルで実行されたものにアタッチ
以下をコードに追加
import ptvsd
ptvsd.enable_attach(address=('0.0.0.0', 5858), redirect_output=True)
ptvsd.wait_for_attach()
debugオプションをつけてstart-api、invokeを起動
sam local start-api --debug --debug-port 5858
sam local invoke "HelloWorldFunction" -e events/event.json -d 5858
Launch.jsonを以下の通り更新
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "Attach to SAM CLI",
"type": "python",
"request": "attach",
"host": "localhost",
"port": 5858,
"pathMappings": [
{
"localRoot": "${workspaceRoot}/hello_world",
"remoteRoot": "/var/task",
}
],
}
]
},
ブレークポイントを設定、してVSCodeからアタッチ
その他メモ
- 認証ありのAPI Gateway/Lambdaを扱いたい場合は
Controlling Access to API Gateway APIs