1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsでAWSのパラメータストアから値を取得する

Posted at

はじめに

シークレット系の情報をAWSのパラメータストアに格納し,それをNode.jsで呼び出してみました。
この記事はその際の備忘録になります。
誤っている箇所や修正したほうがいい箇所などありましたらコメントいただけますと幸いです。

AWSのパラメータストアとは

AWS System Manager の機能の一つ。
パスワードなどのシークレット系の情報をセキュアに保存することができます。

公式ページ : https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-parameter-store.html

必要なモジュールのインストール

AWS SDK for JavaScript をインストールします。

$ npm install aws-sdk

AWS 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-1

AWSで新規パラメータを作成

公式ドキュメントを参考に,新規パラメータを作成します。
今回は,~/.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_SDK_LOAD_CONFIG : ~/.aws/config に記述された設定を参照できるようにします。(参考
  • AWS_PROFILE : 使用するprofileを指定します。(参考

新規 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 公式

その他

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?