LoginSignup
2
0

More than 1 year has passed since last update.

VPCアクセス可能なlambda関数をamplifyで作成する方法 発展版 ~ env毎にVPCを切替可能とする

Last updated at Posted at 2023-01-29

先に以下の記事を投稿しました

この記事ではamplifyで1つのenvしか用いない前提で記載しています。
本記事ではこの記事(以降元記事と記載します)を発展させて、envを複数用意した場合にenv毎に別のVPCに接続するための手順を記載します。

やること

元記事の手順をベースとして、以下の部分を変更してlambdaを作成します。

  • セキュリティグループIDとサブネットグループIDをパラメータ化し、値は別ファイルに設定する
  • 値の設定先としてenv毎にパラメータを指定できるamplify/team-provider-info.jsonを使用する

前提

amplify add envにより、devに加えてstgを作成済みとします。 これ以外は元記事の前提に準じます。

手順

太字が元記事と異なる部分)

  1. 【事前準備】lambdaの新規作成
  2. lambdaのテンプレートファイル編集
    1. VPC接続設定に必要なIAMポリシー追加
    2. パラメータ定義
    3. パラメータを用いてVPC接続設定追加
    4. リソースの構築順指定
  3. env毎に異なるパラメータ値を設定
    1. envがdevの場合のパラメータ値を追加
    2. envがstgの場合のパラメータ値を追加
  4. ビルド&クラウドへの反映
  5. 確認

以下に詳細な手順を記載します。

1. 【事前準備】lambdaの新規作成

元記事と同じ手順とにてvpclambda関数を作成します。(詳細は省略)

2. lambdaのテンプレートファイル編集

1.で作成されたテンプレートファイルvpclambda-cloudformation-template.json に対して4か所追記します。
List型パラメータを定義する場合のパラメータの型は、"Type": "CommaDelimitedList" とします。

テンプレートファイル追記箇所
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Lambda Function resource stack creation using Amplify CLI",
  "Parameters": {
    ...
    "s3Key": {...},
+    // 2-2. パラメータ定義(上の行のカンマも追加必要)
+    "subnetIds": {
+      "Type": "CommaDelimitedList"
+    },
+    "securityGroupIds": {
+      "Type": "CommaDelimitedList"
+    }
+    // 2-2 ここまで
  },
  "Conditions": {...},
  "Resources": {
    "LambdaFunction": {
+      // 2-4. リソースの構築順指定
+      //   (2-1のIAMポリシー作成後にLambdaFunctionを作成)
+      "DependsOn": [
+        "LambdaExecutionPolicyCustom"
+      ],
+      // 2-4 ここまで
      "Type": "AWS::Lambda::Function",
      "Metadata": {...},
      "Properties": {
        ...
        "Timeout": 25,
+        // 2-3. パラメータを用いてVPC接続設定追加(上の行のカンマも追加必要)
+        "VpcConfig": {
+          "SecurityGroupIds": {
+            "Ref": "securityGroupIds"
+          },
+          "SubnetIds":  {
+            "Ref": "subnetIds"
+          }
+        }
+        // 2-3 ここまで
      }
    },
    "LambdaExecutionRole": {...},
    "lambdaexecutionpolicy": {...},
+    // 2-1. VPC接続設定に必要なIAMポリシー追加(上の行のカンマも追加必要)
+    "LambdaExecutionPolicyCustom": {
+      "DependsOn": [
+        "LambdaExecutionRole"
+      ],
+      "Type": "AWS::IAM::Policy",
+      "Properties": {
+        "PolicyName": "lambda-execution-policy-custom",
+        "Roles": [
+          {
+            "Ref": "LambdaExecutionRole"
+          }
+        ],
+        "PolicyDocument": {
+          "Version": "2012-10-17",
+          "Statement": [
+            {
+              "Effect": "Allow",
+              "Action": [
+                "ec2:CreateNetworkInterface",
+                "ec2:DescribeNetworkInterfaces",
+                "ec2:DeleteNetworkInterface"
+              ],
+              "Resource": "*"
+            }
+          ]
+        }
+      }
+    }
+   // 2-1 ここまで
  },
  "Outputs": {...}
}
  • ...は省略の意
  • 行頭は追加行を強調するために使用
    (コピペする場合はを削除すること)
  • テンプレート内にコメントを記入できますが、次の手順を実施するとコメントは消えます

3. env毎に異なるパラメータ値を設定

パラメータの値はamplify/team-provider-info.jsonへList型として指定します。
env毎、lambda関数毎に異なるパラメータを指定できます。

amplify/team-provider-info.json
{
  "dev": {
    "awscloudformation": {...},
    "categories": {
      "function": {
        ...
        "vpclambda": {
          ...
+          // 3-1. envがdevの場合のパラメータ値を追加
+          "securityGroupIds": [
+            "sg-XXXXXXXXXXXXXXXXX"
+          ],
+          "subnetIds": [
+            "subnet-XXXXXXXXXXXXXXXXX",
+            "subnet-XXXXXXXXXXXXXXXXX",
+            "subnet-XXXXXXXXXXXXXXXXX"
+          ]
+          // 3-1 ここまで
        }
      }
    }
  },
  "stg": {
    "awscloudformation": {...},
    "categories": {
      "function": {
        ...
        "vpclambda": {
          ...
+          // 3-2. envがstgの場合のパラメータ値を追加
+          "securityGroupIds": [
+            "sg-XXXXXXXXXXXXXXXXX"
+          ],
+          "subnetIds": [
+            "subnet-XXXXXXXXXXXXXXXXX",
+            "subnet-XXXXXXXXXXXXXXXXX",
+            "subnet-XXXXXXXXXXXXXXXXX"
+          ]
+          // 3-2 ここまで
        }
      }
    }
  }
}

4. ビルド&クラウドへの反映

以下のコマンドを実施します。env毎に実行する必要があります。

実行コマンド
amplify push -y

5. 確認

元記事同様、AWSコンソールのlambdaのVPC設定を確認ください。
以下のようにenv毎に別のlambdaが作成されますので、それぞれのlambdaのコンソール画面を確認ください。

  • vpclambda-dev
  • vpclambda-stg

image.png

最後に

この記事を書くにあたって、cloudformationのList型パラメータの扱い方がとても勉強になりました。
"Type": "CommaDelimitedList"は、知らないとなかなか調べられないですよね。

参考

以下のサイトを参考にさせて頂いています。ありがとうございます。

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