초기커밋
This commit is contained in:
154
ServerCore/AWS/AwsHelper.cs
Normal file
154
ServerCore/AWS/AwsHelper.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace ServerCore;
|
||||
|
||||
public static class AwsHelper
|
||||
{
|
||||
// EC2에서 실행중인 상태 종류
|
||||
public enum Ec2RunningState
|
||||
{
|
||||
None = 0,
|
||||
|
||||
False = 1, //EC2에서 실행하고 있지 않다 !!!
|
||||
True = 2 //EC2에서 실행중이다 !!!
|
||||
};
|
||||
|
||||
private static readonly string MetaDataTokenUrl = "http://169.254.169.254/latest/api/token";
|
||||
private static readonly string MetaDataInstanceIdUrl = "http://169.254.169.254/latest/meta-data/instance-id";
|
||||
private static readonly string MetaDataIpV4Url = "http://169.254.169.254/latest/meta-data/public-ipv4";
|
||||
|
||||
private static Ec2RunningState RunningState = Ec2RunningState.None;
|
||||
|
||||
public static async Task<string> getAwsInstanceId()
|
||||
{
|
||||
var aws_meta_token = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
aws_meta_token = await getAwsMetaDataToken();
|
||||
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, MetaDataInstanceIdUrl);
|
||||
request.Headers.Add("X-aws-ec2-metadata-token", aws_meta_token);
|
||||
request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
var err_msg = $"Exception !!!, Failed to function in getAwsInstanceId() !!! : exception:{e}, awsMetaToken:{aws_meta_token}";
|
||||
Log.getLogger().fatal(err_msg);
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public static string getAwsPublicIPv4OrEthernetIPv4()
|
||||
{
|
||||
if (true == AwsHelper.isRunningOnEC2().GetAwaiter().GetResult())
|
||||
{
|
||||
return AwsHelper.getPublicIPv4().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
return NetworkHelper.getEthernetLocalIPv4();
|
||||
}
|
||||
|
||||
private static async Task<bool> isRunningOnEC2()
|
||||
{
|
||||
if (Ec2RunningState.None != RunningState)
|
||||
{
|
||||
if(Ec2RunningState.True == RunningState) { return true; }
|
||||
else if(Ec2RunningState.False == RunningState) { return false; }
|
||||
}
|
||||
|
||||
var aws_meta_token = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
aws_meta_token = await getAwsMetaDataToken();
|
||||
|
||||
if(false == aws_meta_token.isNullOrWhiteSpace())
|
||||
{
|
||||
RunningState = Ec2RunningState.True;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (HttpRequestException httpEx)
|
||||
{
|
||||
var err_msg = $"HttpRequestException !!!, Failed to function in isRunningOnEC2() : exception:{httpEx}, awsMetaToken:{aws_meta_token}";
|
||||
Log.getLogger().debug(err_msg);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var err_msg = $"Exception !!!, Failed to function in isRunningOnEC2() : exception:{e}, awsMetaToken:{aws_meta_token}";
|
||||
Log.getLogger().error(err_msg);
|
||||
}
|
||||
|
||||
// EC2 환경이 아닌 경우
|
||||
RunningState = Ec2RunningState.False;
|
||||
return false;
|
||||
}
|
||||
|
||||
private static async Task<string> getPublicIPv4()
|
||||
{
|
||||
var aws_meta_token = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
aws_meta_token = await getAwsMetaDataToken();
|
||||
|
||||
using (HttpClient client = new HttpClient())
|
||||
{
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, MetaDataIpV4Url);
|
||||
request.Headers.Add("X-aws-ec2-metadata-token", aws_meta_token);
|
||||
request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var err_msg = $"Exception !!!, Failed to function in getPublicIPv4() : exception:{e}, awsMetaToken:{aws_meta_token}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return await Task.FromResult(string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<string> getAwsMetaDataToken()
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
var request = new HttpRequestMessage(HttpMethod.Put, MetaDataTokenUrl);
|
||||
request.Headers.Add("X-aws-ec2-metadata-token-ttl-seconds", "21600");
|
||||
request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
|
||||
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
var err_msg = $"Exception !!!, Failed to function in getAwsMetaDataToken() !!! : Exception:{e}";
|
||||
Log.getLogger().debug(err_msg);
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user