Lamda×DynamoDB×LINEボット
環境
- Windows10 Pro
- バージョン 21H1
- OSビルド 19043.1052
- Node.js v14.15.0
- npm 6.14.8
- Git version 2.28.0.windows.1
AWS CLIインストール
[ダウンロードサイト](https:// docs. aws. amazon. com/ ja_ jp/ cli/ latest/ userguide/ awscli-install-windows. html)
MSIインストーラーをダウンロード
Windows用のAWSCLI MSIインストーラー(64ビット)
画面の指示に従います。デフォルトでは、AWS CLIバージョン1はC:\Program Files\Amazon\AWSCLI(64ビットバージョン)に インストールされます 。
C:\> aws --version
aws-cli/1.19.96 Python/3.6.0 Windows/10 botocore/1.20.96
使うAWSサービス
- Lambda
- DynamoDB
- API Gateway
- IAM
- CloudWatch
IAMユーザー作成
- line-dev-admin
- 管理ポリシー
- AWSLambda_FullAccess
- AmazonAPIGatewayAdministrator
- AmazonCognitoPowerUser
- AWSCertificateManagerFullAccess
- line-dev-user
- インラインポリシー
- Lambda
- 読み込み GetFunction
- 書き込み UpdateFunctionCode
- UpdateFunctionConfiration
- リソースでfunctionを指定
- インラインポリシー
- 管理ポリシー
なぜAmazonCognitoPowerUserが必要か?
API Gatewayでは「オーガナイザー」と呼ばれるAPI Gatewayへのアクセス権限をCognite認証機能を用いて制限する機能があり、それをインプリメントするのに必要なIAM権限。この権限がないとAPI Gatewayデプロイ時にエラーが出る。
→いまいちオーガナイザーの意味がわからん。。
なぜAWSCertificateManagerFullAccessが必要か?
API Gatewayではクライアント証明書生成ができます。またACM(AmazonCertificateManager)証明書で認められたカスタムドメイン名を作成することができます。CA証明書をAWSが代理で作成および管理してくれる機能。この権限がないとAPI Gatewayデプロイ時にエラーが出る。
ロール作成
- lambda_basic_execustion
- AWSLambdaBasicExecutionRole
- lambda_dynamodb_read
- AWSLambdaBasicExecutionRole
- DynamoDBからデータを読み込めるロール
- インラインポリシー lambda_dynamodb_read_Inlinepolicy
- サービス DynamoDB
- アクション 読み込み(すべて)
- リソース すべてのリソース
- lambda_dynamodb_write
- AWSLambdaBasicExecutionRole
- DynamoDBにデータを書き込めるロール
- インラインポリシー lambda_dynamodb_write_Inlinepolicy
- サービス DynamoDB
- アクション
- リスト
- 読み込み
- 書き込み
- リソース すべてのリソース
- apigateway_logto_cloudwatch
- AmazonAPIGatewayPushToCloudWatchLogs
aws-cli初期設定
line-dev-user作成時にダウンロードしたCSVを開いておく
Git Bashで以下を実行
$ aws configure --profile line-dev-user
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
このコマンド打つと~/.awsフォルダの中のファイルに書き込まれるっぽい。間違えたらこれを削除するか上書きすればよさそう。
line_dev_admin用のプロファイルも作成
$ aws configure --profile line-dev-admin
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
参照は以下のコマンドで確認できる
$ aws configure list --profile line-dev-user
Name Value Type Location
---- ----- ---- --------
profile line-dev-user manual --profile
access_key ****************SEMX shared-credentials-file
secret_key ****************0TBI shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
$ aws configure list --profile line-dev-admin
Name Value Type Location
---- ----- ---- --------
profile line-dev-admin manual --profile
access_key ****************Y4TH shared-credentials-file
secret_key ****************WMUU shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
デフォルトのユーザーを指定
$ export AWS_DEFAULT_PROFILE=line-dev-user
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile line-dev-user env ['AWS_DEFAULT_PROFILE', 'AWS_PROFILE']
access_key ****************SEMX shared-credentials-file
secret_key ****************0TBI shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
ただし、このデフォルトのユーザーはBashを閉じると設定が消えるので恒久的に変更したい場合には環境変数でユーザー環境変数に
変数:AWS_AWS_DEFAULT_PROFILE
値:line-dev-user
みたいな感じで登録すればいいらしい。
Lambda関数作成
環境変数にLINE Messaging APIのチャネルアクセストークンを追加
PCローカルの作業用フォルダで以下を実行
PS C:\Users\607\code\20210618_lambda_dynamodb_linebot> npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help init` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (20210618_lambda_dynamodb_linebot)
version: (1.0.0)
description: AWS LambdaとDynamoDBでLINEボット
entry point: (index.js)
test command:
git repository:
keywords:
author: kahori_takeda
license: (ISC)
About to write to C:\Users\607\code\20210618_lambda_dynamodb_linebot\package.json:
{
"name": "20210618_lambda_dynamodb_linebot",
"version": "1.0.0",
"description": "AWS LambdaとDynamoDBでLINEボット",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "kahori_takeda",
"license": "ISC"
}
Is this OK? (yes) yes
PS C:\Users\607\code\20210618_lambda_dynamodb_linebot> npm i @line/bot-sdk
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN 20210618_lambda_dynamodb_linebot@1.0.0 No repository field.
+ @line/bot-sdk@7.3.0
added 42 packages from 85 contributors and audited 42 packages in 11.012s
6 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
PS C:\Users\607\code\20210618_lambda_dynamodb_linebot> ls
Directory: C:\Users\607\code\20210618_lambda_dynamodb_linebot
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2021/06/21 0:03 node_modules
-a--- 2021/06/21 0:03 12168 package-lock.json
-a--- 2021/06/21 0:03 333 package.json