我对AWS Amplify和CDK心存疑虑。在Amplify中,我们是否可以创建新环境并将其发布到各自的存储桶中?为什么我们需要CDK?有没有能让CDK更合适的用例?
发布于 2020-02-07 17:04:04
CDK允许您部署(相当于)使用cloudformation手动完成的任何类型的Stack。使用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);通过这几行代码,您已经创建了一个包含一个DynamoDB表(使用流)和一个从该表读取的Lambda的CloudFormation堆栈。
发布于 2020-03-29 15:49:00
Amplify适用于部署静态站点,具有简单的数据库和Cognito集成,但不适合管理大量环境或更复杂的堆栈。CDK在管理复杂的基础设施部署方面要好得多。这是一个使用CDK部署静态站点的示例。https://github.com/davidsteed/awscdkstaticsite。它通过处理安全头部和证书生成改进了Amplify所能做的事情。
发布于 2021-07-31 00:28:43
你会发现你需要为一个生产应用编写和编辑大量的CloudFormation模板。很快就会变得非常痛苦。
Amplify应该发出CDK代码,这将使我们两全其美。
我最初经常使用Amplify,因为它可以快速引导您,但自从发现CDK以来,CDK是我使用最多的工具。
https://stackoverflow.com/questions/60087064
复制相似问题