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?

Lambda 関数が AWS RAM でアカウント間共有できないのはなあぜ?

0
Posted at

はじめに

どーも!shihopowerです!
今回は、Lambda 関数が AWS RAM でアカウント間共有できない理由についてお話しします。

SAP(AWS認定 Solutions Architect - Professional)の対策をしていると、こんな解説に出会いました。

「Lambda 関数は AWS アカウントに限定されており、RAM を使用してアカウント間で直接共有することはできない」

これを見たとき、「え!そうなの!?」と驚きました。
こういう新しい発見をしたとき、「なぜそうなのか」という仕組みのところまで理解するのが大事だと思っています。

というわけで、AWS 公式ドキュメントをもとに掘り下げてみました。それでは解説に入ります!


目次

  1. AWS RAM とは?(30秒おさらい)
  2. RAM で共有できるリソース一覧を確認する
  3. Lambda がリストにない = 共有できない、その理由
  4. Lambda のクロスアカウント利用、じゃあどうするの?
  5. まとめ

1. AWS RAM とは?(30秒おさらい)

AWS RAM(Resource Access Manager) とは、AWS リソースを複数のアカウント間で安全に共有するためのサービスです。

たとえば、こんなことができます。

  • VPC サブネットを組織内の別アカウントと共有する
  • Transit Gateway を複数アカウントで共有する
  • License Manager の設定を組織全体に適用する

マルチアカウント構成をとっている企業にとって、「一度作ったリソースを使い回せる」というのは運用コスト削減に直結する便利な機能です。


2. RAM で共有できるリソース一覧を確認する

AWS 公式ドキュメント「Shareable AWS resources」には、RAM で共有できるリソースタイプの一覧が掲載されています。

主なサービスを抜粋すると、以下のものが対応しています。

サービス 共有できるリソース例
Amazon VPC サブネット、Transit Gateway、Prefix List など
Amazon EC2 キャパシティ予約、Dedicated Host など
Amazon Aurora DB クラスター
AWS License Manager ライセンス設定
AWS Network Firewall ファイアウォール、ポリシー、ルールグループ
Amazon Route 53 Resolver ルール、DNS Firewall ルールグループ
Amazon SageMaker AI Feature Group、パイプライン など

この一覧には、App Mesh、AppSync、API Gateway、Backup、Bedrock など、多くのサービスが名を連ねています。

しかし、AWS Lambda はどこにも載っていません。

これが答えです。


3. Lambda がリストにない = 共有できない、その理由

3-1. RAM の設計思想と Lambda の性質のミスマッチ

RAM が共有対象とするリソースは、主に 「インフラ基盤・設定的なリソース」 です。

  • VPC サブネット → 複数アカウントのリソースを同じネットワーク上に展開できる
  • Transit Gateway → 複数の VPC やオンプレとの通信ハブを共有できる
  • ライセンス設定 → 一度定義したルールを組織全体に適用できる

これらに共通するのは、「インフラの土台や設定」を共有するという考え方です。

一方、Lambda 関数は コード・ランタイム・IAM ロール・環境変数・VPC 設定・レイヤー などがすべてひとまとまりになった「実行ロジックそのもの」です。特定の AWS アカウントおよびリージョンに強く紐づいており、RAM が想定する「インフラ基盤・設定の共有」とは性質が根本的に異なります。 そのため、RAM の共有対象リソースとして設計されていません。

3-2. 公式ドキュメントの結論

AWS 公式ドキュメントでは、共有可能なリソースタイプは明示的にリストアップされており、一覧に掲載されていないリソースは共有できないというシンプルなルールが適用されています。

Lambda はそのリストに存在しない = RAM による共有はサポートされていない、ということです。


4. Lambda のクロスアカウント利用、じゃあどうするの?

「RAM では共有できないとわかった。でも別アカウントから Lambda を呼び出したいケースはある!」という方もいるかと思います。AWS は Lambda のクロスアカウント利用に対して、別の仕組みを提供しています。

方法①:リソースベースポリシーで呼び出し権限を付与する

最もシンプルな方法です。lambda:AddPermission を使い、Lambda 関数のリソースベースポリシーに別アカウントからの呼び出し許可を追加します。

aws lambda add-permission \
  --function-name my-function \
  --statement-id cross-account-invoke \
  --action lambda:InvokeFunction \
  --principal 123456789012 \  # 呼び出し元のアカウントID
  --region ap-northeast-1

これにより、指定したアカウントから直接 Lambda を呼び出せるようになります。

方法②:Amazon VPC Lattice 経由で共有する

Amazon VPC Lattice とは、複数の VPC やアカウントにまたがるサービス間通信を、一元的に接続・認証・監視できるマネージドサービスです。サービスメッシュのような役割を担い、Lambda や EC2、ECS などをバックエンドとして登録できます。

VPC Lattice のサービスは RAM での共有に対応しています。Lambda をバックエンドとした VPC Lattice サービスを作成し、そのサービスを RAM で他アカウントと共有することで、マルチアカウント環境でも安全に Lambda を利用できます。

方法③:Amazon EventBridge でクロスアカウントにトリガーする

EventBridge のイベントバスをクロスアカウントに設定することで、別アカウントのイベントをトリガーに Lambda を起動することもできます。


5. まとめ

最後に今回の内容を整理します。

ポイント 内容
Lambda が RAM で共有できない理由 RAM の共有可能リソース一覧に Lambda が含まれていないから
なぜリストにないのか Lambda は「実行ロジックそのもの」であり、RAM が想定する「インフラ基盤・設定リソースの共有」という設計思想とミスマッチ
代替手段 リソースベースポリシー / VPC Lattice / EventBridge

SAP の試験対策をしていると、「なぜ?」と立ち止まれる問題が多くあります。単に「Lambda は RAM で共有できない」と暗記するのではなく、公式ドキュメントまで立ち返って仕組みを理解する習慣が、応用問題への対応力につながると感じました。

同じように SAP を勉強している方の参考になれば嬉しいです!


参考

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?