【发布时间】:2020-02-06 02:56:41
【问题描述】:
我对 AWS Amplify 和 CDK 有疑问。 在 Amplify 中,我们是否可以创建新环境并将它们发布到各自的存储桶中?为什么我们需要 CDK? 有什么用例可以让 CDK 更适合?
【问题讨论】:
标签: amazon-web-services aws-amplify aws-cdk
我对 AWS Amplify 和 CDK 有疑问。 在 Amplify 中,我们是否可以创建新环境并将它们发布到各自的存储桶中?为什么我们需要 CDK? 有什么用例可以让 CDK 更适合?
【问题讨论】:
标签: amazon-web-services aws-amplify aws-cdk
CDK 让您可以部署(相当)任何类型的 Stack,您必须手动使用 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。
【讨论】:
Amplify 适用于部署静态站点,具有简单的数据库和 Cognito 集成,但不适用于管理大量环境或更复杂的堆栈。 CDK 更适合管理复杂的基础设施部署。这是一个如何使用 CDK 部署静态站点的示例。 https://github.com/davidsteed/awscdkstaticsite。它通过处理安全标头和证书生成来改进 Amplify 的功能。
【讨论】:
您会发现您需要为生产应用程序编写和编辑大量 CloudFormation 模板。这会很快变得非常痛苦。
Amplify 应该发出 CDK 代码,这将使我们两全其美。
我最初使用 Amplify 很多,因为它可以快速引导您,但自从发现 CDK 后,CDK 是我使用最多的工具。
【讨论】: