📚

Serverless framework で Lambda を VPC 配下におく

2024/08/15に公開

Serverless framework

https://www.serverless.com/

Serverless framework は、マルチクラウド環境に透過的に Serverless application をデプロイするためのツールと定義されています。

実際のところ AWS Lambda の事例しかほぼ見かけないこともあり、どこまでクラウドサービスをまたいで汎用的に動作させられるかは知りません。

VPC / Subnet / SecurityGroups の指定

Serverless framework の動きとして、VPC / Subnet について未指定の場合、VPC 配下に Lambda が作られません
SecurityGroups については未指定の場合は自動的にデフォルトのものが作成されます

いずれも、他のサービス(RDS、ElastiCache)やアプリケーションと接続しようとした場合に、それぞれの信頼関係を定義するのが難しくなるため、基本的に実用的なアプリケーションの場合はそれぞれについて明示的に指定する必要があります。

Serverless framework のプラグイン 「serverless-vpc-plugin」 を使用すると Serverless framework で VPC 周りの設定管理を行えるようになります。
https://www.serverless.com/plugins/serverless-vpc-plugin
ただしこちらはリソースの作成から一から行われるツールになっており、VPC の作成も含めて行われます。

既存の VPC 配下にアプリケーションをデプロイしたい場合は、 「serverless-vpc-discovery」 を使用するほうが良さそうです
https://www.npmjs.com/package/serverless-vpc-discovery

custom:
  # for serverless-vpc-discovery
  vpcDiscovery:
    vpcName: 'sada'
    subnets:
      - tagKey: 'Name'
        tagValues:
          - 'sada-public-a'
          - 'sada-private-a'
          - 'sada-public-c'
          - 'sada-private-c'
    securityGroups:
      - tagKey: 'Name'
        tagValues:
          - 'sada-lambda'

subnet や security group の特定を、AWS の Tag を用いて行う、というのが serverless-vpc-discovery プラグインの特殊な動きになっています。
既存のリソースに適切なタグ付与が行われていない場合は、事前に別途タグ付けを実施する必要があります。

Discussion