2016-11-15 4 views
0

私はバックエンドからスピンアップされた複数のec2インスタンスでWowzaストリーミングエンジンを使用しています。エッジインスタンスを起点とリンクする方法が必要です。そのためには、XMLファイル内の特定の行の値を更新する必要があります。私は、エッジがスピンアップするまでに、ユーザーデータにIPをロードしています。 このタグの値をユーザーデータから編集するスクリプトを開始するには、何が必要ですか? ありがとうございますec2インスタンスのユーザーデータからxml行を編​​集するにはどうすればよいですか?

答えて

0

仮にorigin_ipが定義される:

script = "#!/bin/bash 
      sed -i -e '/<Name>loadbalanceServerIP<\\/Name>/,/<Value>/s/<Value>[^<]*/<Value>#{origin_ip}/' /home/wowza/conf/Server.xml 
      sudo service WowzaStreamingEngine restart" 
2

サーバーリスナーにIPアドレスをカスタム変数に読み込ませることができます。これで、設定ファイルがこのカスタム変数を参照できるようになります。これは、 "com.wowza.amazonaws.ec2.AWSEC2_METADATA_LOCAL_IPV4"のようなWowza EC2変数を埋め込むのと同じ方法です。これらは、ここ

${com.wowza.amazonaws.ec2.AWSEC2_METADATA_LOCAL_IPV4} 

としてWowza設定ファイルに追加することができる(これはold postからコードであることに注意)この実装例です。

package com.wowza.wms.plugin.amazonaws.ec2.env; 

import com.wowza.util.*; 
import com.wowza.wms.server.*; 
import com.wowza.wms.vhost.HostPort; 
import com.wowza.wms.logging.*; 

public class ServerListenerEC2Variables implements IServerNotify2 
{ 
    public static final String VARPREFIX = "com.wowza.amazonaws.ec2"; 

    public static final String VAR_AMI_ID = "AWSEC2_METADATA_AMI_ID"; 
    public static final String VAR_AMI_LAUNCH_INDEX = "AWSEC2_METADATA_AMI_LAUNCH_INDEX"; 
    public static final String VAR_AMI_MANIFEST_PATH = "AWSEC2_METADATA_AMI_MANIFEST_PATH"; 
    public static final String VAR_INSTANCE_ID = "AWSEC2_METADATA_INSTANCE_ID"; 
    public static final String VAR_INSTANCE_TYPE = "AWSEC2_METADATA_INSTANCE_TYPE"; 
    public static final String VAR_HOSTNAME = "AWSEC2_METADATA_HOSTNAME"; 
    public static final String VAR_LOCAL_HOSTNAME = "AWSEC2_METADATA_LOCAL_HOSTNAME"; 
    public static final String VAR_LOCAL_IPV4 = "AWSEC2_METADATA_LOCAL_IPV4"; 
    public static final String VAR_PUBLIC_HOSTNAME = "AWSEC2_METADATA_PUBLIC_HOSTNAME"; 
    public static final String VAR_PUBLIC_IPV4 = "AWSEC2_METADATA_PUBLIC_IPV4"; 
    public static final String VAR_RESERVATION_ID = "AWSEC2_METADATA_RESERVATION_ID"; 
    public static final String VAR_SECURITY_GROUPS = "AWSEC2_METADATA_SECURITY_GROUPS"; 
    public static final String VAR_PRODUCT_CODES = "AWSEC2_METADATA_PRODUCT_CODES"; 

    private void populateEnvironment() 
    { 
     try 
     { 
      String[] urls = { 
        "http://169.254.169.254/latest/meta-data/ami-id", 
        "http://169.254.169.254/latest/meta-data/ami-launch-index", 
        "http://169.254.169.254/latest/meta-data/ami-manifest-path", 
        "http://169.254.169.254/latest/meta-data/instance-id", 
        "http://169.254.169.254/latest/meta-data/instance-type", 
        "http://169.254.169.254/latest/meta-data/hostname", 
        "http://169.254.169.254/latest/meta-data/local-hostname", 
        "http://169.254.169.254/latest/meta-data/local-ipv4", 
        "http://169.254.169.254/latest/meta-data/public-hostname", 
        "http://169.254.169.254/latest/meta-data/public-ipv4", 
        /* "http://169.254.169.254/2007-03-01/meta-data/public-keys/", */ 
        "http://169.254.169.254/latest/meta-data/reservation-id", 
        "http://169.254.169.254/latest/meta-data/security-groups", 
        "http://169.254.169.254/latest/meta-data/product-codes", 
       }; 

      for(int i=0;i<urls.length;i++) 
      { 
       String url = urls[i]; 
       byte[] data = HTTPUtils.HTTPRequestToByteArray(url, "GET", null, null); 
       if (data != null) 
       { 
        String[] urlParts = url.split("/"); 
        if (urlParts.length > 1) 
        { 
         try 
         { 
          String key = VARPREFIX+"."+"AWSEC2_METADATA_"+urlParts[urlParts.length-1].replace("-", "_").toUpperCase(); 
          String value = new String(data, "UTF-8"); 

          System.setProperty(key, value); 
          WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).info(key+": "+value); 
         } 
         catch (Exception e) 
         { 
          WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).error("ServerListenerEC2Variables.populateEnvironment: conversion to string: "+e.toString()); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).error("ServerListenerEC2Variables.populateEnvironment: "+e.toString()); 
     } 
    } 

    public void onServerConfigLoaded(IServer server) 
    { 
     populateEnvironment(); 

     Server inServer = (Server)server; 
     JMXRemoteConfig remoteConfig = inServer.getJmxRemoteConfig(); 

     while(true) 
     { 
      String ipAddress = remoteConfig.getIpAddress(); 
      if (ipAddress == null) 
       break; 

      ipAddress = SystemUtils.expandEnvironmentVariables(ipAddress); 

      WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).info("Updating JMX IpAddress: "+ipAddress); 
      remoteConfig.setIpAddress(ipAddress); 
      break; 
     } 

     while(true) 
     { 
      String ipAddress = remoteConfig.getRmiServerHostName(); 
      if (ipAddress == null) 
       break; 

      ipAddress = SystemUtils.expandEnvironmentVariables(ipAddress); 

      WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).info("Updating JMX RMIServerHostName: "+ipAddress); 
      remoteConfig.setRmiServerHostName(ipAddress); 
      break; 
     } 

     while(true) 
     { 
      String propName = "loadBalancerSenderRedirectAddress"; 
      String ipAddress = server.getProperties().getPropertyStr(propName); 
      if (ipAddress == null) 
       break; 

      ipAddress = SystemUtils.expandEnvironmentVariables(ipAddress); 

      WMSLoggerFactory.getLogger(ServerListenerEC2Variables.class).info("Updating Server.property."+propName+": "+ipAddress); 
      server.getProperties().setProperty(propName, ipAddress); 
      break; 
     }  
    } 

    public void onServerCreate(IServer server) 
    { 
    } 

    public void onServerInit(IServer server) 
    { 
    } 

    public void onServerShutdownStart(IServer server) 
    { 
    } 

    public void onServerShutdownComplete(IServer server) 
    { 
    } 

} 
関連する問題