SSM
AWS Systems Manager の略で、EC2 やオンプレミスサーバーの管理、パラメータストアを提供する
SSM とは
AWS Systems Manager (SSM) は、EC2 インスタンスやオンプレミスサーバーの管理、パラメータストア、セッションマネージャーを提供するサービスである。サーバーレス開発では主に SSM Parameter Store を設定値の管理に使う。
これらの機能は、管理対象のサーバーに常駐する SSM Agent が AWS 側へ外向きの HTTPS 接続を張ることで成り立っている。手元からサーバーへ入っていく経路を作らないため、受信ポートを開けずに操作できるのがこのサービスの基本的な仕組みである。
SSM Parameter Store
Parameter Store は /myapp/prod/log-level のようなパス形式の名前で値を保管し、GetParameter で 1 件、GetParametersByPath でパス配下をまとめて取り出す。取得時に WithDecryption を付け忘れると暗号化した値は暗号文のまま返るため、設定が復号されないまま起動してしまう不具合につながりやすい。
import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm';
const ssm = new SSMClient({});
const param = await ssm.send(new GetParameterCommand({
Name: '/myapp/prod/log-level',
WithDecryption: true,
}));
console.log(param.Parameter?.Value); // "INFO"
パラメータの種類
値の型は 3 つある。暗号化するかどうかと、値を 1 つとして扱うかリストとして扱うかで選ぶ。料金は型では決まらず、後述する階層と取得回数で決まる点に注意する。
| 種類 | 暗号化 | 取り出したときの形 | 用途 |
|---|---|---|---|
| String | なし | 値がそのまま返る | 設定値、URL |
| StringList | なし | カンマ区切りの 1 つの文字列として返る | 宛先やホスト名の並び |
| SecureString | KMS で暗号化 | 復号を指定しないと暗号文が返る | 重要度の低い資格情報 |
暗号化に使うキーを自分で用意した場合は、Parameter Store の料金とは別に KMS 側の料金がかかる。
標準パラメータと上級パラメータ
上限と料金は値の型ではなく階層で決まる。
| 観点 | 標準 | 上級 |
|---|---|---|
| 保管できる数 | 1 アカウント 1 リージョンあたり 10,000 | 100,000 |
| 値の最大サイズ | 4 KB | 8 KB |
| パラメータポリシー (有効期限・未使用の通知) | 使えない | 使える |
| アカウント間での共有 | できない | できる |
| 料金 | 追加料金なし | 1 パラメータあたり月 $0.05 |
料金と上限は 2026 年 8 月時点の公表値である。上級の月額は、月の途中で作った分は時間割りで課金される。
階層は標準から上級へ上げられるが、上級から標準へは戻せない。 8 KB の値を 4 KB に収められない、パラメータポリシーが失われる、暗号化の方式が階層で違う、という 3 点が理由である。 既定の階層はアカウントとリージョンごとに設定でき、Intelligent-Tiering を選べば標準の上限に収まらない要求のときだけ上級が使われる。 設定を変えても既存のパラメータの階層は動かないため、後から一括で下げ直すことはできない。
取得の回数にも上限がある
料金とは別に、取得 API の呼び出し回数にも既定の上限がある。
GetParameter と GetParameters と GetParametersByPath の 3 つは合計で毎秒 40 回までで、
超えると ThrottlingException が返る。
オートスケーリングで一斉に立ち上がったインスタンスや、同時に増えた Lambda の実行環境が起動時に設定を読み込むと、
台数がそれほど多くなくてもこの上限に届く。
高スループットを有効にすれば GetParameter は毎秒 10,000 回まで引き上がるが、
標準パラメータでも取得に 10,000 回あたり $0.05 の料金がかかるようになる (2026 年 8 月時点)。
ここで数える 1 回はリクエスト数ではなくパラメータ 1 件の取り出しで、
10 件をまとめて返すリクエストは 10 回として計算される。
Lambda では AWS Parameters and Secrets Lambda Extension を挟み、
取得した値を実行環境にキャッシュして有効期限が切れるまで再利用する方法で呼び出し回数を抑えられる。
Secrets Manager との使い分け
どちらも値を保管して取り出す機能だが、Secrets Manager は値の入れ替えを前提に作られており、Parameter Store は設定値をパスで整理することに向く。差が出るのは次の 4 点である。
| 観点 | SSM Parameter Store | Secrets Manager |
|---|---|---|
| 保管の料金 | 標準パラメータは追加料金なし。上級パラメータは 1 件あたり月 $0.05 | シークレット 1 件あたり月 $0.40 |
| 自動ローテーション | 標準では行わず、入れ替えの処理は自分で用意する | Lambda を介して、対応するデータベースの資格情報を作り替える |
| 用途 | 設定値、フラグ | パスワード、API キー |
| 階層構造 | /myapp/prod/db-host のようにパスで束ね、配下をまとめて取得できる | 名前で区切るだけで、まとめ取りの単位にはならない |
/myapp/
/prod/
/db-host → "db.example.com"
/log-level → "WARN"
/dev/
/db-host → "localhost"
/log-level → "DEBUG"
Session Manager
SSM Agent が 443 番ポートの外向き通信で ssm と ssmmessages と ec2messages のエンドポイントへつなぎ、その経路を通してシェルの入出力が流れる。接続の向きが内側から外側なので、セキュリティグループで 22 番ポートを開ける必要も、踏み台サーバーや SSH キーを用意する必要もない。誰が接続できるかは IAM ポリシーで決める。インターネットへ出せないサブネットでは、VPC エンドポイントを置いて同じエンドポイント群に到達させる。
記録は 2 段に分かれる。接続したという API の呼び出しは CloudTrail に、セッション中の操作内容は S3 か CloudWatch Logs に残る。ただしポートフォワーディングと、Session Manager 経由の SSH 接続は操作内容の記録に対応しない。監査のために全操作の記録を要件にしている環境では、この 2 つを許可した時点で穴が空くと考えたほうがよい。
aws ssm start-session --target i-1234567890abcdef0
Run Command
複数の EC2 インスタンスにコマンドを一括で実行する。対象はタグで指定できるため、台数が増えても指定を書き換えずに済む。実行は非同期で、送信時に返るコマンド ID を使ってインスタンスごとの成否と出力を後から照会する。
aws ssm send-command \
--targets Key=tag:Environment,Values=prod \
--document-name AWS-RunShellScript \
--parameters commands=["yum update -y"]
サーバーレスでの SSM
Lambda と DynamoDB で組む構成には接続する相手のサーバーがないため、Session Manager や Run Command を使う場面はほとんどない。 使うのは Parameter Store で、環境変数に書くと変更のたびに再デプロイが必要になる値や、コードに残したくない値をここへ寄せる。
迷ったときは、値を定期的に作り替える仕組みが要るかどうかで決める。 作り替えが要る資格情報は Secrets Manager、変わらない設定値は Parameter Store が既定の選び方になる。 そのうえで、取得が多い経路では階層の料金より先に取得回数の上限が問題になることを見込んでおく。
この記事は役に立ちましたか?
関連用語
Secrets Manager
AWS のシークレット管理サービスで、パスワードや API キーを安全に保存 / 自動ローテーションする
IAM
AWS のアクセス管理サービスで、誰が何のリソースにどのような操作を行えるかを制御する
Lambda
AWS のサーバーレスコンピューティングサービスで、コードをイベント駆動で実行する
シークレット管理
パスワード、API キー、証明書などの機密情報を安全に保存 / 配布 / ローテーションする手法
KMS
AWS の暗号鍵管理サービスで、データの暗号化 / 復号に使う鍵を安全に管理する
コンプライアンス
法規制や業界標準への準拠を確保し、セキュリティと信頼性を維持する取り組み