AWS Ground Station エージェントを利用したパブリックブロードキャスト衛星 (広帯域) - AWS Ground Station

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Ground Station エージェントを利用したパブリックブロードキャスト衛星 (広帯域)

この例では、 ユーザーガイドの JPSS-1 - パブリックブロードキャスト衛星 (PBS) - 評価 セクションで行った分析を基にしています。

この例を完了するには、シナリオを想定する必要があります。HRD通信パスを広帯域デジタル中間周波数 (DigIF) としてキャプチャし、 を使用して Amazon EC2インスタンスで AWS Ground Station エージェントが受信したとおりに処理しますSDR。

注記

実際のJPSSHRD通信パス信号の帯域幅は 30 ですがMHz、この例では AWS Ground Station 、エージェントが受信する正しいパスを流れることができるように、アンテナダウンリンク設定を 100 MHz帯域幅の信号として扱うように設定します。

通信パス

このセクションではステップ 2: データフロー通信パスを計画する、開始方法を示します。この例では、他の例で使用されていない AWS CloudFormation テンプレートの「マッピング」セクションに追加のセクションが必要になります。

注記

AWS CloudFormation テンプレートの内容の詳細については、「テンプレートセクション」を参照してください。

まず、 AWS CloudFormation テンプレートでリージョン別の AWS Ground Station プレフィックスリストのマッピングセクションを設定します。これにより、Amazon EC2インスタンスのセキュリティグループがプレフィックスリストを簡単に参照できるようになります。プレフィックスリストの使用の詳細については、「」を参照してくださいVPC AWS Ground Station エージェントによる設定

Mappings: PrefixListId: us-east-2: groundstation: pl-087f83ba4f34e3bea us-west-2: groundstation: pl-0cc36273da754ebdc us-east-1: groundstation: pl-0e5696d987d033653 eu-central-1: groundstation: pl-03743f81267c0a85e sa-east-1: groundstation: pl-098248765e9effc20 ap-northeast-2: groundstation: pl-059b3e0b02af70e4d ap-southeast-1: groundstation: pl-0d9b804fe014a6a99 ap-southeast-2: groundstation: pl-08d24302b8c4d2b73 me-south-1: groundstation: pl-02781422c4c792145 eu-west-1: groundstation: pl-03fa6b266557b0d4f eu-north-1: groundstation: pl-033e44023025215c0 af-south-1: groundstation: pl-0382d923a9d555425

パラメータセクションでは、次のパラメータを追加します。 AWS CloudFormation コンソールからスタックを作成するときに、これらの値を指定します。

Parameters: EC2Key: Description: The SSH key used to access the EC2 receiver instance. Choose any SSH key if you are not creating an EC2 receiver instance. For instructions on how to create an SSH key see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html Type: AWS::EC2::KeyPair::KeyName ConstraintDescription: must be the name of an existing EC2 KeyPair. AZ: Description: "The AvailabilityZone that the resources of this stack will be created in. (e.g. us-east-2a)" Type: AWS::EC2::AvailabilityZone::Name ReceiverAMI: Description: The Ground Station Agent AMI ID you want to use. Please note that AMIs are region specific. For instructions on how to retrieve an AMI see https://docs.aws.amazon.com/ground-station/latest/ug/dataflows.ec2-configuration.html#dataflows.ec2-configuration.amis Type: AWS::EC2::Image::Id
注記

キーペアを作成し、Amazon EC2EC2Keyパラメータの名前を指定する必要があります 「Amazon EC2インスタンスのキーペアを作成する」を参照してください。

さらに、 AWS CloudFormation スタックの作成時に、正しいリージョン固有の AMI ID を指定する必要がありますAWS Ground Station Amazon マシンイメージ (AMIs) を参照してください。

残りのテンプレートスニペットは、テンプレートのリソースセクションに属します AWS CloudFormation 。

Resources: # Resources that you would like to create should be placed within the Resources section.

Amazon EC2インスタンスに単一の通信パスを配信するシナリオを考えると、単一の同期配信パスがあることがわかります。同期データ配信 セクションごとに、 AWS Ground Station エージェントで Amazon EC2インスタンスをセットアップして設定し、1 つ以上のデータフローエンドポイントグループを作成する必要があります。まず、 AWS Ground Station エージェントの Amazon VPC を設定します。

