目次

AWS Ground Station v2.0 完全ガイド 2026

AWS Ground Station は、低軌道(LEO)・中軌道(MEO)衛星との通信を AWS が運用する地上局ネットワーク経由でマネージド化し、衛星データの受信・処理・クラウド統合を自動化するサービス です。従来は数億~数十億円の地上局設備投資・各国での周波数免許取得が必須でしたが、Ground Station は AWS が世界 20+ 地点に配置した高精度パラボラアンテナ(直径 5m)を従量課金で共有利用でき、地球観測・気象予測・海事追跡・衛星テレメトリ等の衛星データ利用事業を低コストで迅速に立ち上げられます。2025-2026 年は Amazon Leo(AWS の衛星コンステレーション)の拡大に伴い地上局 300+ 地点への増強、衛星データの SageMaker・Bedrock 統合による解析の高度化が加速しており、宇宙スタートアップから大規模エンタープライズまでの衛星データ利用が爆発的に拡大しています。


目次

  1. 概要・課題・特徴
  2. アーキテクチャ
  3. コアコンポーネント
  4. 主要ユースケース
  5. 衛星コンタクトのスケジューリング
  6. ミッションプロファイル
  7. 設定・操作の具体例
  8. 受信データの処理・分析
  9. 類似サービス比較表
  10. ベストプラクティス
  11. トラブルシューティング
  12. 2025-2026 最新動向
  13. 学習リソース・参考文献
  14. 実装例・チェックリスト
  15. まとめ

概要・課題・特徴

本質

AWS Ground Station は 「衛星との通信をマネージド化し、地球観測・気象データ・衛星テレメトリを低コストで AWS クラウドに直接取り込める宇宙データ基盤サービス」 です。衛星(LEO・MEO 衛星)の軌道上を通過する数分間(タイポイカルな LEO パス 8-12 分)に、AWS の地上局アンテナが RF(高周波)信号を受信、デジタル変換してデータエンドポイント(EC2 UDP サーバー)に配信します。受信データは直接 S3・EBS に保存され、SageMaker・Lambda で即座に処理・解析できるため、衛星画像 AI・気象予測モデル・海事監視を迅速に構築できます。

解決する課題

  1. 地上局インフラ投資の巨額化:5m パラボラアンテナ 1 台 10-50 億円、冷却・電力・建屋等含め数十億円規模の投資
  2. 各国での周波数免許申請:各国の通信局に個別申請、承認まで 6-12 ヶ月
  3. 地上局の恒久的な保守・運用:給電・冷却・点検に常時スタッフが必要
  4. 衛星パスの限定性:自社地上局では対象衛星が上空を通過する時間帯のみ受信(1-2 時間/日)
  5. データ処理パイプラインの複雑性:受信した生データの衛星フォーマット(CCSDS)デコード、クラウド転送、AI 解析の統合
  6. 宇宙スタートアップの参入障壁:初期投資 10-50 億円では事業化が困難

主な特徴

特徴 説明
グローバル地上局ネットワーク 世界 20+ 地点(2026 年末に 300+ 予定)、複数地点で衛星追跡により受信機会最大化
フルマネージド化 アンテナ指向・信号処理・データ転送を全自動、ユーザーは受信スケジュール指定のみ
複数周波数帯対応 X-band(7750-8400 MHz)・S-band(2025-2300 MHz)・UHF で多様な衛星に対応
Wideband・Narrowband 広帯域(衛星画像)と狭帯域(テレメトリ・コマンド)の両方を処理
Contact スケジューリング API 衛星パス予測・地上局可用性を自動計算、ユーザーは希望スケジュール予約
Dataflow Endpoint EC2 UDP サーバーへのリアルタイムデータ配信、処理システムと統合容易
S3・EBS への直接保存 受信データを自動的に S3 に転送、分析パイプラインに即接続
AWS サービス統合 SageMaker(AI 解析)・Lambda(トリガー処理)・EventBridge(パイプライン自動化)
従量課金 コンタクト時間単位の課金、固定費 0
信号処理ソフトウェア SDK 衛星フォーマット(CCSDS)デコード・復調を AWS SDK で簡素化

アーキテクチャ

