IoT 디바이스에 직접 액세스 할 수있는 "SORACOM Gate"의 GatePeer를 ECS EC2 타입으로 스케일 아웃 할 수있게한다

9072 단어 vxlanSORACOMECSAWS

SORACOM Gate란?



SORACOM에서 제공하는 SIM 카드(SORACOM Air)를 IoT 디바이스에 삽입하여 IoT 디바이스와 AWS VPC 간에 프라이빗 IP 주소로 원격 액세스할 수 있는 서비스입니다.
htps : // 소라코 m. jp/세 rゔぃ세 s/가테/

이 서비스를 사용하면 AWS VPC의 인스턴스에서 매우 쉽게 IoT 디바이스에 액세스할 수 있습니다!
이미지는 이런 느낌↓



방법



ECS EC2 타입의 경우, 공식적으로 안내되고 있다.

SORACOM Canal 구축



AWS에서 ECS 클러스터 생성



EC2 타입으로 생성합니다.
절차

AUTO SCALING 그룹을 만들고 시작 설정의 사용자 데이터 설정



이쪽이 이번 간입니다.
아래를 사용자 데이터로 설정합니다. 컨테이너 인스턴스는 Amazon ECS-optimized Amazon Linux 2 AMI를 활용합니다.

사용자 데이터

#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 
# ↑ ユーザーデータの実行ログを/var/log/user-data.logで確認できるように

export FILE_VXLAN="/opt/gate_init_vxlan.sh"
export FILE_JQ="/usr/local/bin/jq"
export FILE_SORACOM="/usr/local/bin/soracom"
export PATH="/usr/local/bin":"$PATH"
# NOTE: 下記パラメーターはssmのパラメータストアやgit-cryptなど使ってください
export VPG_ID="soracom VPGのIDを設定する"
export AUTH_KEY_ID="soracom auth-key-idを設定する"
export AUTH_KEY="soracom auth-keyを設定する"

# ecsクラスター設定
echo ECS_CLUSTER=gate-peer >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;

main() {
    # soracom cliの返却値がjsonなのでjqコマンドをつかう。
    if [ ! -e $FILE_JQ ];then
        curl -o $FILE_JQ -L https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
        chmod +x $FILE_JQ
    fi

    # soracom cliインストール
    if [ ! -e $FILE_SORACOM ];then
        curl -o /root/soracom_0.5.0_linux_amd64.tar.gz -L https://github.com/soracom/soracom-cli/releases/download/v0.5.0/soracom_0.5.0_linux_amd64.tar.gz
        tar xvf /root/soracom_0.5.0_linux_amd64.tar.gz -C /root
        cp /root/soracom_0.5.0_linux_amd64/soracom /usr/local/bin/.
        mkdir /root/.soracom
        # soracom cliの認証情報を生成
        echo "{\"sandbox\":false,\"coverageType\":\"jp\",\"authKeyId\":\"${AUTH_KEY_ID}\",\"authKey\":\"${AUTH_KEY}\",\"registerPaymentMethod\":false}" > /root/.soracom/default.json
        chmod 700 /root/.soracom/default.json
    fi

    LOCAL_IP=`ifconfig eth0 | awk '/inet / {gsub("addr:", "", $2); print $2}'`
    # ECSインスタンスをgatepeerとしてsoracomに登録し、登録したgatepeerと紐づくsoracom側VPC内のip取得
    echo "get GatePeer InnerIP"
    GATE_PEER_INNER_IP=`soracom vpg register-gate-peer --outer-ip-address "$LOCAL_IP" --vpg-id "$VPG_ID" | jq -r '.innerIpAddress'`
    # soracom側VPC内のGatePeer ip一覧取得
    echo "get soracom GatePeer IPs"
    SORACOM_GATE_PEER_IPS=`soracom vpg list-gate-peers --vpg-id $VPG_ID | jq -r '.[] | select(.ownedByCustomer==false) | .outerIpAddress' | tr '\n' ' '`

    # vxlanで論理L2ネットワークを構築する
    if [ ! -e $FILE_VXLAN ];then
        curl -o $FILE_VXLAN -l https://soracom-files.s3-ap-northeast-1.amazonaws.com/gate-peer-tools/gate_init_vxlan.sh
        chmod +x $FILE_VXLAN
    fi
    echo "${FILE_VXLAN} eth0 $LOCAL_IP vxlan0 $GATE_PEER_INNER_IP 9 $SORACOM_GATE_PEER_IPS"
    ${FILE_VXLAN} eth0 $LOCAL_IP vxlan0 $GATE_PEER_INNER_IP 9 $SORACOM_GATE_PEER_IPS
}

main


※ 주의점으로서 유저 데이터는 스케일 아웃시의 1회 밖에 실행되지 않기 때문에, 재기동시 등, vxlan의 재설정이 필요하게 됩니다. 위의 사용자 데이터는 다시 시작할 때까지 고려하지 않습니다.

ECS 작업 정의의 네트워크 모드를 Host로 설정



ECS 인스턴스의 호스트 측에서 GatePeer를 구성하므로 ECS 태스크 정의의 네트워크 모드를 Host로 설정하여 호스트 측 네트워크 인터페이스를 사용할 수 있습니다.

htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마조네 CS / ㄱ st / ゔ ぇぺ ぺ ぐ で / c 어 _ c ぅ s r. HTML

Gate Peer가 될 ECS 인스턴스를 SORACOM에 등록



Gate 사용



Gate Peer에서 기기에 연결할 수 있는지 확인



이상으로 완료입니다!
조금 귀찮습니다만 Nat 게이트웨이 방식이라면 스케일 아웃 할 수 없기 때문에 이 방법이 현시점에서 제일 좋을 것 같은 생각이 듭니다.

좋은 웹페이지 즐겨찾기