ReceiverVPC: Type: AWS::EC2::VPC Properties: EnableDnsSupport: 'true' EnableDnsHostnames: 'true' CidrBlock: 10.0.0.0/16 Tags: - Key: "Name" Value: "AWS Ground Station Example - PBS to AWS Ground Station Agent VPC" - Key: "Description" Value: "VPC for EC2 instance receiving AWS Ground Station data" PublicSubnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref ReceiverVPC MapPublicIpOnLaunch: 'true' AvailabilityZone: !Ref AZ CidrBlock: 10.0.0.0/20 Tags: - Key: "Name" Value: "AWS Ground Station Example - PBS to AWS Ground Station Agent Public Subnet" - Key: "Description" Value: "Subnet for EC2 instance receiving AWS Ground Station data" RouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref ReceiverVPC Tags: - Key: Name Value: AWS Ground Station Example - RouteTable RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref RouteTable SubnetId: !Ref PublicSubnet Route: Type: AWS::EC2::Route DependsOn: InternetGateway Properties: RouteTableId: !Ref RouteTable DestinationCidrBlock: '0.0.0.0/0' GatewayId: !Ref InternetGateway InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: AWS Ground Station Example - Internet Gateway GatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: !Ref ReceiverVPC InternetGatewayId: !Ref InternetGateway
注記

AWS Ground Station エージェントでサポートされるVPC設定の詳細については、AWS Ground Station 「エージェントの要件 - VPC図」を参照してください。

次に、レシーバー Amazon EC2インスタンスを設定します。

# The placement group in which your EC2 instance is placed. ClusterPlacementGroup: Type: AWS::EC2::PlacementGroup Properties: Strategy: cluster # This is required for the EIP if the receiver EC2 instance is in a private subnet. # This ENI must exist in a public subnet, be attached to the receiver and be associated with the EIP. ReceiverInstanceNetworkInterface: Type: AWS::EC2::NetworkInterface Properties: Description: Floating network interface GroupSet: - !Ref InstanceSecurityGroup SubnetId: !Ref PublicSubnet # An EIP providing a fixed IP address for AWS Ground Station to connect to. Attach it to the receiver instance created in the stack. ReceiverInstanceElasticIp: Type: AWS::EC2::EIP Properties: Tags: - Key: Name Value: !Join [ "-" , [ "EIP" , !Ref "AWS::StackName" ] ] # Attach the ENI to the EC2 instance if using a separate public subnet. # Requires the receiver instance to be in a public subnet (SubnetId should be the id of a public subnet) ReceiverNetworkInterfaceAttachment: Type: AWS::EC2::NetworkInterfaceAttachment Properties: DeleteOnTermination: false DeviceIndex: 1 InstanceId: !Ref ReceiverInstance NetworkInterfaceId: !Ref ReceiverInstanceNetworkInterface # Associate EIP with the ENI if using a separate public subnet for the ENI. ReceiverNetworkInterfaceElasticIpAssociation: Type: AWS::EC2::EIPAssociation Properties: AllocationId: !GetAtt [ReceiverInstanceElasticIp, AllocationId] NetworkInterfaceId: !Ref ReceiverInstanceNetworkInterface # The EC2 instance that will send/receive data to/from your satellite using AWS Ground Station. ReceiverInstance: Type: AWS::EC2::Instance DependsOn: PublicSubnet Properties: DisableApiTermination: false IamInstanceProfile: !Ref GeneralInstanceProfile ImageId: !Ref ReceiverAMI AvailabilityZone: !Ref AZ InstanceType: c5.24xlarge KeyName: !Ref EC2Key Monitoring: true PlacementGroupName: !Ref ClusterPlacementGroup SecurityGroupIds: - Ref: InstanceSecurityGroup SubnetId: !Ref PublicSubnet Tags: - Key: Name Value: !Join [ "-" , [ "Receiver" , !Ref "AWS::StackName" ] ] # agentCpuCores list in the AGENT_CONFIG below defines the cores that the AWS Ground Station Agent is allowed to run on. This list can be changed to suit your use-case, however if the agent isn't supplied with enough cores data loss may occur. UserData: Fn::Base64: Fn::Sub: - | #!/bin/bash yum -y update AGENT_CONFIG_PATH="/opt/aws/groundstation/etc/aws-gs-agent-config.json" cat << AGENT_CONFIG > "$AGENT_CONFIG_PATH" { "capabilities": [ "arn:aws:groundstation:${AWS::Region}:${AWS::AccountId}:dataflow-endpoint-group/${DataflowEndpointGroupId}" ], "device": { "privateIps": [ "127.0.0.1" ], "publicIps": [ "${EIP}" ], "agentCpuCores": [ 24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92 ] } } AGENT_CONFIG systemctl start aws-groundstation-agent systemctl enable aws-groundstation-agent # <Tuning Section Start> # Visit the AWS Ground Station Agent Documentation in the User Guide for more details and guidance updates # Set IRQ affinity with list of CPU cores and Receive Side Scaling mask # Core list should be the first two cores (and hyperthreads) on each socket # Mask set to everything currently # https://github.com/torvalds/linux/blob/v4.11/Documentation/networking/scaling.txt#L80-L96 echo "@reboot sudo /opt/aws/groundstation/bin/set_irq_affinity.sh '0 1 48 49' 'ffffffff,ffffffff,ffffffff' >>/var/log/user-data.log 2>&1" >>/var/spool/cron/root # Reserving the port range defined in the GS agent ingress address in the Dataflow Endpoint Group so the kernel doesn't steal any of them from the GS agent. These ports are the ports that the GS agent will ingress data # across, so if the kernel steals one it could cause problems ingressing data onto the instance. echo net.ipv4.ip_local_reserved_ports="42000-50000" >> /etc/sysctl.conf # </Tuning Section End> # We have to reboot for linux kernel settings to apply shutdown -r now - DataflowEndpointGroupId: !Ref DataflowEndpointGroup EIP: !Ref ReceiverInstanceElasticIp
# The AWS Ground Station Dataflow Endpoint Group that defines the endpoints that AWS Ground # Station will use to send/receive data to/from your satellite. DataflowEndpointGroup: Type: AWS::GroundStation::DataflowEndpointGroup Properties: ContactPostPassDurationSeconds: 180 ContactPrePassDurationSeconds: 120 EndpointDetails: - AwsGroundStationAgentEndpoint: Name: !Join [ "-" , [ !Ref "AWS::StackName" , "Downlink" ] ] # needs to match DataflowEndpointConfig name EgressAddress: SocketAddress: Name: 127.0.0.1 Port: 55000 IngressAddress: SocketAddress: Name: !Ref ReceiverInstanceElasticIp PortRange: Minimum: 42000 Maximum: 55000

また、 がアカウントに Elastic Network Interface (ENI) を作成 AWS Ground Station できるようにする適切なポリシー、ロール、プロファイルも必要です。

# The security group for your EC2 instance. InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: AWS Ground Station receiver instance security group. VpcId: !Ref ReceiverVPC SecurityGroupEgress: - CidrIp: 0.0.0.0/0 Description: Allow all outbound traffic by default IpProtocol: "-1" SecurityGroupIngress: # To allow SSH access to the instance, add another rule allowing tcp port 22 from your CidrIp - IpProtocol: udp Description: Allow AWS Ground Station Incoming Dataflows ToPort: 50000 FromPort: 42000 SourcePrefixListId: Fn::FindInMap: - PrefixListId - Ref: AWS::Region - groundstation # The EC2 instance assumes this role. InstanceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "ec2.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess - arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy - arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM - arn:aws:iam::aws:policy/AWSGroundStationAgentInstancePolicy Policies: - PolicyDocument: Statement: - Action: - sts:AssumeRole Effect: Allow Resource: !GetAtt GroundStationKmsKeyRole.Arn Version: "2012-10-17" PolicyName: InstanceGroundStationApiAccessPolicy # The instance profile for your EC2 instance. GeneralInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref InstanceRole # The IAM role that AWS Ground Station will assume to access and use the KMS Key for data delivery GroundStationKmsKeyRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: - groundstation.amazonaws.com Condition: StringEquals: "aws:SourceAccount": !Ref AWS::AccountId ArnLike: "aws:SourceArn": !Sub "arn:${AWS::Partition}:groundstation:${AWS::Region}:${AWS::AccountId}:mission-profile/*" - Action: sts:AssumeRole Effect: Allow Principal: AWS: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:root" GroundStationKmsKeyAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: - kms:Decrypt Effect: Allow Resource: !GetAtt GroundStationDataDeliveryKmsKey.Arn PolicyName: GroundStationKmsKeyAccessPolicy Roles: - Ref: GroundStationKmsKeyRole GroundStationDataDeliveryKmsKey: Type: AWS::KMS::Key Properties: KeyPolicy: Statement: - Action: - kms:CreateAlias - kms:Describe* - kms:Enable* - kms:List* - kms:Put* - kms:Update* - kms:Revoke* - kms:Disable* - kms:Get* - kms:Delete* - kms:ScheduleKeyDeletion - kms:CancelKeyDeletion - kms:GenerateDataKey - kms:TagResource - kms:UntagResource Effect: Allow Principal: AWS: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:root" Resource: "*" - Action: - kms:Decrypt - kms:GenerateDataKeyWithoutPlaintext Effect: Allow Principal: AWS: !GetAtt GroundStationKmsKeyRole.Arn Resource: "*" Condition: StringEquals: "kms:EncryptionContext:sourceAccount": !Ref AWS::AccountId ArnLike: "kms:EncryptionContext:sourceArn": !Sub "arn:${AWS::Partition}:groundstation:${AWS::Region}:${AWS::AccountId}:mission-profile/*" - Action: - kms:CreateGrant Effect: Allow Principal: AWS: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:root" Resource: "*" Condition: ForAllValues:StringEquals: "kms:GrantOperations": - Decrypt - GenerateDataKeyWithoutPlaintext "kms:EncryptionContextKeys": - sourceArn - sourceAccount ArnLike: "kms:EncryptionContext:sourceArn": !Sub "arn:${AWS::Partition}:groundstation:${AWS::Region}:${AWS::AccountId}:mission-profile/*" StringEquals: "kms:EncryptionContext:sourceAccount": !Ref AWS::AccountId Version: "2012-10-17" EnableKeyRotation: true