graph TB
    subgraph "Space(宇宙)"
        LEO["LEO衛星<br/>(地球観測・気象・通信)<br/>高度: 300-2000 km<br/>周期: 90-120 分"]
        MEO["MEO衛星<br/>(測位・通信)<br/>高度: 5000-20000 km"]
    end
    
    subgraph "AWS Ground Stations(地上局ネットワーク)"
        GS1["Ground Station<br/>(米国オレゴン)<br/>X-band/S-band"]
        GS2["Ground Station<br/>(日本 東京)<br/>X-band/S-band"]
        GS3["Ground Station<br/>(欧州フランクフルト)<br/>X-band/S-band"]
        GSN["+ 17+ Ground Stations<br/>(世界各地)"]
    end
    
    subgraph "Signal Processing(信号処理)"
        RF["RF信号受信<br/>(7750-8400 MHz)"]
        ADC["アナログ-デジタル変換"]
        Demod["復調(Demodulation)"]
        Decode["CCSDS デコード"]
    end
    
    subgraph "AWS Cloud Processing"
        EC2["EC2 UDP Endpoint<br/>(リアルタイムデータ受信)"]
        S3["Amazon S3<br/>(衛星画像・データ保存)"]
        EBS["Amazon EBS<br/>(一時キャッシュ)"]
        DDB["Amazon DynamoDB<br/>(メタデータ・軌道情報)"]
    end
    
    subgraph "AI/Analytics Pipeline"
        SM["SageMaker<br/>(地球観測 AI・解析)"]
        Lambda["Lambda<br/>(自動トリガー処理)"]
        Athena["Athena<br/>(衛星データクエリ)"]
    end
    
    LEO -->|RF信号| GS1
    LEO -->|RF信号| GS2
    MEO -->|RF信号| GS3
    
    GS1 --> RF
    GS2 --> RF
    GS3 --> RF
    GSN --> RF
    
    RF --> ADC
    ADC --> Demod
    Demod --> Decode
    
    Decode --> EC2
    EC2 --> S3
    EC2 --> EBS
    S3 --> SM
    S3 --> Athena
    SM --> Lambda
    Lambda --> DDB

データフロー詳細

  1. 衛星軌道予測:衛星 NORAD TLE データから、Ground Station 上空通過時刻(Contact Window)を計算
  2. Contact スケジューリング:ユーザーが希望 Contact Window を予約、確認
  3. 衛星通信:衛星パス継続中(8-15 分)、アンテナが自動追跡、RF 信号受信
  4. 信号処理:RF → アナログ-デジタル変換 → 復調 → CCSDS フォーマットデコード
  5. Dataflow Endpoint:処理済みデータを EC2 UDP サーバーにリアルタイム配信
  6. クラウド統合:S3 保存 → SageMaker で地球観測 AI 実行 → Lambda トリガー処理
  7. ユーザーアプリケーション:結果を API・ダッシュボード・レポートで提供

コアコンポーネント

1. Ground Station(地上局)

AWS が世界に配置した高性能衛星受信施設。

構成要素:

  • パラボラアンテナ:直径 5m、高精度指向制御、3-10°/秒で衛星を自動追跡
  • RF 受信機:X-band(7750-8400 MHz)、S-band(2025-2300 MHz)、UHF(400-500 MHz)
  • 信号処理装置:リアルタイム復調・デコード
  • データネットワーク:AWS ネットワークに直結、低レイテンシー転送

主要地点(2026):

リージョン 地点 周波数
北米 us-west-2(オレゴン) X-band、S-band
us-east-2(オハイオ) X-band、S-band
欧州 eu-central-1(フランクフルト) X-band、S-band
アジア太平洋 ap-northeast-1(東京) X-band、S-band
ap-southeast-1(シンガポール) X-band

2. Mission Profile(ミッションプロファイル)

衛星通信の実行方式を定義する設定セット。

構成:

  • ミッション名:プロジェクト・衛星識別子
  • Tracking Config:衛星追跡方式(Two-line Element TLE 値)
  • Dataflow Edges:入力(衛星受信)→ 出力(EC2 UDP サーバー等)のマッピング
  • 最小接触時間:Contract が予約対象となる最短時間(通常 180 秒)

3. Contact(衛星パス)

衛星が地上局上空を通過する時間帯。

Contact 属性:

  • Start Time:衛星上空到達時刻

  • End Time:衛星水平線下降時刻

  • Ground Station:受信施設

  • Max Elevation:衛星高仰角(0° = 地平線、90° = 天頂)

  • Status:AVAILABLE(予約可)/ SCHEDULED(予約済)/ PASSED(終了)

  • Contact Window の例:

  • 2026-01-15T14:22:00Z → 2026-01-15T14:35:30Z (13 分間)

  • 東京地上局、最大仰角 78°、推定受信データ 400 MB

4. Dataflow Endpoint Group(データフロー終端)

受信衛星データを配信する先(EC2 UDP サーバー等)。

# Dataflow Endpoint の例
{
  "endpoint": {
    "address": {
      "name": "satellite-receiver-01",
      "port": 55888
    },
    "name": "satellite-receiver",
    "mtu": 1500
  },
  "securityDetails": {
    "subnetIds": ["subnet-0123456789abcdef0"],
    "securityGroupIds": ["sg-0123456789abcdef0"],
    "roleArn": "arn:aws:iam::123456789012:role/GroundStationRole"
  }
}

