使用SORACOM的Terraform提供者来自动化与AWS的集成
终于,SORACOM的Terraform提供程序已经发布啦?
本文是为了庆祝公开以及表达对作者的尊重而写的。
在使用SORACOM时所感受到的挑战。
大家在建立IoT系统时,你们是如何管理云端的设置和资源的?我在IoT开发中使用Terraform来管理AWS周围的设置和资源。AWS提供商几乎支持大多数服务,并且提供的文档也很详细。我觉得使用Terraform可以快速部署、清晰地了解哪些地方被修改以及对变更有很好的支持,因此感受到了它的优点。
一方面,关于SORACOM而言,它无法进行IaC,坦白地说,每次都需要手动登录SORACOM控制台进行配置。从幂等性的角度来看,这非常弱,并且这项工作容易出现人为因素带来的问题,也是一个挑战。

通过Terraform管理SORACOM的设置的好处。
优点1:确保幂等性
这是IaC本身的好处。在开发IoT系统时,当你想要创建一个类似的环境(如测试环境)时,只需一次命令即可构建相同的环境。即使出现问题,也可以重新构建,这样可以减轻心理负担,非常好。
优点2:与云端的协作更加便捷
这是Terraform独有的优点。通过使用Provider,可以将各种云服务的资源进行编码,因此可以直接将在AWS上创建的资源信息(如ARN)反映到SORACOM的配置中。
例如,在使用SORACOM Funnel的情况下,需要将用于AWS IoT Core的终端节点和身份验证的IAM Role的ARN输入到SORACOM SIM组的SORACOM Funnel设置中。通过使用Terraform,这将自动完成协作。
优点3:可以更好地理解SORACOM
由于SORACOM的控制台非常直观易懂,文档内容也非常丰富,因此可以直观地使用各项服务。虽然这本身是非常好的事情,但有时也会导致一些问题,比如不理解各资源之间的关系,或者无法注意到一些可选的设置选项等。
通过使用Terraform定义资源,可以对这些资源深入理解。
尝试一下
所以我马上开始使用它。这次我使用SORACOM Funnel来将数据传送到AWS IoT Core,并在Terraform中创建了一个完整的环境。

使用SORACOM CLI创建配置文件。
我将使用此文档作为参考来创建配置文件。使用此配置文件,Terraform将操作SORACOM上的设置。
请注意,目前仅支持使用认证密钥ID和认证密钥秘钥进行认证。使用1个根用户的电子邮件地址和密码进行认证会导致错误,请注意。
使用SORACOM的Terraform提供者
为了使用SORACOM的Terraform提供程序,需要添加以下描述:
terraform {
required_providers {
soracom = {
source = "ks6088ts/soracom"
version = "~> 0.0.3"
}
}
}
provider "soracom" {
profile = "default" # SORACOM CLIで登録済のprofile名
}
只需执行 terraform init 就可以准备好使用提供者。下面是一个定义 SORACOM SIM 组的示例。
resource "soracom_group" "my_group" {
tags = {
name = "soracom-funnel-aws-iot-core-terraform"
}
}
AWS的整合也很容易!
创建AWS IAM身份,以及创建SORACOM身份验证凭据存储的示例。之前需要手动复制和粘贴账户ID、ARN和外部ID,现在能够全自动集成,非常方便!
# AWS IAM Role
resource "aws_iam_role" "my_role" {
name = "soracom-funnel-aws-iot-core-terraform"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
AWS = "arn:aws:iam::762707677580:root" // SORACOM 日本カバレッジのアカウントID
}
Condition = {
StringEquals = {
"sts:ExternalId" = var.aws_iam_role_external_id
}
}
}
]
})
# 中略...
}
# SORACOM 認証情報ストア
resource "soracom_credentials" "my_aws_iam_role_credentials" {
credentials_id = "aws-iam-role-credentials"
description = "AWS IAM role credentials by terraform-provider-soracom"
type = "aws-iam-role-credentials"
credentials = {
roleArn = aws_iam_role.my_role.arn
externalId = var.aws_iam_role_external_id
}
}
验证行为
最终完成的源代码已在此处公开。
将此源代码放在您的手边,执行terraform init → terraform apply命令即可部署。
这次我们将使用SORACOM Arc创建的虚拟SIM卡关联到已经准备好的SIM卡组中。

当设备在这种状态下发送数据时,我们可以在AWS IoT Core上确认收到。

总结
遗憾的是,目前Terraform适用于SORACOM的提供者是非官方的,而且无法支持SORACOM提供的某些服务。然而,即使在这种限制下,提供者的出现也是一大步骤。
由于我目前正在开发一个将SORACOM和AWS集成的物联网系统,所以我将积极利用并且如果可能的话也希望能够做出贡献。
请大家务必亲自尝试一下。