##はじめに
2018/11/28にAWS Cloud Mapが発表になりましたので試してみます。
AWS Cloud Mapを利用するとクラウドをマッピングすることができます。Amazon S3のバケットやAmazon DynamoDBのテーブル、Amazon SQSのキュー
Amazon EC2やAmazon ECS、Amazon EKSやAWS Lambda上で構成されたカスタムクラウドサービスの様な任意のリソースに対しても分かりやすい名前を定義できます。AWS SDKと認証されたAPIクエリを使って分かりやすい名前にてリソースの場所やメタデータを検出することができます。
デプロイメントステージやバージョンの様なカスタム属性によって、リソースをさらにフィルターし、検出することができます
AWS Cloud Mapを使用するメリットですが、大きく分けて2つあります。
1つ目は、システム全体で1つのネームスペースを使用することが可能になる点です。今までは、本番や開発といった環境ごとにdev-frontend.exmaple.comやprd-frontend.exmaple.comというように接続先の名称を環境ごとに定義していましたが、Cloud Mapでは属性値に環境情報やバージョン情報を付与することで、一意の名称で接続先をコントロールすることができます。
2つ目は、今までのAWSのサービスディスカバリとしては、ECSにおいてALBを使用したサーバサイドサービスディスカバリや、Route53を利用したサービスディスカバリが可能でしたが、コンテナに対するサービスディスカバリのみに対応している状況でした。Cloud Mapを使用することにより、EC2やS3,SQSといったAWSサービスのサービスディスカバリができるようになります。
実際のインスタンスディスカバリの方法は、3種類あります
API call
API call and DNS query in VCP
API call and Public DNS query
##1つ目の環境属性を設定するユースケースを試してみます
###Namespaceの作成
Create namespaceをクリック
###サービスの作成
Create serviceをクリック
###サービスディスカバリ実施
フィルタリングなしでサービスディスカバリすると2つのインスタンスが返ってきます
aws servicediscovery discover-instances --namespace-name exmaple.com --service-name frontend
{
"Instances": [
{
"InstanceId": "ec2",
"HealthStatus": "UNKNOWN",
"ServiceName": "frontend",
"Attributes": {
"AWS_INSTANCE_IPV4": "192.0.2.44",
"Env": "Dev"
},
"NamespaceName": "exmaple.com"
},
{
"InstanceId": "ec2-2",
"HealthStatus": "UNKNOWN",
"ServiceName": "frontend",
"Attributes": {
"AWS_INSTANCE_IPV4": "192.0.2.4",
"Env": "Prd"
},
"NamespaceName": "exmaple.com"
}
]
}
query-parametersでEnv=Prdとすることで本番用のインスタンスがディスカバリ可能です
aws servicediscovery discover-instances --namespace-name exmaple.com --service-name frontend --query-parameters Env=Prd
{
"Instances": [
{
"HealthStatus": "UNKNOWN",
"Attributes": {
"AWS_INSTANCE_IPV4": "192.0.2.4",
"Env": "Prd"
},
"InstanceId": "ec2-2",
"NamespaceName": "exmaple.com",
"ServiceName": "frontend"
}
]
}
query-parametersでEnv=Devとすることで本番用のインスタンスがディスカバリ可能です
$ aws servicediscovery discover-instances --namespace-name exmaple.com --service-name frontend --query-parameters Env=Dev
{
"Instances": [
{
"HealthStatus": "UNKNOWN",
"NamespaceName": "exmaple.com",
"InstanceId": "ec2",
"ServiceName": "frontend",
"Attributes": {
"AWS_INSTANCE_IPV4": "192.0.2.44",
"Env": "Dev"
}
}
]
}
###2つ目のユースケースであるS3に対するサービスディスカバリ
logsサービスを作成
S3サービスのサービスディスカバリを実施します
aws servicediscovery discover-instances --namespace-name exmaple.com --service-name logs
{
"Instances": [
{
"NamespaceName": "exmaple.com",
"ServiceName": "logs",
"Attributes": {
"ARN": "arn:aws:s3:us-east-1:********:archive"
},
"InstanceId": "archive",
"HealthStatus": "UNKNOWN"
}
]
}
ARNが取得できました。EC2と同様に環境を示す属性や、ReadOnlyなどの書き込み属性などについても設定することができます
##お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。