5. Config(アンテナ・周波数設定)

受信パラメータの詳細設定。

タイプ:

  • Antenna Downlink:X-band / S-band ダウンリンク設定
  • Antenna Uplink:コマンド送信用アップリンク(Advanced)
  • System Uplink:S-band アップリンク
  • RF Attenuator:受信信号減衰(強い信号対策)

主要ユースケース

1. 地球観測衛星(Earth Observation)

農業・都市開発・災害監視の画像データ取得。

衛星例:

  • Sentinel-1(SAR 衛星、雲を透視)
  • Sentinel-2(光学衛星、RGB + 赤外)
  • Landsat(USGS、30m 分解能)
  • Planet Labs(複数小型衛星コンステレーション)

データフロー:

  1. Ground Station で衛星 Downlink 受信
  2. S3 に RAW 画像ファイル保存(1GB-10GB/Contact)
  3. SageMaker で土地利用分類・作物監視 AI 実行
  4. 結果を API で農家・金融機関に提供

用途:

  • 農業:作物生育監視、肥料・水管理最適化
  • 不動産:開発適地評価、資産管理
  • 環境:森林減少・生態系監視
  • 防災:洪水・地滑り・火災の早期警戒

2. 気象予測衛星(Meteorological Data)

リアルタイム気象データの入手。

衛星例:

  • NOAA GOES-R(赤外・可視)
  • Meteosat(欧州気象機関)
  • Himawari-8/9(日本気象庁、高頻度)

実装:

import boto3

gs = boto3.client('groundstation', region_name='us-west-2')

# Meteosat Contact の確認
response = gs.list_contacts(
    groundStation='eu-central-1-gs-001',
    statusList=['AVAILABLE'],
    startTime='2026-01-15T00:00:00Z',
    endTime='2026-01-16T00:00:00Z'
)

# 気象予測モデルへのデータ投入
for contact in response['contactList']:
    print(f"Contact: {contact['startTime']} - {contact['endTime']}")
    # 気象データ取得 → 予測モデル実行

3. 海事監視・漁業管理(Maritime Monitoring)

船舶位置追跡・漁業資源管理。

データソース:

  • VMS(漁業管理・AIS):船舶自動識別信号
  • SAR 衛星:不法投棄・密漁検知
  • 海面温度データ:好漁場予測

4. 気候変動研究・データアーカイブ

長期的な地球環境監視。

用途:

  • 氷床・氷河の衛星観測
  • 海水温度・海面水位の長期傾向
  • CO2 濃度・メタン検出(分光衛星)

5. 新型衛星のミッション制御・テレメトリ(Spacecraft Telemetry)

宇宙スタートアップの衛星運用基盤。

例:

  • Axiom Space:商用宇宙ステーション
  • Relativity Space:3D 印刷ロケット
  • Rocket Lab:小型ロケット衛星

実装フロー:

  1. スタートアップが地球観測・通信小型衛星を打ち上げ
  2. AWS Ground Station で Downlink(テレメトリ・科学データ)受信
  3. SageMaker で衛星ヘルス監視・データ解析
  4. 顧客に解析結果 API で提供

6. SAR(Synthetic Aperture Radar)データ処理

合成開口レーダーによる高精度観測。

特徴:

  • 雲を透視できる(光学衛星の弱点を補完)
  • 地表の微細な変化検知(地震・地滑り変形)
  • 24 時間観測可能

用途:

  • インフラ監視:橋・ダムの変形検知
  • 防災:地震後の地変検出
  • 安全保障:軍事施設の活動監視

衛星コンタクトのスケジューリング

衛星パス予測

# 利用可能な Ground Station の確認
aws groundstation list-ground-stations \
  --region us-west-2 \
  --query 'groundStationList[*].{Name:groundStationName,Region:region}'

# 出力例:
# [
#   {'Name': 'us-west-2-gs-001', 'Region': 'us-west-2'},
#   {'Name': 'ap-northeast-1-gs-001', 'Region': 'ap-northeast-1'}
# ]

Satellite(衛星)登録

# 衛星の Ephemeris(軌道情報)を登録・更新
# NORAD Catalog Number を指定
aws groundstation describe-satellite \
  --satellite-id 25544  # ISS(国際宇宙ステーション)の Catalog ID
  --region us-west-2

# Sentinel-1A(地球観測衛星)
aws groundstation describe-satellite \
  --satellite-id 39634
  --region us-west-2

Mission Profile の作成

