LoginSignup
7
6

More than 5 years have passed since last update.

AWS IoTを使用してGitHubのコードをraspberry piに自動デプロイする

Posted at

概要

これまでは、GitHubにpushしたコードをraspberry piからgit pullしていたが、
この作業が面倒なので、pushしたら自動でraspberry piに反映させるというものを作りました。
C言語のコードも利用するので、コード反映後にコンパイルやrebootなどのコマンドも自動実行できるようになっています。

仕組み

Untitled (1).png

  • GitHubのmasterにpush
  • GitHubのwebhookによりAWS APIGateway を呼び出す
  • AWS APIGatewayより AWS LAmbda Functionを呼び出し、masterリポジトリであれば AWS Iotブローカへパブリッシュする
  • raspberry pi上では専用エージェント(DeployIoT)によりAWS IoTブローカからのサブスクライブを受信する
  • サブスクライブを受信した専用エージェント(DeployIoT)は予め定義されているコマンドを実行する(git pull,make,reboot,等)

各所説明

GitHubのwebhook設定

webhook.JPG

  • Payload URL は AWS APIGateway のエンドポイントを指定します

AWS APIGateway設定

apigateway.JPG

  • リソースのメソッドは「post」にします
  • 統合タイプは「Lambda関数」にします
  • Lambda関数は作成したものを指定します。ここでは「DeployIoT」としてました
  • masterブランチを判定するために「マッピングテンプレート」を編集します
  • マッピングテンプレートのリクエスト本体のパススルーを「テンプレートが定義されていない場合」を選択します
  • Content-Typeの「マッピングテンプレートの追加」をクリックして「application/json」と入力します
  • 値は以下の通りです
{    
    "name" : "$input.params('name')",
    "body" : $input.json('$')
}

apigateway2.JPG

  • エンドポイントはステージ(ここではprodとしました)の-post-/に「URLの呼び出し:」となっている箇所です
  • このエンドポイントをGitHubのwebhook Payload URL欄に設定します

AWS Lambda設定

lambda.JPG

lambda_function code

  • ここでは、関数名「DeployIot」、ランタイム「python3.6」、ハンドラ「lambda_function.lambda_handler」としました
  • カスタムロールを作成して、AWS IoT接続用のポリシーを追加でアタッチします。

Lambda IAMロール

ロールlambda.JPG

IoT接続用 IAMポリシー

ポリシーiot.JPG

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "iot:Publish",
        "Resource": "*"
    }
}

AWS IoT設定

AWS IoTを使用してRaspberry PiとのMQTT通信をC言語で動作させる 」に投稿している内容を参照してください

raspberry pi側の設定

専用エージェント(DeployIoT)」の設定になりますのでこのGitHubのリポジトリを参照してください

考察

  • AWS CodeBuildでLinuxエージェントをインストールして実現可能と推測できるが、デプロイ毎のAWS費用とlinux側の負荷を考慮して却下
  • raspberry pi 側はあえて pythonではなく C言語のAWS SDK を使用した。最初にpythonで動作確認したことにより容易に実装できた。
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6