Lambda 関数をデプロイするための CDK

3320 ワード

Lambda 関数をデプロイするための多くのオプションがあります.
  • コードを圧縮して S3 にアップロードします
  • EFS を介して大きな依存関係を共有する
  • CloudFormation によるインライン関数

  • このノートでは、AWS CDK を使用して Lambda 関数をデプロイし、テストのために複数の Lambda 関数を API Gateway と統合する 3 つの方法を共有したいと思います.

    1.ラムダ関数をファイルでデプロイする



    依存関係をインストールする

    python -m pip install --target path-to-lambda numpy 
    


    aws_lambda.関数

    handler_file = aws_lambda.Function(
                self,
                id="lambda-handler-wo-dependencies",
                code=aws_lambda.Code.from_asset(path.join(dirname, "lambda")),
                handler="handler.handler_file",
                runtime=aws_lambda.Runtime.PYTHON_3_8,
                memory_size=512,
                timeout=Duration.seconds(90)
            )
    


    2.ecrイメージによるラムダ関数のデプロイ



    この場合、docker イメージはローカル マシンからビルドされることに注意してください.これがプロジェクト構造です

    - aws_devops
        - lambda
            - Dockerfile
            - .dockerignore
            - handler.py
            - requirements.txt
         -aws_devops_stack.py
    



    handler_ecr = aws_lambda.Function(
                self,
                id="lambda-ecr-build-local",
                code=aws_lambda.EcrImageCode.from_asset_image(
                    directory=path.join(dirname, "lambda")
                ),
                handler=aws_lambda.Handler.FROM_IMAGE,
                runtime=aws_lambda.Runtime.FROM_IMAGE,
                memory_size=512,
                timeout=Duration.seconds(90)
            )
    


    3. 既存の ecr イメージを使用してラムダ関数をデプロイする




    handler = aws_lambda.Function(
                self,
                id="EcrImageId",
                code=aws_lambda.EcrImageCode.from_ecr_image(
                    repository=aws_ecr.Repository.from_repository_name(
                        self,
                        id="EcrImageId",
                        repository_name="EcrRepositoryName"
                    )
                ),
                architecture=aws_lambda.Architecture.ARM_64,
                handler=aws_lambda.Handler.FROM_IMAGE,
                runtime=aws_lambda.Runtime.FROM_IMAGE,
                memory_size=512,
                timeout=Duration.seconds(90),
            )
    


    4. API ゲートウェイを複数のラムダと統合する



    API ゲートウェイを作成する

    api_gw = aws_apigateway.RestApi(
                self,
                id="ApiGatewayLambdaDeployOptions",
                rest_api_name="api-lambda-deploy-options"
            )
    


    API リソースを作成する

    api_file_resource = api_gw.root.add_resource(
                path_part="file"
            )
    


    ラムダ統合を作成する

     api_file_intetgration = aws_apigateway.LambdaIntegration(
                handler=handler_file
            )
    


    メソッドをリソースに追加する

     api_file_resource.add_method(
                http_method="GET",
                integration=api_file_intetgration
            )