aws groundstation create-mission-profile \
  --name "earth-observation-mission" \
  --minimum-viable-contact-duration-seconds 180 \
  --tracking-config-arn arn:aws:groundstation:us-west-2:123456789012:config/tracking/satellite-tle-config \
  --dataflow-edges '[{
    "source": "arn:aws:groundstation:us-west-2:123456789012:config/antenna-downlink/x-band",
    "destination": "arn:aws:groundstation:us-west-2:123456789012:config/dataflow-endpoint/ec2-receiver"
  }]' \
  --region us-west-2

Contact 検索・予約

# 今後 7 日間の利用可能 Contact を検索
aws groundstation list-contacts \
  --ground-station 'ap-northeast-1-gs-001' \
  --satellite-arn 'arn:aws:groundstation::satellite/39634' \
  --status-list AVAILABLE \
  --start-time "2026-01-15T00:00:00Z" \
  --end-time "2026-01-22T00:00:00Z" \
  --region ap-northeast-1

# 出力例:
# {
#   "contactList": [
#     {
#       "contactId": "contact-abc123",
#       "startTime": "2026-01-15T14:22:00Z",
#       "endTime": "2026-01-15T14:35:30Z",
#       "groundStation": "ap-northeast-1-gs-001",
#       "missionProfile": "earth-observation-mission",
#       "maximumElevation": 78.5
#     }
#   ]
# }

# Contact を予約確定
aws groundstation reserve-contact \
  --contact-id 'contact-abc123' \
  --satellite-arn 'arn:aws:groundstation::satellite/39634' \
  --mission-profile-arn 'arn:aws:groundstation:ap-northeast-1:123456789012:mission-profile/earth-observation-mission' \
  --ground-station 'ap-northeast-1-gs-001' \
  --start-time "2026-01-15T14:22:00Z" \
  --end-time "2026-01-15T14:35:30Z" \
  --region ap-northeast-1

ミッションプロファイル

Dataflow Edge(データ流線定義)

# YAML 形式の Dataflow Edge 例
DataflowEdges:
  - Source:
      AntennaDownlink:
        AntennaName: "x-band-downlink"
        TransmitBandwidth:
          Value: 10
          Units: MHz
    Destination:
      DataflowEndpointRegion: "us-west-2"
      DataflowEndpointName: "satellite-receiver-01"

# 複数 Dataflow Edge の例
DataflowEdges:
  # 衛星 Downlink → EC2
  - Source:
      AntennaDownlink:
        AntennaName: "x-band-downlink"
    Destination:
      DataflowEndpointRegion: "us-west-2"
  # 制御信号 → Uplink
  - Source:
      DataflowEndpointRegion: "us-west-2"
    Destination:
      AntennaUplink:
        AntennaName: "s-band-uplink"
        TransmitBandwidth:
          Value: 5
          Units: MHz

Config の詳細

# アンテナ Downlink Config 作成
aws groundstation create-config \
  --config-data '{
    "antennaDownlinkConfig": {
      "specificationDetails": {
        "polarization": "RIGHT_HAND"
      }
    }
  }' \
  --config-type antenna-downlink \
  --name "x-band-downlink-config" \
  --region us-west-2

# System Uplink Config(テレメトリ/コマンド)
aws groundstation create-config \
  --config-data '{
    "systemUplinkConfig": {
      "specificationDetails": {
        "antennaUplinkRateInKbps": 2400
      }
    }
  }' \
  --config-type system-uplink \
  --name "s-band-uplink-config" \
  --region us-west-2

設定・操作の具体例

AWS CLI での実装

#!/bin/bash

# 1. ミッションプロファイル作成
MISSION_PROFILE_ARN=$(aws groundstation create-mission-profile \
  --name "sentinel-1-eo-mission" \
  --minimum-viable-contact-duration-seconds 240 \
  --dataflow-edges '[{
    "source": "arn:aws:groundstation:ap-northeast-1:123456789012:config/antenna-downlink/x-band",
    "destination": "arn:aws:groundstation:ap-northeast-1:123456789012:config/dataflow-endpoint/ec2-receiver"
  }]' \
  --region ap-northeast-1 \
  --query 'missionProfileArn' \
  --output text)

echo "Mission Profile ARN: $MISSION_PROFILE_ARN"

# 2. 衛星の利用可能 Contact を検索
aws groundstation list-contacts \
  --ground-station 'ap-northeast-1-gs-001' \
  --satellite-arn 'arn:aws:groundstation::satellite/39634' \
  --status-list AVAILABLE \
  --start-time "2026-01-15T00:00:00Z" \
  --end-time "2026-01-22T00:00:00Z" \
  --region ap-northeast-1 \
  --output json > contacts.json

# 3. 希望する Contact を予約
CONTACT_ID=$(jq -r '.contactList[0].contactId' contacts.json)

