amazon-web-services - AWS CDK 与 AWS Amplify
问题描述
我对 AWS Amplify 和 CDK 有疑问。在 Amplify 中,我们是否可以创建新环境并将它们发布到各自的存储桶中?为什么我们需要 CDK?任何可以使 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。
推荐阅读
- javafx - java - 如何将微调器内的文本对齐到javafx的中心?
- amazon-web-services - Fluent-Bit 将 kubernetes 日志发送到 AWS Cloudwatch。如何根据 kubernetes 命名空间更改日志流前缀?
- r - 过滤在 r 第 2 部分中事件“A”的时间范围内发生的事件
- java - 如何在 Java 8 Stream API 中将 List 的列表展平为新的对象 List
- java - 如何在 KSQLDB 查询的行中使用 protobuf 反序列化?
- django - 我在将静态文件上传到 Django 应用程序时遇到了麻烦。我想念什么我不明白
- c# - 如何以编程方式在 Stackdriver 中使用 NLog 和 JsonPayload
- android - Android Navigation - 确认用户导航
- javascript - 如何将动态对象添加到嵌套数组中,使其包含相似的结构
- css - 如何使用 NOT 运算符反转媒体查询?