- 投稿日:2021-03-25T12:37:41+09:00
Node.jsでAWSのパラメータストアから値を取得する
はじめに
シークレット系の情報をAWSのパラメータストアに格納し,それをNode.jsで呼び出してみました。
この記事はその際の備忘録になります。
誤っている箇所や修正したほうがいい箇所などありましたらコメントいただけますと幸いです。AWSのパラメータストアとは
AWS System Manager の機能の一つ。
パスワードなどのシークレット系の情報をセキュアに保存することができます。必要なモジュールのインストール
AWS SDK for JavaScript をインストールします。
$ npm install aws-sdkAWS SDK for JavaScript とは,AWSのサービスをjavascriptで使用するためのAPIになります。
今回はこのAPIを使用して,パラメータストアから値を取得します。AWSの認証情報の設定
Node.jsでAWSのサービスを利用するに当たって,認証情報を設定する必要があります。
認証情報の設定方法はいくつかありますが,今回は~/.aws/credentials
から読み取る方法を使用したいと思います。今回
~/.aws/credentials
には,defaultプロファイルとは別に,privateアカウントのプロファイルも記述しておきます。~/.aws/credentials[default] aws_access_key_id = <ACCESS_KEY_ID> aws_secret_access_key = <SECRET_ACCESS_KEY> [private] aws_access_key_id = <PRIVATE_ACCOUNT_ACCESS_KEY_ID> aws_secret_access_key = <PRIVATE_ACCOUNT_SECRET_ACCESS_KEY>また,
~/.aws/config
ファイルには,region
を記述しておきます。~/.aws/config[default] output = json region = ap-northeast-1 [profile private] output = json region = ap-northeast-1AWSで新規パラメータを作成
公式ドキュメントを参考に,新規パラメータを作成します。
今回は,~/.aws/credentials
や~/.aws/config
にprivateというプロファイル名で記述したAWSアカウントのパラメータストアに,sampleというパラメータ名で 'sample' という文字列を保存しました。実行ファイル作成
上記で作成したsampleというパラメータを取得します。
実行ファイルの完成形
sample.js// aws-sdk をロードする前に,環境変数をセットする // ~/.aws/config の情報を参照できるようにする process.env.AWS_SDK_LOAD_CONFIG = true; // 使用するprofileを指定する process.env.AWS_PROFILE = 'private'; // 環境変数セット完了 // aws-sdk モジュールを読み込む const AWS = require("aws-sdk"); // 新規 AWS.SSM class を作成 const ssm = new AWS.SSM(); // 'sample' という名前のパラメータを取得 const params = { Name: 'sample', WithDecryption: true }; ssm.getParameter(params, (err, data) => { if (err) { console.log(err); } else { console.log(data); } });下記で各処理について説明していきます。
環境変数の設定
sample.js(一部)// aws-sdk をロードする前に,環境変数をセットする // ~/.aws/config の情報を参照できるようにする process.env.AWS_SDK_LOAD_CONFIG = true; // 使用するprofileを指定する process.env.AWS_PROFILE = 'private'; // 環境変数セット完了 // aws-sdk モジュールを読み込む const AWS = require("aws-sdk");
aws-sdk
モジュールを読み込む前に,環境変数をセットします。
そうすることで,セットした環境変数の設定を元にaws-sdk
モジュールの読み込みが行われます。セットする環境変数
新規 AWS.SSM クラスを作成
sample.js(一部)// 新規 AWS.SSM class を作成 const ssm = new AWS.SSM();AWS.SSM クラスは,Node.js内で AWS System Manager の機能を利用するためのクラスになります。(参考)
パラメータを取得
sample.js(一部)// 'sample' という名前のパラメータを取得 const params = { Name: 'sample', WithDecryption: true // パラメータの値が暗号化されていた場合は復号 }; ssm.getParameter(params, (err, data) => { if (err) { console.log(err); } else { console.log(data); } });AWS.SSM クラスに用意されている
getParameter
メソッドを使用して,パラメータストアから値を取得します。(参考)paramsに設定できるオプション
- Name : パラメータ名
- WithDecryption : パラメータの値が暗号化されていた場合に復号するかどうかを指定(パラメータの値が文字列または文字列リストの場合は,このオプションは無視されます)
実行
$ node sample.js { Parameter: { Name: 'sample', Type: 'String', Value: 'sample', Version: 1, LastModifiedDate: 2021-03-23T07:45:35.557Z, ARN: 'arn:aws:ssm:ap-northeast-1:xxxxxxxxxxxx:parameter/sample', DataType: 'text' } }参考
AWS 公式
- AWS Systems Manager パラメータストア
- Node.js での認証情報の設定
- Getting started in Node.js
- SDK for JavaScript のセットアップ
- What Is the AWS SDK for JavaScript?
その他
- 投稿日:2021-03-25T12:35:15+09:00
n (Node.js管理) のインストール手順
n nvmやnodebrewなどと同じく、Node.jsのバージョン管理ツールの1つです。 対象読者 ・MacOSユーザー ※nはWindowsをサポートしていません。 前提 Homebrewがインストール済み インストール済みの場合は、バージョンが表示されます。 $ brew -v Homebrew 3.0.4 バージョンが表示されなかった方は、インストールを行います。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" インストール brewコマンドを使って、nをインストールします。 brew install n バージョンの確認 コマンドを実行しバージョンが表示されれば、正常にインストールされています。 $ n -V 7.0.0 Node.js LTS版のインストール 試しにNode.jsのLTS(最新安定版)をインストールしてみます。 準備 nはデフォルトで/usr/local以下に、n/versionsディレクトを作成し、そこでバージョンを管理を行います。 /usr/local以下はroot権限のディレクトリに該当し、通常ユーザーではアクセスできないディレクトリです。 nコマンドでNode.jsをインストールする前に、以下のいずれかの対応が必要です。 sudo コマンド で実行 環境変数 N_PREFIXに、ホームディレクトリなどをインストール先を指定 /usr/local/n を作成し、ユーザーの読み取り権限を付与 今回は、nコマンド実行時に毎回sudoを叩きたくない&環境変数を増やしたくないので、 3./usr/local/n を作成し、ユーザーの読み取り権限を付与を行います。 # make cache folder (if missing) and take ownership $ sudo mkdir -p /usr/local/n $ sudo chown -R $(whoami) /usr/local/n README.mdから引用 LTSのバージョン確認 インストールコマンドを叩く前に、LTSのバージョンを確認します。 $ n --lts 14.16.0 インストール nコマンドの引数にltsを渡して実行します。 $ n lts 正常にインストールされると以下のような表示となります。 installing : node-v14.16.0 mkdir : /usr/local/n/versions/node/14.16.0 fetch : https://nodejs.org/dist/v14.16.0/node-v14.16.0-darwin-x64.tar.xz installed : v14.16.0 (with npm 6.14.11) 失敗した場合 権限が無いと以下の通り怒られるので、権限付与のコマンドを実行して再実行するか、管理者権限で実行してください。 installing : node-v14.16.0 mkdir : /usr/local/n/versions/node/14.16.0 mkdir: /usr/local/n/versions/node/14.16.0: Permission denied Error: sudo required (or change ownership, or define N_PREFIX) Node.js 最新版のインストール ※LTS版ではなく、最新版を使いたい場合はこちら 最新バージョンの確認 n ls-remote latest インストール 引数にlatestもしくは、current を渡して実行します。 $ n latest ## もしくは $ n current Node.js バージョン指定してインストール インストール可能なバージョンを確認 # インストール可能なバージョンを表示(最新から20件) $ n lsr # 全てのインストール可能なバージョンを表示 $ n --all lsr インストール 一覧に表示された中から、インストールしたいバージョンを引数で指定します。 $ n 15.10.0 バージョンの切り替え すでにインストールしている中から、自由に切り替えることができます。 $ sudo n nコマンドを実行するとインストール済みのバージョン一覧が表示されます。 上下キーでバージョンを選択し、Returnキーで切り替えることが可能です。 正常に切り替わると以下のように表示されます。 installed : v14.16.0 (with npm 6.14.11) 失敗した場合 以下のようにズラズラ〜っとPermission deniedが出たあとに、 installedが表示された場合は正常に切り替わっていません。 sudoでnコマンドを実行し直してください。 cp: /usr/local/lib/node_modules/npm/lib/uninstall.js: Permission denied cp: /usr/local/lib/node_modules/npm/.mailmap: Permission denied cp: /usr/local/lib/node_modules/npm/.travis.yml: Permission denied cp: /usr/local/lib/node_modules/npm/tap-snapshots/test-tap-fund.js-TAP.test.js: Permission denied cp: /usr/local/lib/node_modules/npm/tap-snapshots/test-tap-repo.js-TAP.test.js: Permission denied cp: /usr/local/lib/node_modules/npm/.licensee.json: Permission denied installed : v14.16.0 (with npm 6.14.11) (おまけ) nコマンドでsudoしたくない人向け 以下のコマンドでユーザーに権限を付与することでsudoが不要になります。 # take ownership of node install destination folders sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share README.mdから引用 感想 nの一文字だけでスマートにNode.jsのバージョンを切り替える事がメリットだと感じました。 ただし、切り替え速度に関して、自環境ではバージョン切り替えが完了するまで、8~10秒くらいかかりました。※環境に左右されると思います。 バージョン切替時の処理内容が、/usr/local/lib/node_modules/npm以下を全削除したあと、 指定のバージョンのNode.jsを入れ直しているため、そのぶん時間がかかってると思われます。 少し切替速度は気になりましたが、nコマンドでスマートにバージョン切り替えをしてみたいという方は、ぜひ参考にしてみてください。