aws groundstation reserve-contact \
  --contact-id $CONTACT_ID \
  --satellite-arn 'arn:aws:groundstation::satellite/39634' \
  --mission-profile-arn $MISSION_PROFILE_ARN \
  --ground-station 'ap-northeast-1-gs-001' \
  --start-time "$(jq -r '.contactList[0].startTime' contacts.json)" \
  --end-time "$(jq -r '.contactList[0].endTime' contacts.json)" \
  --region ap-northeast-1

echo "Contact reserved: $CONTACT_ID"

# 4. Contact 進捗の監視
while true; do
  STATUS=$(aws groundstation describe-contact \
    --contact-id $CONTACT_ID \
    --region ap-northeast-1 \
    --query 'contactStatus' \
    --output text)
  
  echo "Contact Status: $STATUS"
  
  if [[ "$STATUS" == "PASS" ]] || [[ "$STATUS" == "FAILED" ]]; then
    break
  fi
  
  sleep 30
done

Python SDK での実装

import boto3
from datetime import datetime, timedelta
import time

gs = boto3.client('groundstation', region_name='ap-northeast-1')
s3 = boto3.client('s3', region_name='ap-northeast-1')

# 衛星データ受信・処理パイプライン
class SatelliteDataPipeline:
    def __init__(self, satellite_id=39634):  # Sentinel-1A
        self.satellite_id = satellite_id
        self.ground_station = 'ap-northeast-1-gs-001'
        
    def find_available_contacts(self, days_ahead=7):
        """利用可能な Contact を検索"""
        start_time = datetime.utcnow()
        end_time = start_time + timedelta(days=days_ahead)
        
        response = gs.list_contacts(
            groundStation=self.ground_station,
            satelliteArn=f'arn:aws:groundstation::satellite/{self.satellite_id}',
            statusList=['AVAILABLE'],
            startTime=start_time.isoformat() + 'Z',
            endTime=end_time.isoformat() + 'Z'
        )
        
        return response['contactList']
    
    def reserve_contact(self, contact):
        """Contact を予約"""
        response = gs.reserve_contact(
            contactId=contact['contactId'],
            satelliteArn=f'arn:aws:groundstation::satellite/{self.satellite_id}',
            missionProfileArn='arn:aws:groundstation:ap-northeast-1:123456789012:mission-profile/eo-mission',
            groundStation=self.ground_station,
            startTime=contact['startTime'],
            endTime=contact['endTime']
        )
        return response
    
    def monitor_contact(self, contact_id):
        """Contact 進捗を監視"""
        while True:
            response = gs.describe_contact(contactId=contact_id)
            
            status = response['contactStatus']
            print(f"Contact {contact_id} Status: {status}")
            
            if status in ['PASS', 'FAILED', 'CANCELLED']:
                return status
            
            time.sleep(30)
    
    def process_satellite_data(self, bucket, key):
        """受信した衛星データを SageMaker で処理"""
        sagemaker = boto3.client('sagemaker', region_name='ap-northeast-1')
        
        # SageMaker Processing Job で画像解析
        response = sagemaker.create_processing_job(
            ProcessingJobName=f'eo-analysis-{datetime.utcnow().timestamp()}',
            ProcessingInputs=[{
                'InputName': 'input',
                'S3Input': {
                    'S3Uri': f's3://{bucket}/{key}',
                    'LocalPath': '/opt/ml/processing/input',
                    'S3DataType': 'S3Prefix',
                    'S3InputMode': 'File'
                }
            }],
            ProcessingOutputConfig={
                'Outputs': [{
                    'OutputName': 'output',
                    'S3Output': {
                        'S3Uri': f's3://{bucket}/eo-results/',
                        'LocalPath': '/opt/ml/processing/output',
                        'S3UploadMode': 'EndOfJob'
                    }
                }]
            },
            ProcessingResources={
                'ClusterConfig': {
                    'InstanceCount': 1,
                    'InstanceType': 'ml.p3.2xlarge',  # GPU インスタンス
                    'VolumeSizeInGB': 100
                }
            },
            RoleArn='arn:aws:iam::123456789012:role/SageMakerProcessingRole',
            ProcessingAppSpecification={
                'ImageUri': '123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/eo-processor:latest'
            }
        )
        
        return response['ProcessingJobArn']

# 使用例
pipeline = SatelliteDataPipeline(satellite_id=39634)

# 1. 利用可能な Contact を検索
contacts = pipeline.find_available_contacts(days_ahead=7)
print(f"Found {len(contacts)} available contacts")

# 2. 最初の Contact を予約
if contacts:
    contact = contacts[0]
    reserved = pipeline.reserve_contact(contact)
    print(f"Reserved contact: {reserved['contactId']}")
    
    # 3. Contact 実行を監視
    status = pipeline.monitor_contact(reserved['contactId'])
    print(f"Contact execution result: {status}")

