0
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 1 year has passed since last update.

# AWS SSM Parameter Storeで環境変数を管理して、Lambdaで利用する方法

0
Posted at

はじめに

AWS SSM Parameter Storeを利用して、Lambda関数で環境変数を管理する方法について説明します。
AWS SSM Parameter Storeは、AWSが提供するサービスで、アプリケーションの設定情報やシークレット情報を安全に保存し、管理することができます。これにより、環境変数をコードにハードコーディングすることなく、Lambda関数で利用することができます。

今回はHonoで作成したWebAPIから環境変数を取得する手順について記録します。
TypescriptやJavascriptで動くフレームワークなら同様にできるはずです。

AWSコンソールで環境変数を作成

  1. AWSコンソールにログインし、SSM Parameter Storeのページに移動します。
  2. 「パラメータの作成」ボタンをクリックします。
  3. 以下画像のように階層構造的に名前を入力し、パラメータの作成をクリックします。

image.png

実装

AWSWrapper.ts

AWS関連クラスの継承元となる、ラッパーを作成して使っています。
環境変数に以下を定義しています

  • リージョン
  • アクセスキー
  • シークレットキー

これらの認証情報は「AmazonSSMReadOnlyAccess」ポリシーが設定されたIAMの
セキュリティ認証情報 > アクセスキーを作成 から作成できます。

image.png

ちなみに紐づいている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;
    }
  }
}

終わりに

以下のリポジトリで使ってます。

0
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
0
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?