https://github.com/umanari145/sam
sam(go+labmda+apigateway)
https://github.com/umanari145/sam
apigateway aws aws-lambda go serverless
Last synced: 2 months ago
JSON representation
sam(go+labmda+apigateway)
- Host: GitHub
- URL: https://github.com/umanari145/sam
- Owner: umanari145
- Created: 2020-07-23T04:08:06.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-07-17T15:09:34.000Z (almost 4 years ago)
- Last Synced: 2024-04-14T11:56:18.316Z (about 2 years ago)
- Topics: apigateway, aws, aws-lambda, go, serverless
- Language: Go
- Homepage:
- Size: 11.4 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# samを使ったLambda(go言語)+APIGateway+dynamoDB(←結局使わず・・)
## sam インストール
```
brew tap aws/tap
brew install aws-sam-cli
sam --version
#SAM CLI, version 1.0.0
```
## ファイル構成
- lambdaSample(lambdaファイル)
- build.sh ビルド
- go.mod パッケージ管理
- go.sum パッケージ記録
- main.go エントリーポイント
- main_test.go テストファイル
- event_api.json apigatewayのリクエストのサンプルファイル
- lambda_env_vars.json.dummy 環境変数のサンプル
- Makefile ビルドやデバッグなどのファイル
- template.yaml samのサンプルファイル
## sam コマンド
プロジェクトフォルダ&&テンプレート作成
```
sam init --runtime go1.x(言語をいろいろ選べる) --name プロジェクト名
```
apigatewayのダミーリクエストファイル作成
```
sam local generate-event apigateway aws-proxy > event_api.json
```
lambdaローカル実行
```
sam local invoke LambdaSampleFunction --event event_api.json --debug -l sample.log
#実行結果 dockerのイメージをダウンロードして実行しているようで4〜5分かかる。初回はもっと。
updating: main (deflated 49%)
Invoking main (go1.x)
・・・・・・・・・・・・・・
START RequestId: Version: $LATEST
2020/07/23 04:23:17
morigami
Function 'LambdaSampleFunction' timed out after 5 seconds
```
## ローカル開発
### lambda
*ソースかえても`make build`しないと結果が変わらない
```
make debug
```
- 自動でビルドファイル構築& sam local invoke
連携の時はapigatewayから呼ぶのと、単独だとテストの方が使えるため、あまり意味がないかも・・・・
### apiGetway
ビルド&ローカルAPI
#下記コマンドは全てルートディレクトリ(README.mdと同じディレクトリ)で。非コンテナ内
```
make build
sam local start-api (--env-vars vars.json:環境変数を外部化)
Mounting LambdaSampleFunction at http://127.0.0.1:3000/sample [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-07-23 16:56:18 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
#別ウィンドウで下記コマンドを叩く
curl http://127.0.0.1:3000/sample
#最初のコマンド実行時はbuildはものすごく時間がかかるので要注意
#その後、api開いた画面でログが出ていればOK
```
* ローカルAPIの場合認証は入らない
## ビルド && デプロイ
#下記コマンドは全てルートディレクトリ(README.mdと同じディレクトリ)で。非コンテナ内
```
make build
#ここで.aws-samに資材ができる(templateを更新してもbuildしないと上書きされない)
sam deploy --guided
#deploy前準備のようなもの
#LambdaSampleFunction may not have authorization defined, Is this okay?→y
#Deply this changeset? yで実際にデプロイ
```
* apiKeyに関して`AWS::ApiGateway::UsagePlan`や`AWS::ApiGateway::UsagePlanKey`も必要になる(設定が色々面倒)
本番のAPI(開発はx-api-keyはなくてもOK)
```
curl https://xxxxxxxxxxxx.execute-api.us-east-1.amazonaws.com/Prod/area/2740077 \
-H 'x-api-key: APIキー'
```
## デプロイ時のパラメータ上書き
```
sam deploy --guided --parameter-overrides \
DbType=DBタイプ \
PostgresDbhost=ポート
PostgresDbname=DB名 \
PostgresDbuser=DBユーザー \
PostgresPassword=DBパスワード
```
## dynamoDB
dockerで仮装環境を構築
GUI
http://localhost:8001/
テーブル確認
```
aws dynamodb \
list-tables \
--endpoint-url http://localhost:8000
```
テーブル作成
```
aws dynamodb \
create-table \
--endpoint-url http://localhost:8000 \
--cli-input-json file://dynamoDB/script/area.json
#--cli-input-json ファイルパスを表示 dynamoDB/script/area.json
```
#全件取得
```
aws dynamodb scan \
--endpoint-url http://localhost:8000 \
--table-name テーブル名
```
#特定キーで取得
```
aws dynamodb get-item \
--endpoint-url http://localhost:8000 \
--table-name テーブル名 \
--key '{"ID":{"N":"1"}}'
```
#保存
```
aws dynamodb put-item \
--endpoint-url http://localhost:8000 \
--table-name テーブル名 \
--item '{
"product_id": {"N": "3"},
"product_name": {"S": "本"} ,
"price_min": {"N": "111"},
"price_max": {"N": "222"}
}'
```
boto3
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
## postgres メモ
DBにログインした後、
CSV→DBへのインサート
csv \copy area (zip,pref_kana,city_kana,town_kana,pref,city,town) from '/docker-entrypoint-initdb.d/KEN_ALL.CSV' with csv header
## apiSampleのサンプルは以下を参考に
https://github.com/classmethod/aws-for-everyone/tree/master/chapter03/aws-for-everyone-sls