受信データの処理・分析

CCSDS フォーマットのデコード

衛星データは CCSDS(Consultative Committee for Space Data Systems)フォーマットで送信される。

import struct

def decode_ccsds_telemetry(raw_data: bytes):
    """
    CCSDS Telemetry Header をデコード
    """
    # CCSDS Primary Header (6 bytes)
    header = struct.unpack('>HHHHH', raw_data[0:6])
    
    packet_version = (header[0] >> 13) & 0x07
    packet_type = (header[0] >> 12) & 0x01  # 0=Telemetry, 1=Telecommand
    secondary_hdr = (header[0] >> 11) & 0x01
    apid = header[0] & 0x7FF  # Application Process ID
    
    sequence_flags = (header[1] >> 14) & 0x03
    packet_seq_count = header[1] & 0x3FFF
    
    packet_length = header[2] - 1  # バイト単位
    
    print(f"APID: {apid}")
    print(f"Packet Length: {packet_length}")
    
    # ペイロードデータ(CCSDS Header 後)
    payload = raw_data[6:6+packet_length]
    
    return payload

# 衛星画像処理の例(Sentinel-1 SAR データ)
def process_sar_image(raw_data: bytes):
    """
    SAR(合成開口レーダー)画像をデコード・処理
    """
    import numpy as np
    from PIL import Image
    
    # CCSDS Header をスキップ
    payload = decode_ccsds_telemetry(raw_data)
    
    # SAR データを画像配列に変換(例:512x512 ピクセル)
    width, height = 512, 512
    image_data = np.frombuffer(payload, dtype=np.uint16).reshape((height, width))
    
    # 画像正規化
    image_data = (image_data / image_data.max() * 255).astype(np.uint8)
    
    # 画像保存
    img = Image.fromarray(image_data, mode='L')
    img.save('satellite_image.png')
    
    return image_data

# SageMaker で AI 解析
def analyze_with_sagemaker(image_data):
    """
    SageMaker Endpoint で土地利用分類等を実行
    """
    import boto3
    import json
    
    sagemaker_runtime = boto3.client('sagemaker-runtime', region_name='ap-northeast-1')
    
    # 画像を JPEG に変換
    from PIL import Image
    import io
    
    img = Image.fromarray(image_data.astype('uint8'))
    buf = io.BytesIO()
    img.save(buf, format='JPEG')
    image_bytes = buf.getvalue()
    
    # SageMaker Endpoint に推論送信
    response = sagemaker_runtime.invoke_endpoint(
        EndpointName='eo-classification-endpoint',
        ContentType='image/jpeg',
        Body=image_bytes
    )
    
    result = json.loads(response['Body'].read().decode())
    print(f"Land Classification: {result['classes']}")
    
    return result

S3 への自動保存・処理パイプライン

import boto3
from datetime import datetime

s3 = boto3.client('s3')
lambda_client = boto3.client('lambda')

def setup_satellite_pipeline():
    """
    衛星データ受信 → S3 → Lambda トリガー → SageMaker 解析
    """
    
    # S3 イベント通知の設定
    s3.put_bucket_notification_configuration(
        Bucket='satellite-data-bucket',
        NotificationConfiguration={
            'LambdaFunctionConfigurations': [
                {
                    'LambdaFunctionArn': 'arn:aws:lambda:ap-northeast-1:123456789012:function/process-satellite-data',
                    'Events': ['s3:ObjectCreated:*'],
                    'Filter': {
                        'Key': {
                            'FilterRules': [
                                {'Name': 'prefix', 'Value': 'raw-data/'},
                                {'Name': 'suffix', 'Value': '.dat'}
                            ]
                        }
                    }
                }
            ]
        }
    )

# Lambda 関数(S3 イベント駆動)
def lambda_handler(event, context):
    """
    衛星データ(S3)を受信 → SageMaker で解析 → 結果を保存
    """
    import json
    
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key']
        
        print(f"Processing: s3://{bucket}/{key}")
        
        # S3 からダウンロード
        response = s3.get_object(Bucket=bucket, Key=key)
        raw_data = response['Body'].read()
        
        # CCSDS デコード
        payload = decode_ccsds_telemetry(raw_data)
        
        # 画像処理
        image_data = process_sar_image(raw_data)
        
        # SageMaker で解析
        analysis_result = analyze_with_sagemaker(image_data)
        
        # 結果を S3 に保存
        result_key = f"analysis-results/{datetime.utcnow().isoformat()}.json"
        s3.put_object(
            Bucket=bucket,
            Key=result_key,
            Body=json.dumps(analysis_result),
            ContentType='application/json'
        )
        
        print(f"Results saved to: s3://{bucket}/{result_key}")
    
    return {'statusCode': 200, 'message': 'Processing completed'}

