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.

VPC内のlambdaからVPC外のlambdaを実行する

Last updated at Posted at 2023-06-06

概要

  • デフォルトVPC内のap-northeast-1aのデフォルトサブネットに設置されたlambda関数から、VPCが設定されていないlambdaを同期で実行する方法をまとめる。

やりたいこと

  • VPC内の関数Aを手動実行し、関数A内で関数Bにリクエストが投げられ、VPC外の関数Bが実行される。

work__Online_Whiteboard_for_Visual_Collaboration.png

情報

  • 各lambda関数のランタイムはNode.js18を使用する。

方法

Lambda関数Bの作成

  • 先にLambda関数Aから呼び出されるLambda関数Bを作成する。

  • 下記の情報で関数を作成する。

    • 名前:function_b
    • ランタイム:Node.js18
  • 下記のコードを記載し、hello-worldテストを作成し実行して「Hello world for function B」が出力されることを確認する。

    export const handler = async(event) => {
        // TODO implement
        const logString = 'Hello world for function B';
        console.log(logString);
        const response = {
            statusCode: 200,
            body: JSON.stringify(logString),
        };
        return response;
    };
    
    

セキュリティグループの作成

  • 下記の情報でセキュリティグループを作成する。
    • 名前:forVpcEndPointSG
    • 説明:forVpcEndPointSG
    • VPC:デフォルトVPCを選択
    • インバウンドルール
      • タイプ:HTTPS
      • ソース:0.0.0.0/0
    • アウトバウンドルール
      • タイプ:すべてのトラフィック
      • 送信先:0.0.0.0/0

VPCエンドポイントの作成

  • 下記の情報でVPCエンドポイントを作成する。
    • 名前:forFunctionAVpcEndPoint
    • サービスカテゴリ:AWSのサービス
    • サービス:com.amazonaws.ap-northeast-1.lambda
    • VPC:デフォルトVPC
    • サブネット:ap-northeast-1aのデフォルトサブネット
    • IPアドレスタイプ:IPv4
    • セキュリティグループ:forVpcEndPointSG
    • ポリシー:フルアクセス

Lambda関数Aの作成

  • 次にLambda関数Bを呼び出すLambda関数Aを作成する。

  • 下記の情報で関数を作成する。

    • 名前:function_a
    • ランタイム:Node.js18
  • 下記のコードを記載する。

    import { Lambda } from '@aws-sdk/client-lambda';
    
    const lambda = new Lambda({
      region: "ap-northeast-1"
    });
    
    export async function handler(event) {
    
      const functionBArn = 'lambda関数BのARN';
    
      const params = {
        FunctionName: functionBArn,
        InvocationType: 'RequestResponse',
        Payload: JSON.stringify(event),
      };
    
      try {
        // Lambda関数Bを呼び出し、結果を取得
        await lambda.invoke(params);
        
        console.log('Hello world for function A');
      
        return true;
      } catch (error) {
        console.error('Error invoking functionB:', error);
        throw error;
      }
    }
    
    
  • 下記の方法でlambda関数Aにlambda関数Bを実行するための権限を付与する。

    • lambda関数AのIAMロールに下記インラインポリシーを追加する。

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "lambda関数BのARN"
          }
        ]
      }
      
  • lambda関数AのIAMロールに「AWSLambdaVPCAccessExecutionRole」ポリシーをアタッチする。

  • lambda関数AをデフォルトVPCのap-northeast-1aのデフォルトサブネットに設定する。セキュリティグループはデフォルトのセキュリティグループを割り当てる。

  • hello-worldテストを作成しlambda関数Aを実行するとlambda関数Aのログに「Hello world for function A」が出力され、lambda関数Bのログに「Hello world for function B」が出力される。

参考文献

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?