使用SORACOM的Terraform提供者来自动化与AWS的集成

终于,SORACOM的Terraform提供程序已经发布啦?

 

本文是为了庆祝公开以及表达对作者的尊重而写的。

在使用SORACOM时所感受到的挑战。

大家在建立IoT系统时,你们是如何管理云端的设置和资源的?我在IoT开发中使用Terraform来管理AWS周围的设置和资源。AWS提供商几乎支持大多数服务,并且提供的文档也很详细。我觉得使用Terraform可以快速部署、清晰地了解哪些地方被修改以及对变更有很好的支持,因此感受到了它的优点。

一方面,关于SORACOM而言,它无法进行IaC,坦白地说,每次都需要手动登录SORACOM控制台进行配置。从幂等性的角度来看,这非常弱,并且这项工作容易出现人为因素带来的问题,也是一个挑战。

SIM_グループ_-_SORACOM_ユーザーコンソール.png

通过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中创建了一个完整的环境。

funnel_drawio_—_drawio-saves.png

使用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卡组中。

SIM_管理_-_SORACOM_ユーザーコンソール.png

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

Screenshot_2022-10-24_at_05-40-11_AWS_IoT_-_MQTT_test_client.png

总结

遗憾的是,目前Terraform适用于SORACOM的提供者是非官方的,而且无法支持SORACOM提供的某些服务。然而,即使在这种限制下,提供者的出现也是一大步骤。

由于我目前正在开发一个将SORACOM和AWS集成的物联网系统,所以我将积极利用并且如果可能的话也希望能够做出贡献。

请大家务必亲自尝试一下。

https://github.com/ks6088ts/terraform-provider-soracom/blob/f02e4b10ff844218fe9767ccb4614136a4c06cad/internal/conns/conns.go#L131 → 在这里可以找到相关信息:https://github.com/ks6088ts/terraform-provider-soracom/blob/f02e4b10ff844218fe9767ccb4614136a4c06cad/internal/conns/conns.go#L131https://tech.fusic.co.jp/posts/2022-04-24-m5stack-soracom-arc/ → 这篇文章提供了关于m5stack和Soracom Arc的信息:https://tech.fusic.co.jp/posts/2022-04-24-m5stack-soracom-arc/

bannerAds