尝试部署智能领域框架
尝试过的事情 (Shǐ yì guò de
我想在AWS上轻松地运行FIWARE,所以我正在调查各种方法。
因为Orion Context Broker已经容器化了,所以我正在尝试找到在Fargate等上面运行它的方法。
在智慧城市的城市操作系统中,使用AWS和FIWARE进行数据协作的方法
根据这篇文章,似乎有两种可行的选择。
Smart Territory Framework (STF)
コンテキストブローカーは Orion ではなく Scorpio というものが使われている
FIWARE Orion Context Broker and Cygnus on AWS
因为STF看起来有各种各样的设备和氛围,所以我决定先试用STF。
基于我的使用需求,我发现STF不适合我,所以现在我正准备研究另一种解决方案。
本文将记录STF不适合我的原因以及部署STF的备忘录。
暂时部署 STF
在浏览了STF的GitHub存储库中的README之后,看起来可以使用AWS的无服务器服务来配置上下文代理。
根据README中的系统架构图,看起来是以下的样子。
-
- Scorpio Context Broker のコンテナを Fargate で構成する
Scorpio コンテキストブローカーについて
Apache Kafkaで実装されているらしい
Fargate の利用料が発生する
DB 部分は Aurora で構成する
由于我是AWS的新手,对于Kafka和Fargate之间的关系并不太了解,所以我决定先部署并放置一段时间,如果发现费用太高的话就会将其废弃,这种闲置浪费的做法。
(我只是在有兴趣的时候会玩一下,所以大部分时间都会处于闲置状态。如果在闲置期间费用过高的话,我会考虑停止使用。)
准备
所需之物
-
- AWS アカウント
-
- 管理者権限を持つ IAM ユーザ
- AWS CDK
因为我想先试用一下,所以我稍微阅读了一下文档,然后尝试部署。
由于使用 Fargate 需要付费,为了能够随时进行销毁,我只需要掌握部署和销毁的方法即可。
部署()
cdk deploy
在开始之前,请先执行 `npm install` 和 `cdk bootstrap`。详细信息请参阅 STF 的 README。
放弃
cdk destroy
部署
我会从GitHub仓库中获取项目源代码,并根据 Getting started 的说明,查看 parameter.ts 文件的设置。首先,我会尝试进行 npm install、cdk bootstrap 和 cdk deploy 的步骤,暂时不做任何更改。
好像有一些进展了。
如果在AWS管理控制台上查看Cloud Formation,会发现有一个名为StfCore的堆栈在运行。
StfCore: creating CloudFormation changeset...
[██████████████▌···········································] (1/4)
2:43:30 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | StfCore
2:43:35 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | ScorpioServerless....estedStackResource


放置了一段时间后,本月的预测账单超过了1700日元(虽然是预测,实际上尚未达到1700日元,但如果不管它,可能会趋近于这个数值)。这不太好,所以我会立即删除并重新检查设置。
重新审视 parameters.ts
我认为可能与AWS的使用费有关的设置项目如下:
-
- stf_scorpio
aurora_serverless
これを true にすると、PostgreSQL の RDS インスタンスを作らず、Aurora のクラスタを作るらしい?(Aurora よく分かってない)
Aurora は書込みが無料で、月100GBまでの読出しが無料らしいので、ちょっと使ってみる程度なら Aurora が良さそう。ということで Aurora を使うことにする。
aurora_scaling: Aurora のスケーリングに関する設定みたい。とりあえずデフォルトのままとする。
rds_instance_type: RDS のインスタンスで、デフォルトは t4g.small
無料枠で使える t3.micro に変更すると良さそうだけど、今回は RDS を使わないので変更しない
rds_storage_type: gp3 のままでよさそう(無料で使えそう)
kafka_instance_type: ECS で動く Scorpio のインスタンスだと思う
Kafka は EC2 のインスタンスが作られるらしいので、たぶん EC2 の無料枠である t2.micro とか t3.micro にしとけばいいと思ったら、micro という選択肢がないみたい・・(最小で small)
仕方ないので、デフォルトの kafka.t3.small を使うことにする
Kafka 自体、コストパフォーマンス関係のいろんな設定ができるみたいなので、もっと調べれば最適な構成が見つかりそうな気がする
fargate_desired_count: ? Kafka のインスタンス数の最小値?1でも良さそうな気がするけど、デフォルトで2になってるので、とりあえず2のままにしておく。
最終的に,只是將DB更改為使用Aurora,然後重新部署一次。
可能,Kafka應該不會運行,除非有請求被投放。所以,如果刪除RDS,它就不會花費任何錢,只是被放置著。
我的对于 RDS 和 Aurora 的了解还不够充分。根据这篇文章,Aurora 是 RDS 服务的一种形式,基本上是在 RDS 的框架下运行的。所以,Aurora 基本上也会按照和 RDS 相同的方式(根据 DB 实例的使用量计费)进行收费。
或许最好的选择是放弃Aurora,将RDS实例切换到t3.micro。因此,我将使用以下设置重新部署一次。顺便提一下,当将aurora_serverless设置为true进行部署时,Cloud Formation的堆栈停在了中途(并非失败,但经过大约3个小时后没有进展)。根据这篇文章,可能是由于我所使用的AWS区域的问题(我没有进行详细调查)。
最终的参数如下。
import { Aws } from “aws-cdk-lib”;
import { InstanceClass, InstanceSize, InstanceType } from “aws-cdk-lib/aws-ec2”;
import { AuroraCapacityUnit, StorageType } from “aws-cdk-lib/aws-rds”;
export const Parameters = {
stf_iot: {
new_bucket: true, // 如果为true,则堆栈将为STF IoT DataLake创建存储桶。如果已经创建了存储桶,请将其设置为false。
bucket_name: `stf-iot-datalake-${Aws.REGION}-${Aws.ACCOUNT_ID}`, // 默认名称,仅在需要时更改。
shadow_prefix: “Stf”,
sqs_iot_queue_name: `StfIoTQueue-${Aws.REGION}`, // 默认名称,仅在需要时更改。
smart_data_model_url : ‘https://raw.githubusercontent.com/smart-data-models/data-models/master/context.jsonld’,
timeout: ‘0’, // 用于与上下文代理同步的Lambda中的API调用的超时时间。必须是一个字符串以将其传递给env变量。
shadow_indexing: false // 激活阴影的Fleet索引将产生成本,请参阅https://aws.amazon.com/iot-device-management/pricing/
},
stf_scorpio: {
image_context_broker: ‘public.ecr.aws/scorpiobroker/scorpio-aio:latest’, // Scorpio Broker图像的ECR Public画廊链接。
rds_instance_type: InstanceType.of(InstanceClass.T3, InstanceSize.MICRO), // 请参阅https://aws.amazon.com/rds/instance-types/
rds_storage_type: StorageType.GP3, // 请参阅https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html
dabaseName: ‘scorpio’,
aurora_serverless: false, // 如果为false,将创建RDS PostgreSQL数据库实例。如果为true,将创建Aurora集群。
aurora_scaling: {
maxCapacity: AuroraCapacityUnit.ACU_4,
minCapacity: AuroraCapacityUnit.ACU_2
},
kafka_config_name: `stf-kafka-config`,
kafka_number_nodes: 2,
kafka_version: “3.3.1”, // 请参阅https://docs.aws.amazon.com/msk/latest/developerguide/supported-kafka-versions.html
kafka_instance_type: “kafka.t3.small”, // 请参阅https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html
kafka_cluster_name: ‘ScorpioCluster’,
kafka_storage_size: 100, // 请参阅https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html
fargate_desired_count: 2
},
vpc_link_name: ‘scorpio-serverless-vpc-link’
}
暂时先部署这个版本,看看效果如何…
随后

已经置放了一整天,虽然什么都没做但已经被收取了大约3美元的费用。
考虑到只在有兴致的时候使用,平时都是被放置不动的状态,即使几乎什么都不做每月也要被收取一万以上的费用,真是不可行,所以立刻放弃了。
(或许,RDS 方面可能会适用免费额度吧,我猜想)
由于据说使用MSK无服务器时不需要花费任何钱,所以最好使用无服务器架构。但是,目前我不知道如何在STF中使用MSK无服务器。
所以,放弃使用STF,这个备忘录暂时结束。
请参考
-
- Smart Territory Framework (STF)
-
- FIWARE Orion Context Broker and Cygnus on AWS
-
- OSS貢献活動 NECが公開するオープンソース Scorpio NGSI-LD Context Broker
-
- NTT データ:Kafkaとは
-
- Amazon Auroraとは?特徴、RDSとの違い、料金計算方法を解説【Amazon Aurora入門】
- AWS Smart Territory FrameworkでFIWAREを試してみた(その1:ブローカー)