AWS Ground Station 設定

このセクションではステップ 3: 設定を作成する、開始方法を示します。

自動トラックの使用設定を行うには、追跡設定が必要です。自動トラックPREFERREDとして選択すると信号品質が向上しますが、JPSS-1 エフェメリス品質が十分であるため、信号品質を満たす必要はありません。

TrackingConfig: Type: AWS::GroundStation::Config Properties: Name: "JPSS Tracking Config" ConfigData: TrackingConfig: Autotrack: "PREFERRED"

通信パスに基づいて、衛星部分を表すアンテナダウンリンク設定と、エンドポイントの詳細を定義するデータフローエンドポイントグループを参照するデータフローエンドポイント設定を定義する必要があります。

# The AWS Ground Station Antenna Downlink Config that defines the frequency spectrum used to # downlink data from your satellite. SnppJpssDownlinkDigIfAntennaConfig: Type: AWS::GroundStation::Config Properties: Name: "SNPP JPSS Downlink WBDigIF Antenna Config" ConfigData: AntennaDownlinkConfig: SpectrumConfig: Bandwidth: Units: "MHz" Value: 100 CenterFrequency: Units: "MHz" Value: 7812 Polarization: "RIGHT_HAND" # The AWS Ground Station Dataflow Endpoint Config that defines the endpoint used to downlink data # from your satellite. DownlinkDigIfEndpointConfig: Type: AWS::GroundStation::Config Properties: Name: "Aqua SNPP JPSS Terra Downlink DigIF Endpoint Config" ConfigData: DataflowEndpointConfig: DataflowEndpointName: !Join [ "-" , [ !Ref "AWS::StackName" , "Downlink" ] ] DataflowEndpointRegion: !Ref AWS::Region

AWS Ground Station ミッションプロファイル

このセクションではステップ 4: ミッションプロファイルを作成する、開始方法を示します。

設定が関連付けられているので、それらを使用してデータフローを構築できます。残りのパラメータにはデフォルトを使用します。

# The AWS Ground Station Mission Profile that groups the above configurations to define how to # uplink and downlink data to your satellite. SnppJpssMissionProfile: Type: AWS::GroundStation::MissionProfile Properties: Name: !Sub 'JPSS WBDigIF gs-agent EC2 Delivery' ContactPrePassDurationSeconds: 120 ContactPostPassDurationSeconds: 120 MinimumViableContactDurationSeconds: 180 TrackingConfigArn: !Ref TrackingConfig DataflowEdges: - Source: !Ref SnppJpssDownlinkDigIfAntennaConfig Destination: !Ref DownlinkDigIfEndpointConfig StreamsKmsKey: KmsKeyArn: !GetAtt GroundStationDataDeliveryKmsKey.Arn StreamsKmsRole: !GetAtt GroundStationKmsKeyRole.Arn

まとめる

上記のリソースを使用すると、オンボードされた のいずれかからの同期データ配信のために JPSS-1 コンタクトをスケジュールできるようになりました AWS Ground Station ロケーション

以下は、このセクションで説明するすべてのリソースを で直接使用できる単一の AWS CloudFormation テンプレートにまとめた完全なテンプレートです AWS CloudFormation。

という名前の AWS CloudFormation テンプレートDirectBroadcastSatelliteWbDigIfEc2DataDelivery.ymlは、Aqua、、-1/SNPPJPSS-NOAA20、および Terra 衛星のデジタル中間周波数 (DigIF) データの受信をすぐに開始できるように設計されています。これには、Amazon EC2インスタンスと、 AWS Ground Station エージェントを使用して生の DigIF ダイレクトブロードキャストデータを受信するために必要な AWS CloudFormation リソースが含まれています。

