在 CDK 中配置 lambda 并发

use*_*614 11 amazon-web-services aws-lambda serverless aws-cdk

我正在尝试通过 CDK 提供 lambda 并发性。我有几个 CfnFunctions,我需要配置它们。

只能在别名上进行配置。因此,当我将 autoPublishAlias 添加到 CfnFunction 时,APIG 触发器不起作用。

如何通过 CDK 实现(配置)供应?

谢谢,维诺德。

小智 5

这是 Typescript 中的一个示例:

在此站点上有一个打字稿示例: https://github.com/iph/lambda-experiments/blob/master/pc-asg/lib/pc-asg-stack.ts#L33

  1. 首先创建你的 lambda 函数;
  2. 创建别名(必须通过 currentVersion 属性从 lambda 恢复版本);
  3. 创建一个 ScalableTarget,在此步骤中您将使用前面步骤中创建的信息(functionName 和 aliasName);
  4. 在 target.node.addDependency(alias) 代码中包含这一行非常重要,否则您会收到错误,出于某种原因,尝试创建 ScalableTarget 时 cdk 不会等到创建别名,这line 让它等待创建别名,然后创建 ScalableTarget;
  5. 最后使用数据配置scaleToTrackMetric,使配置的并发量自动扩展;

  • OP 要求提供并发性。您的答案是关于自动缩放。这是两件不同的事情。 (2认同)

jmp*_*jmp 4

我想我明白了:

Java代码

package YOURPACKAGENAMEHERE;

import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import java.util.UUID;
import software.amazon.awscdk.core.Duration;
import software.amazon.awscdk.services.lambda.Alias;
import software.amazon.awscdk.services.lambda.AliasProps;
import software.amazon.awscdk.services.lambda.Code;
import software.amazon.awscdk.services.lambda.Function;
import software.amazon.awscdk.services.lambda.IFunction;
import software.amazon.awscdk.services.lambda.Runtime;
import software.amazon.awscdk.services.lambda.SingletonFunction;
import software.amazon.awscdk.services.lambda.Version;
import software.amazon.awscdk.services.lambda.VersionProps;
import software.amazon.awscdk.services.iam.Role;

public class JavacdexampleStack extends Stack {

    public JavacdexampleStack(final Construct scope, final String id) {
        super(scope, id);

        //create Lambda function
        SingletonFunction lambdaFunction =
        SingletonFunction.Builder.create(this, "cdk-lambda-example")
            .description("Lambda which prints \"I'm running\"")
            .code(Code.fromInline("def main(event, context):\n" + "    print(\"I'm running!\")\n"))
            .handler("index.main")
            .timeout(Duration.seconds(300))
            .runtime(Runtime.PYTHON_3_7)
            .uuid(UUID.randomUUID().toString())
            .role(Role.fromRoleArn(this, "roleId", "arn:aws:iam::111122223333:role/116CD745-C8DA-4569-8058-828EFA93E6D7"))//replace with your execution role or create one in cdk
            .build();

        IFunction lambda = Function.fromFunctionArn(this, "functionId", lambdaFunction.getFunctionArn());

        //create version for alias to be assigned to
        VersionProps versionprop = new VersionProps.Builder()
            .lambda(lambda)
        //assign version which the alias points to with provisioned concurrency
            .provisionedConcurrentExecutions(5)
            .build();

        Version version = new Version(this, "versionId", versionprop);

        //create alias
        AliasProps aliasprops = new AliasProps.Builder()
            .aliasName("YourAliasNameHere")
            .version(version)
            .build();
        Alias alias = new Alias(this,"aliasId", aliasprops);

    }
}
Run Code Online (Sandbox Code Playgroud)

输出

配置并发图像

已采取的初步步骤

package YOURPACKAGENAMEHERE;

import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import java.util.UUID;
import software.amazon.awscdk.core.Duration;
import software.amazon.awscdk.services.lambda.Alias;
import software.amazon.awscdk.services.lambda.AliasProps;
import software.amazon.awscdk.services.lambda.Code;
import software.amazon.awscdk.services.lambda.Function;
import software.amazon.awscdk.services.lambda.IFunction;
import software.amazon.awscdk.services.lambda.Runtime;
import software.amazon.awscdk.services.lambda.SingletonFunction;
import software.amazon.awscdk.services.lambda.Version;
import software.amazon.awscdk.services.lambda.VersionProps;
import software.amazon.awscdk.services.iam.Role;

public class JavacdexampleStack extends Stack {

    public JavacdexampleStack(final Construct scope, final String id) {
        super(scope, id);

        //create Lambda function
        SingletonFunction lambdaFunction =
        SingletonFunction.Builder.create(this, "cdk-lambda-example")
            .description("Lambda which prints \"I'm running\"")
            .code(Code.fromInline("def main(event, context):\n" + "    print(\"I'm running!\")\n"))
            .handler("index.main")
            .timeout(Duration.seconds(300))
            .runtime(Runtime.PYTHON_3_7)
            .uuid(UUID.randomUUID().toString())
            .role(Role.fromRoleArn(this, "roleId", "arn:aws:iam::111122223333:role/116CD745-C8DA-4569-8058-828EFA93E6D7"))//replace with your execution role or create one in cdk
            .build();

        IFunction lambda = Function.fromFunctionArn(this, "functionId", lambdaFunction.getFunctionArn());

        //create version for alias to be assigned to
        VersionProps versionprop = new VersionProps.Builder()
            .lambda(lambda)
        //assign version which the alias points to with provisioned concurrency
            .provisionedConcurrentExecutions(5)
            .build();

        Version version = new Version(this, "versionId", versionprop);

        //create alias
        AliasProps aliasprops = new AliasProps.Builder()
            .aliasName("YourAliasNameHere")
            .version(version)
            .build();
        Alias alias = new Alias(this,"aliasId", aliasprops);

    }
}
Run Code Online (Sandbox Code Playgroud)

pom.xml

<dependencies>
    <!-- AWS Cloud Development Kit -->
    <dependency>
        <groupId>software.amazon.awscdk</groupId>
        <artifactId>core</artifactId>
        <version>1.22.0</version>
    </dependency>

    <dependency>
        <groupId>software.amazon.awscdk</groupId>
        <artifactId>lambda</artifactId>
        <version>1.22.0</version>
    </dependency>

    <dependency>
        <groupId>software.amazon.awscdk</groupId>
        <artifactId>events-targets</artifactId>
        <version>1.22.0</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)