20210731のNode.jsに関する記事は2件です。

LambdaからDynamoDBに接続する。(Node.js)

概要 LambdaにデプロイしたNode.jsからDynamoDBに接続し、データを取得する。 早い話が下記図を実施します。 TBLの準備 下記TBLを用意します。マイグレーション方法はリンクを参考にしてください。 ディレクトリ構成 ディレクトリ構成 ~/develop/study/aws/dynamo2 $ tree -I node_modules . ├── dynamo.js ├── package.json ├── serverless.yml └── yarn.lock dynamo.js 'use strict'; require('dotenv').config() var AWS = require('aws-sdk'); var documentClient = new AWS.DynamoDB.DocumentClient({ region: "ap-northeast-1", accessKeyId: process.env.ACCESS_KEY, secretAccessKey: process.env.SECRET_KEY }); module.exports.olympic = async (event) => { var params = { TableName: 'Olympic', Key: { 'Id': 1, 'Country': '日本' } }; var result; try { result = await documentClient.get(params).promise(); } catch (e) { result = e; } const country = result.Item.Country const goldMedal = result.Item.Medal.GoldMedal const silverMedal = result.Item.Medal.SilverMedal const bronzeMedal = result.Item.Medal.BronzeMedal let message = country +'金メダル:' + goldMedal + ' 銀メダル' + silverMedal +' 銅メダル:'+ bronzeMedal return { statusCode: 200, body: JSON.stringify(message), }; }; serverless.yml service: dynamodb2 frameworkVersion: '2' provider: name: aws runtime: nodejs12.x lambdaHashingVersion: 20201221 region: ap-northeast-1 plugins: - serverless-offline functions: lineWebhook: handler: dynamo.olympic events: - http: path: dynamo/webhook method: post ローカル実行 ローカルデプロイ ~/develop/study/aws/dynamo2 $ sls offline start offline: Starting Offline: dev/ap-northeast-1. offline: Offline [http for lambda] listening on http://localhost:3002 offline: Function names exposed for local invocation by aws-sdk: * lineWebhook: dynamodb2-dev-lineWebhook ┌───────────────────────────────────────────────────────────────────────────────┐ │ │ │ POST | http://localhost:3000/dev/dynamo/webhook │ │ POST | http://localhost:3000/2015-03-31/functions/lineWebhook/invocations │ │ │ └───────────────────────────────────────────────────────────────────────────────┘ offline: [HTTP] server ready: http://localhost:3000 ? offline: offline: Enter "rp" to replay the last request 実行 ~/develop/study/aws/dynamo2 $ curl -XPOST http://localhost:3000/dev/dynamo/webhook "日本金メダル:17 銀メダル11 銅メダル:11"% サーバ実行 サーバデプロイ ~/develop/study/aws/dynamo2 $ serverless deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service dynamodb2.zip file to S3 (10.79 MB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... .............. Serverless: Stack update finished... Service Information service: dynamodb2 stage: dev region: ap-northeast-1 stack: dynamodb2-dev resources: 12 api keys: None endpoints: POST - https://URL/dev/dynamo/webhook functions: lineWebhook: dynamodb2-dev-lineWebhook layers: None Serverless: Removing old service artifacts from S3... Serverless: Deprecation warning: Detected ".env" files. In the next major release variables from ".env" files will be automatically loaded into the serverless build process. Set "useDotenv: true" to adopt that behavior now. More Info: https://www.serverless.com/framework/docs/deprecations/#LOAD_VARIABLES_FROM_ENV_FILES
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】S3のPUTイベントをトリガーにLambda(Node.js 14.x)を起動する

きっかけ 案件でS3ファイルのPUTをトリガーにLambdaを動かして、PUTされたファイルを加工するような処理が必要なため、仕組みの具体的な設定内容の確認をしたかったため。 やりたいこと概要 前提 AWS: 社用アカウント利用 構築Step S3バケット作成 Lambdaの構築、ソース修正 Lambdaに紐づくIAMロール修正 Originバケット PUTトリガー設定 動作確認 1. S3バケット作成 デフォルト設定のまま、Origin、Copiedバケットを作成 2. Lambdaの構築、ソース修正 デフォルト設定(ランタイム:Node.js 14.x)でLambdaを構築 Lambdaのソースコードを以下の内容に修正、デプロイを実施 index.js 'use strict'; const aws = require('aws-sdk'); const s3 = new aws.S3(); exports.handler = async (event) => { //S3から送られたトリガー内容を確認 console.log(event); const bucket = event['Records'][0]['s3']['bucket']['name']; const key = event['Records'][0]['s3']['object']['key']; console.log(bucket); console.log(key); //S3.copyObjectを実施(params内Bucket,CopySource, Keyは必須) const params = { Bucket: "copied-bucket-210731/210731", CopySource: bucket+'/'+key, Key: key }; const result = await s3.copyObject(params).promise(); console.log(result) }; 3. Lambdaに紐づくIAMロール修正 Lambdaに紐づいているLambda実行ロールにAmazonS3FullAccessをアタッチ (ベストプラクティスでは最小権限原則ですが今回は割愛) 4. Originバケット PUTトリガー設定 S3のOriginバケットでプロパティ>イベント通知からイベント通知を作成 任意のイベント名を設定、イベントタイプを"PUT"に設定、送信先を今回作成したLambda関数を指定してトリガーを設定 5. 動作確認 OriginバケットにAWS CLIでファイルをアップロードする AWS CloudShellを起動、適当なテキストファイルを作成、CLIコマンドによりS3のOriginバケットへファイルをアップロードする Originバケットにファイルがアップロードされていることの確認 Copiedバケットにファイルがコピーされていることの確認 Lambdaの実行ログの確認 参考サイト
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む