Aqua、SNPP、JPSS-1/NOAA-20、Terra がアカウントにオンボーディングされていない場合は、「」を参照してくださいステップ 1: 衛星オンボーディング

注記

テンプレートにアクセスするには、カスタマーオンボーディング Amazon S3 バケットにアクセスします。以下のリンクは、リージョンの Amazon S3 バケットを使用しています。us-west-2 リージョンコードを変更して、スタックを作成する AWS CloudFormation 対応するリージョンを表します。

さらに、次の手順では を使用しますYAML。ただし、テンプレートは YAMLと の両方のJSON形式で使用できます。を使用するにはJSON、テンプレートをダウンロードする.jsonときに.ymlファイル拡張子を に置き換えます。

を使用してテンプレートをダウンロードするには AWS CLI、次のコマンドを使用します。

aws s3 cp s3://groundstation-cloudformation-templates-us-west-2/agent/ec2_delivery/DirectBroadcastSatelliteWbDigIfEc2DataDelivery.yml .

ブラウザで以下に移動することで、コンソールURLでテンプレートを表示およびダウンロードできます。

https://s3.console.aws.amazon.com/s3/object/groundstation-cloudformation-templates-us-west-2/agent/ec2_delivery/DirectBroadcastSatelliteWbDigIfEc2DataDelivery.yml

次のリンク AWS CloudFormation を使用して、 でテンプレートを直接指定できます。

https://groundstation-cloudformation-templates-us-west-2.s3.us-west-2.amazonaws.com/agent/ec2_delivery/DirectBroadcastSatelliteWbDigIfEc2DataDelivery.yml

テンプレートではどのような追加リソースが定義されていますか?

DirectBroadcastSatelliteWbDigIfEc2DataDelivery テンプレートには、以下の追加リソースが含まれています。

  • レシーバーインスタンスの Elastic Network Interface - (条件付き) Elastic Network Interface は、 が指定されPublicSubnetId ている場合、 で指定されたサブネットに作成されます。これは、レシーバーインスタンスがプライベートサブネットにある場合に必要です。Elastic Network Interface は に関連付けられEIP、レシーバーインスタンスにアタッチされます。

  • レシーバーインスタンスの Elastic IP - が接続 AWS Ground Station する Elastic IP。これにより、レシーバーインスタンスまたは Elastic Network Interface にアタッチされます。

  • 次のいずれかの Elastic IP の関連付け:

    • レシーバーインスタンスと Elastic IP の関連付け - PublicSubnetId が指定されていない場合、Elastic IP とレシーバーインスタンスの関連付け。これには、 がパブリックサブネットSubnetId を参照する必要があります。

    • レシーバーインスタンスの Elastic Network Interface と Elastic IP の関連付け - PublicSubnetIdが指定されている場合、レシーバーインスタンスの Elastic Network Interface への Elastic IP の関連付け。

  • (オプション) CloudWatch イベントトリガー - AWS Lambda 問い合わせの AWS Ground Station 前後に によって送信される CloudWatch イベントを使用してトリガーされる関数。 AWS Lambda 関数は開始し、オプションでレシーバーインスタンスを停止します。

  • (オプション) Amazon EC2 Verification for Contacts - Lambda を使用して、SNS通知付きの連絡先の Amazon EC2インスタンスの検証システムを設定するオプション。現在の使用状況によっては、料金が発生する可能性があることに注意してください。

  • 追加のミッションプロファイル - 追加のパブリックブロードキャスト衛星 (Aqua、SNPP、Terra) のミッションプロファイル。

  • 追加のアンテナダウンリンク設定 - 追加のパブリックブロードキャスト衛星 (Aqua、SNPP、Terra) のアンテナダウンリンク設定。

このテンプレートでは衛星の値とパラメータが入力済みです。これらのパラメータを使用すると、これらの衛星で AWS Ground Station すぐに を簡単に使用できます。このテンプレートを使用する AWS Ground Station ときに を使用するには、独自の値を設定する必要はありません。ただし、値をカスタマイズして、ユースケースに合わせてテンプレートを使用することもできます。

データはどこで受信できますか?

データフローエンドポイントグループは、テンプレートで作成されるレシーバーインスタンスのネットワークインターフェイスを使用するように設定されます。レシーバーインスタンスは AWS Ground Station エージェントを使用して、データフローエンドポイントで定義されたポート AWS Ground Station で からデータストリームを受信します。データフローエンドポイントグループの設定の詳細については、 AWS::GroundStation::DataflowEndpoint「グループ」を参照してください。エージェントの詳細については、 AWS Ground Station AWS Ground Station 「 エージェントとは」を参照してください。