Node.jsでSSM Parameter Storeから値を取得・作成・更新・削除する方法

2024.06.23

はじめに

リテールアプリ共創部のるおんです。

先日、Node.jsを用いたLambda関数でAWS Systems ManagerのParameter Storeから値を取得する機会がありました。

今回は、Node.jsからParameter Storeの値の操作(取得・作成・更新・削除)する方法について解説します。

3行まとめ

  • Parameter Storeからの値の取得は、AWS SDK for JavaScriptのGetParameterCommandを使用。
  • Parameter Storeからの値の作成は、AWS SDK for JavaScriptのPutParameterCommandを使用。更新する際はOverwriteプロパティをtrueにする。
  • Parameter Storeからの値の削除は、AWS SDK for JavaScriptのDeleteParameterCommandを使用。

AWS Systems Manager Parameter Storeとは

AWS Systems Manager (以下、SSM) は、AWSのインフラストラクチャを管理するためのサービスです。

その中でも、Parameter Storeは、設定データや機密情報(例えば、データベースの接続文字列やAPIキー)を安全に保存し、管理するための機能です。Parameter Storeを使用することで、アプリケーションコードにハードコーディングすることなく、これらの情報を動的に取得・管理することができます。

操作方法

Node.jsアプリケーションからAWSのリソースを操作するには、AWS SDK for JavaScript(v3)を使用します。

前提として、アプリケーションにはSSM Parameter StoreにアクセスするためのIAM権限が付与されていることが必要です。

ライブラリをインストールします。

npm install @aws-sdk/client-ssm

APIリファレンスはこちらです。

それでは早速操作方法を見ていきます。

① 取得

まず、以下の画像のようにParameter Storeで設定しました。

/test/seacretという名前で、文字列"test-seacret"を作成しました。 Node.jsでは以下のように値を取得します。

import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm";

// SSMクライアントの初期化
const ssmClient = new SSMClient({ region: 'ap-northeast-1' });

export const handler = async (event) => {
    const ssmGetTestCommand = new GetParameterCommand({
        Name: '/test/seacret',
        WithDecryption: true,
    });

    const parameterStore = await ssmClient.send(ssmGetTestCommand);
    console.log(parameterStore.Parameter.Value);
    // => "test-seacret"
};

このようにして値を取得します。

簡単に説明します。重要なのはハイライト部分です。

const ssmClient = new SSMClient({ region: 'ap-northeast-1' });

まず、SSMClientのインスタンスを初期化します。これにより、SSM Parameter Storeにアクセスするためのクライアントを作成します。

    const ssmGetTestCommand = new GetParameterCommand({
        Name: '/test/seacret',
        WithDecryption: true,
    });

Parameter Storeからの値の取得には、GetParameterCommandを使用します。

このコマンドは、SSM Parameter Storeから特定のパラメーター(ここでは/test/seacret)を取得するためのものです。

WithDecryptionオプションをtrueに設定することで、暗号化されたパラメーターを復号化して取得します。(今回は暗号化していませんが、暗号化されている際はこのオプションをつける必要があります。)

const parameterStore = await ssmClient.send(ssmGetTestCommand);
console.log(parameterStore.Parameter.Value);

最後に、ssmClientのsendメソッドを使用して、作成したコマンドを送信します。このメソッドは非同期であり、パラメーターの値を含むレスポンスを返します。 取得したパラメーターの値は、parameterStore.Parameter.Valueに格納され、console.logを使用してコンソールに出力されます。

"test-seacret"の文字列が出力されたら成功です。

② 作成

次に、Parameter Storeに値を作成する処理を書いてみます。

Parameter Storeに値を作成するには、PutParameterCommandを使用します。

import { SSMClient, PutParameterCommand } from "@aws-sdk/client-ssm";

// SSMクライアントの初期化
const ssmClient = new SSMClient({ region: 'ap-northeast-1' });

export const handler = async (event) => {
    const ssmPutTestCommand = new PutParameterCommand({
        Name: '/test/seacret',
        Value: 'new-test-seacret',
        Type: 'String', 
    });

    const result = await ssmClient.send(ssmPutTestCommand);
    console.log(result);
};

PutParameterCommandは、SSM Parameter Storeに新しいパラメーターを作成するためのものです。 Nameにはパラメーターの名前を、Valueには格納する値を指定します。Typeにはパラメーターのタイプを指定します。 最後に、ssmClientのsendメソッドを使用して、作成したコマンドを送信します。このメソッドは非同期であり、パラメーターの作成結果を含むレスポンスを返します。console.logを使用して、パラメーターが正常に作成されたことを確認します。

③ 更新

パラメーターの更新は、作成とほぼ同じ手順で行います。PutParameterCommandOverwriteオプションをtrueに設定することで、既存のパラメーターを上書きできます。

const ssmUpdateTestCommand = new PutParameterCommand({
        Name: '/test/seacret',
        Value: 'updated-test-seacret',
        Type: 'String',
        Overwrite: true,
    });

const result = await ssmClient.send(ssmUpdateTestCommand);

マネジメントコンソール上で値を確認し、更新されていたら成功です。

④ 削除

最後に、Parameter Storeからパラメーターを削除する処理を書いてみます。パラメータの削除には、DeleteParameterCommandを使用します。

import { SSMClient, DeleteParameterCommand } from "@aws-sdk/client-ssm";

// SSMクライアントの初期化
const ssmClient = new SSMClient({ region: 'ap-northeast-1' });

export const handler = async (event) => {
    const ssmDeleteTestCommand = new DeleteParameterCommand({
        Name: '/test/seacret',
    });

    await ssmClient.send(ssmDeleteTestCommand);
};

このようにして値を削除します。DeleteParameterCommandを使用し、ssmClientのsendメソッドを使用して、作成した削除コマンドを送信します。

マネジメントコンソール上から値が削除されていたら成功です。

まとめ

今回は、Node.jsを使用してAWS Systems Manager Parameter Storeから値を取得、作成、更新、削除する方法について解説しました。

これらの操作を通じて、アプリケーションの設定データや機密情報を安全に管理し、利用することができます。

ご参考になれば幸いです。

参考