類似サービス比較表

サービス 地上局ネットワーク マネージド度 カスタマイズ度 初期投資 使用時課金 AWS 統合
AWS Ground Station 20+ (300+ 予定) ✅ フル 0 ✅ 低 ✅ ネイティブ
Microsoft Azure Orbital 5+ ✅ 中 0 ✅ Azure 統合
KSAT(ノルウェー) 30+ ✅ 中 $1-10M △ API
Inmarsat 衛星通信 ✅ 高 0 △ API
Iridium 衛星通信 ✅ 高 0 △ API
自社地上局 1 ❌ 0 ✅ 高 $10-50M 0 △ カスタム
Atlas Space Operations 50+ △ 中 0 △ API
Blue Canyon Technologies 10+ △ 中 $5-20M △ API

AWS Ground Station の強み:

  • AWS ネイティブ統合(SageMaker・Lambda・S3)
  • グローバルネットワーク(20+ 地点、今後 300+)
  • 初期投資 0、従量課金
  • Amazon Leo(AWS 衛星)との統合

ベストプラクティス

✅ Do

  1. 複数地点での Contact 予約:衛星パスをカバーする複数地上局から受信(データ量最大化)
  2. リアルタイムストリーミング処理:EC2 UDP Endpoint で受信 → Lambda トリガー
  3. S3 Intelligent-Tiering:頻繁アクセスデータは S3、古いデータは Glacier へ自動遷移
  4. SageMaker での即座解析:受信直後に AI 処理で付加価値化
  5. CCSDS フォーマット検証:信号処理エラー検知のため Checksum 確認
  6. EventBridge での自動化:Contact 完了 → Lambda → 解析開始のパイプライン
  7. CloudWatch 監視:Contact 成功率・データ転送量・レイテンシーを常時監視
  8. DynamoDB でメタデータ管理:衛星位置・Contact Window・解析済みフラグを記録
  9. マルチリージョン構成:高可用性・レイテンシー最小化
  10. コスト追跡:Contact 数・Dataflow Endpoint 転送量を月次レビュー

❌ Don’t

  1. 単一地上局のみ使用:受信機会が限定(通常 1-2 時間/日)、複数地点での受信を推奨
  2. Contact 予約忘れ:自動化されていない場合、受信機会を逃す
  3. 生データの長期保持:処理後の圧縮済みデータのみ保持すべき
  4. CCSDS デコードエラーの無視:信号品質悪化の兆候
  5. EC2 UDP Endpoint の過負荷:受信レート(Mbps)に対応した インスタンスサイズ不足
  6. セキュリティグループ設定不完全:EC2 へのアクセス制限なし
  7. CloudWatch ロギング無効化:トラブルシューティング困難
  8. 衛星 TLE データ更新忘れ:Contact 予測精度低下(2-3 日で古くなる)
  9. データ転送を NAT Gateway 経由:不要なレイテンシー、Direct Connection推奨
  10. SageMaker インスタンスの常時稼働:オンデマンド / スポットインスタンス推奨

トラブルシューティング

問題 原因 対策
Contact 予約できない 利用可能な Contact がない / 衛星軌道が上空を通過しない 衛星 TLE 更新、異なる地上局を確認
受信データが破損 RF 信号品質低下 / Modulation Coding Scheme エラー Contact タイミング・アンテナ向き確認、RSSI 値確認
CCSDS デコード失敗 ヘッダーフォーマット誤識別 / バイトオーダー違い 衛星仕様書確認、Packet Version 確認
EC2 がデータを受け取らない UDP Endpoint ネットワーク接続エラー / ファイアウォール Security Group 規則確認、UDP ポート 55888 開放確認
S3 転送が遅い NAT Gateway 経由・ルーティング最適化なし VPC エンドポイント利用、Direct Connect 検討
Contact 中断 地上局機械的故障 / 電源不安定 AWS Support 報告、別地上局での Contact 予約
データ解析失敗 SageMaker リソース不足 / イメージフォーマット不対応 EC2・GPU インスタンスサイズ増加、イメージ形式確認
コスト超過 Contact 数が想定超過 / Dataflow Endpoint 転送量増加 地上局数削減、圧縮率向上、処理最適化

2025-2026 最新動向

Amazon Leo(AWS 衛星コンステレーション)

AWS が自社衛星 LEO コンステレーション展開中。

状況(2026 年 4 月):

  • 2 個プロトタイプ衛星を軌道上で運用
  • 231 個本体衛星を製造・順次打ち上げ
  • 目標:500+ 衛星で地球全体をカバー

Ground Station 拡大:

  • 現在:20+ 地点
  • 2026 年末:300+ 地点を予定
  • 受信機会を大幅増加(現在 1-2 時間/日 → 3-4 時間/日)

