- 投稿日:2020-10-20T19:15:19+09:00
Terminal: npm install -g nodemon で Missing access となる問題について
- 投稿日:2020-10-20T13:23:25+09:00
Lambda コンソールで使う AWS SDK を最新にする
はじめに
Lambda を使って新しいサービスを使ってみたり、既存のサービスをちょっと試したいときに Lambda コンソールで実装をすることがあると思います。
しかし、Lambda コンソールで提供されている AWS SDK 実行環境は最新とは限らないため、そのままでは新しいサービスを使えないときがあります。ここでは、そのようなときに Lambda レイヤーをつかって Lambda コンソールの AWS SDK を最新にする方法を紹介します。事前準備
作業の途中で Docker を利用するので作業環境には Docker をインストールしておいてください。
Lambda 関数を用意する
現在と更新後の AWS SDK のバージョンを確認するために Lambda 関数を用意しておきます。
- Lambda コンソールを開き、"関数の作成" をクリックします。
- [関数名] に
my-new-sdk-function
、[ランタイム] にNode.js 12.x
と入力し、他はデフォルト設定で "関数の作成" をクリックします。- できあがった my-new-sdk-function のコードを AWS SDK のバージョンを出力するようにします。関数コードペインでコードを以下のように変更します。変更後は "Deploy" をクリックしておきましょう。
+ const AWS = require('aws-sdk') exports.handler = async (event) => { - // TODO implement - const response = { - statusCode: 200, - body: JSON.stringify('Hello from Lambda!'), - }; - return response; + return AWS.VERSION; };現在の AWS SDK のバージョンを確認する
イベントを用意して、用意した Lambda 関数を呼び出します。
- Lambda コンソールの右上にある "テスト" をクリックします。
- "イベント名" に
MyNewSdkEvent
と名付け、他はデフォルトのまま "作成" をクリックします。- もう一度 "テスト" をクリックすると先ほど作成した Lambda 関数が実行されます。実行結果が関数コードペインに表示されます。執筆時点では 2.712.0 でした。
最新の AWS SDK バージョンをパッケージ化する
パッケージは Lambda 環境と互換性のあるオペレーティングシステムで作成することが勧められています。my-new-sdk-function を作成したときに選んだランタイム Node.js 12.x のオペレーティングシステム は "Amazon Linux 2" なので Amazon Linux 2 上でパッケージを作ります。
1.まず作業環境で作業ディレクトリを用意します。
mkdir -p my-new-sdk-layer2.作業ディレクトリに移動します。
cd aws-new-sdk-layer3.Docker で Amazon Linux 2 を起動します。
docker run \ -it \ --rm \ --name console \ --volume `pwd`:/tmp/my-new-sdk-layer \ --workdir /tmp/my-new-sdk-layer/nodejs \ amazonlinux bash4.以降の処理で使用するツールをインストールしておきます。
yum install -y tar gzip zip5.ノードバージョンマネージャー (nvm) をインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash6.コマンドラインで次のように入力して nvm を有効にします。
. ~/.nvm/nvm.sh7.nvm を使用して Node.js のバージョン 12 をインストールします。Node.js をインストールすると、Node Package Manager (npm) もインストールされます。
nvm install 128.AWS SDK の最新バージョンをインストールします。
npm install aws-sdk9.レイヤーにアップロードする .zip ファイルを作成します。
zip -r ../package.zip ../10.
exit
して Amazon Linux 2 から抜けます。作業ディレクトリに package.zip があると思います。レイヤーを作成して関数に追加する
- Lambda コンソールのレイヤーページを開き、"レイヤーの作成" をクリックします。
レイヤー設定で以下の値を入力し、"作成" をクリックします。
- "名前" には
myNewSdkLayer
を入力します。- [.zip ファイルをアップロード] を選択して、さきほど作成した zip ファイルをアップロードします。
- "互換性のあるランタイム - オプション" では
Node.js 12.x
を選択します。レイヤーが作成されたら、Lambda コンソールの関数ページから、my-new-sdk-function を選択します。
デザイナーペインで、"Layers" を選択します。
レイヤーペインで、"レイヤーの追加" をクリックし、レイヤーを追加画面で以下の値を設定し、"追加" をクリックします。
- "レイヤーを選択" で
カスタムレイヤー
を選択します。- "カスタムレイヤー" には先ほど作成した
myNewSdkLayer
を選択します。- "バージョン" には
1
を選択します。更新後の AWS SDK のバージョンを確認する
まえに用意した "MyNewSdkEvent" を再度、実行します。Lambda コンソールの右上にある "テスト" をクリックしてください。関数コードペインから実行結果を確認すると更新されたことが確認できると思います。今回は 2.773.0 になりました。
以上になります。
- 投稿日:2020-10-20T10:51:27+09:00
node.js+ExpressでGETデータとPOSTデータを取得しよう
はじめに
node.jsを触り始めて数週間経ちフォームからデータを受け取る方法がなんとなくわかってきたので
自分用の備忘録兼初心者向けの記事として書き留めておきます。Qiitaの記事を書くのが久しぶりなので誤字や表記ミス等あるかもしれませんご了承ください(コメントで指摘してくださると助かります)
環境
- OS
- windows10
- node.js
- v12.18.4
- Express
- v4.17.1
前提条件
以下コードはすべて下記のコードが既に書かれている前提で説明していきます。
app.jsconst express = require("express") const app = express() app.use(express.urlencoded({extended: true})); app.set('view engine', 'ejs'); // View engineにEJSを指定していますがなんでもいいです。 //自分が好きな奴使ってください app.get("/",(req,res)=>{ res.render("index"); })フォーム用コード
index.ejs<p>GET用フォーム</p> <form action="get-check" method="GET"> <input type="text" name="user_id"> <button type="submit">送信</button> </form> <p>POST用フォーム</p> <form action="post-check" method="POST"> <input type="text" name="user_id"> <button type="submit">送信</button> </form>GETで取得
Getでデータを送信した場合は
req.query."取得したいinputのname"
で取得ができます。なので上記フォームからの値を取得したい場合は
req.query.user_id
とすれば取得できます。なおreq.queryで送信された情報を連想配列で一括取得することができます。
ちなみに存在しないnameを指定するとundefinedが返ってきます。
POSTで取得
POSTでデータを送信した場合は
req.body."取得したいinputのname"
で取得できます。あとはGETと同様にnameを指定しなければ連想配列での一括取得ができますし
存在しないnameを指定するとundefinedが返ってきます。まとめ
GETはreq.query
POSTはreq.body
でそれぞれデータを取得することができる。