はじめに
AWS SSM Parameter Storeを利用して、Lambda関数で環境変数を管理する方法について説明します。
AWS SSM Parameter Storeは、AWSが提供するサービスで、アプリケーションの設定情報やシークレット情報を安全に保存し、管理することができます。これにより、環境変数をコードにハードコーディングすることなく、Lambda関数で利用することができます。
今回はHonoで作成したWebAPIから環境変数を取得する手順について記録します。
TypescriptやJavascriptで動くフレームワークなら同様にできるはずです。
AWSコンソールで環境変数を作成
- AWSコンソールにログインし、SSM Parameter Storeのページに移動します。
- 「パラメータの作成」ボタンをクリックします。
- 以下画像のように階層構造的に名前を入力し、パラメータの作成をクリックします。
実装
AWSWrapper.ts
AWS関連クラスの継承元となる、ラッパーを作成して使っています。
環境変数に以下を定義しています
- リージョン
- アクセスキー
- シークレットキー
これらの認証情報は「AmazonSSMReadOnlyAccess」ポリシーが設定されたIAMの
セキュリティ認証情報 > アクセスキーを作成 から作成できます。
ちなみに紐づいているLambdaのIAMにも同様のポリシーが設定できている場合、環境変数は不要だったりします。
import * as AWS from "aws-sdk";
import 'dotenv/config'
export default class AWSWrapper {
/**
* AWS SDKのインスタンス
*/
protected aws = AWS;
constructor() {
this.aws.config.update({
region: process.env.AWS_SSM_REGION,
accessKeyId: process.env.AWS_SSM_ACCESS_KEY,
secretAccessKey: process.env.AWS_SSM_PRIVATE_KEY,
});
}
}
SsmParameter.ts
パラメタの名前を引数とする関数を作成しました。
AWSのコンソールで入力した階層構造の名前を入れると環境変数の値が取得できます。
import AWSWrapper from "./AWSWrapper";
require("dotenv").config();
export class SsmParameter extends AWSWrapper {
/**
* AWS SSMのインスタンス
*/
ssm = new this.aws.SSM();
/**
* SSMパラメータから環境変数を取得
* @param parameterName - パラメタ名
* @returns The value of the parameter as a string.
*/
public async getSsmParameter(parameterName: string): Promise<string> {
try {
const result = await this.ssm
.getParameter({
Name: parameterName,
WithDecryption: true,
})
.promise();
if (!result.Parameter || !result.Parameter.Value) {
throw new Error(
`Parameter ${parameterName} not found or has no value.`
);
}
return result.Parameter.Value ?? "";
} catch (error) {
console.error(`Error retrieving parameter ${parameterName}:`, error);
throw error;
}
}
}
終わりに
以下のリポジトリで使ってます。