新機能・統合拡大

  • Low Latency Dataflow:UDP 遅延 < 100ms(金融・ライブ配信用)
  • SageMaker Autopilot 統合:衛星データの自動 AI 分析
  • Bedrock 統合:衛星画像の自然言語解析(“このエリアの作物は?”)
  • AWS QuickSight ダッシュボード:衛星データのリアルタイム可視化
  • Cost Optimization:Contact 合算割引、Reserved Capacity

用途拡大

  • 衛星インターネット:Starlink・OneWeb との連携(AWS ネットワーク拡張)
  • 量子通信テスト:Ground Station での量子鍵配送テスト
  • 深宇宙通信(Future):月・火星ミッション支援

学習リソース・参考文献

公式 AWS リソース

  1. AWS Ground Station - 概要
  2. User Guide
  3. Pricing
  4. Tutorials & Samples
  5. Mission Profile Configuration
  6. Amazon Leo Announcement
  7. From Fields to Orbit: AgTech Startups(2026)

ベンダー・技術リソース

  1. CCSDS - Consultative Committee for Space Data Systems
  2. NORAD TLE Data
  3. ESA Sentinel-1 Documentation
  4. Planet Labs API
  5. Orbital Mechanics - Algorithms

実装例・チェックリスト

シナリオ:地球観測衛星データを用いた農業監視システム

  1. 計画フェーズ

    • [ ] 対象衛星の選定(Sentinel-1 SAR / Sentinel-2 光学)
    • [ ] 監視対象地域・作物タイプ定義
    • [ ] 受信スケジュール・データ処理パイプライン設計
    • [ ] 月額 Contact 数・データ転送量見積
  2. セットアップフェーズ

    • [ ] AWS Ground Station アカウント設定
    • [ ] Mission Profile 作成(Sentinel-1A Catalog ID: 39634)
    • [ ] Dataflow Endpoint Group 作成(EC2 UDP receiver)
    • [ ] S3 バケット・KMS 暗号化設定
  3. 統合フェーズ

    • [ ] Contact スケジューリング API 実装
    • [ ] CCSDS デコーダー実装
    • [ ] SageMaker Processing Job で土地利用分類 AI
    • [ ] Lambda トリガー → S3 → SageMaker パイプライン自動化
    • [ ] EventBridge で Contact 完了時自動起動
  4. テストフェーズ

    • [ ] Contact 予約・実行テスト
    • [ ] 受信データ品質確認(RSSI・BER)
    • [ ] CCSDS デコード検証
    • [ ] SageMaker 推論精度確認
  5. 運用フェーズ

    • [ ] 月次 Contact スケジュール確認・予約
    • [ ] CloudWatch でデータ受信レート監視
    • [ ] 農家向けダッシュボード構築(QuickSight)
    • [ ] 月次コスト分析・最適化

実装チェックリスト

準備段階

  • [ ] NORAD Catalog ID 取得(衛星識別)
  • [ ] Ground Station リージョン選定(地理的カバレッジ)
  • [ ] Mission Profile テンプレート作成
  • [ ] VPC・セキュリティグループ設定

受信パイプライン

  • [ ] EC2 UDP Endpoint 構築
  • [ ] CCSDS Header パーサー実装
  • [ ] S3 自動保存スクリプト
  • [ ] エラー処理・ロギング

AI 処理

  • [ ] SageMaker モデル学習(衛星データセット)
  • [ ] Inference Endpoint デプロイ
  • [ ] Lambda 統合テスト
  • [ ] 出力形式定義(JSON・GeoJSON)

監視・運用

  • [ ] CloudWatch ダッシュボード構築
  • [ ] Contact 予約自動化スクリプト
  • [ ] AlertManager 設定(受信失敗等)
  • [ ] 月次レポート自動生成

まとめ

AWS Ground Station は 「衛星データの受信・処理・クラウド統合をマネージド化し、低コストで衛星データビジネスを立ち上げられるサービス」 です。

適切な利用場面

  • 地球観測衛星(農業・都市開発・災害監視)
  • 気象予測データ取得
  • 海事・航空機追跡
  • 宇宙スタートアップの衛星運用基盤
  • 気候変動研究・データアーカイブ

不適切な利用場面

  • 地上局が 1 つで十分(通常 1-2 時間/日の受信なら自社地上局検討)
  • リアルタイム性不要(数日遅延で問題ない場合は衛星データ購買サービス利用)

導入チェック

  1. 衛星データビジネスの立ち上げが必要か?
  2. 地上局インフラ投資を避けたいか?
  3. グローバルカバレッジが必要か?
  4. AWS との統合(SageMaker・Lambda)でメリットあるか?

バージョン:v2.0 | 最終更新:2026-04-26