首页 > 解决方案 > AWS CDK 与 AWS Amplify

问题描述

我对 AWS Amplify 和 CDK 有疑问。在 Amplify 中,我们是否可以创建新环境并将它们发布到各自的存储桶中?为什么我们需要 CDK?任何可以使 CDK 更适合的用例?

标签: amazon-web-servicesaws-amplifyaws-cdk

解决方案


CDK 允许您部署(相当)您必须手动使用 cloudformation 执行的任何类型的堆栈。使用cdk,您将更快速、更安全地创建 CloudFormation 堆栈。

JAVA中的一个例子,为了创建一个新的Table,你可以使用下面的代码来代替处理YAML配置:

 private Table CreateMasterDataTable(String TABLE_NAME) {
    return Table.Builder.create(this, TABLE_NAME + "_MasterDataTable")
            .tableName(TABLE_NAME.concat("_gvr-bic-masterdata"))
            .partitionKey(Attribute.builder().type(AttributeType.STRING).name("siteId").build())
            .removalPolicy(RemovalPolicy.RETAIN)
            .stream(StreamViewType.NEW_AND_OLD_IMAGES)
            .readCapacity(5)
            .writeCapacity(5)
            .build();
}

为了创建一个新的 Lambda(提供一个已经存在的 JAR),您可以使用以下代码而不是处理 YAML 配置:

private Function CreateSiteAggregationNowFunction() {
    Map<String, String> env = new HashMap<>();
    env.put(Constants.LAMBDA_KEY_ENV, API_NAME);
    return Function.Builder.create(this, API_NAME + "_SiteAggregationNow")
            .code(Code.fromAsset(Constants.LAMBDA_PATH_SITE_NOW))
            .handler("it.fabricalab.gvr.bic.DeviceLoader::handleRequest")
            .timeout(Duration.seconds(30))
            .environment(env)
            .functionName(API_NAME.concat("_SiteAggregationNow"))
            .runtime(Runtime.JAVA_8)
            .retryAttempts(Constants.LAMBDA_RETRY_FALLBACK)
            .memorySize(512)
            .build();
}

然后,为了创建让 lambda 从表中读取的策略:

final Table masterDataTable = CreateMasterDataTable(API_NAME);
final Function siteAggregationNow = CreateSiteAggregationNowFunction();

masterDataTable .grantReadData(siteAggregationNow);

通过这几行代码,您创建了一个 CloudFormation 堆栈,其中包含一个 DynamoDB 表(使用流)和一个从该表读取的 Lambda。


推荐阅读