30
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS Cloud Mapを試してみる

Posted at

##はじめに
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では属性値に環境情報やバージョン情報を付与することで、一意の名称で接続先をコントロールすることができます。

Cloud Map以前
image.png

Cloud Map以後
image.png

2つ目は、今までのAWSのサービスディスカバリとしては、ECSにおいてALBを使用したサーバサイドサービスディスカバリや、Route53を利用したサービスディスカバリが可能でしたが、コンテナに対するサービスディスカバリのみに対応している状況でした。Cloud Mapを使用することにより、EC2やS3,SQSといったAWSサービスのサービスディスカバリができるようになります。

Cloud Map以前
image.png

Cloud Map以後
image.png

実際のインスタンスディスカバリの方法は、3種類あります
API call
API call and DNS query in VCP
API call and Public DNS query

##1つ目の環境属性を設定するユースケースを試してみます
###Namespaceの作成
Create namespaceをクリック
image.png

今回は、API Callsで作成
image.png

###サービスの作成
Create serviceをクリック
image.png

frontendサービスを作成します
image.png

インスタンスを登録します
image.png

image.png

本番用
image.png

開発用
image.png

###サービスディスカバリ実施
フィルタリングなしでサービスディスカバリすると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サービスを作成
image.png

image.png

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などの書き込み属性などについても設定することができます

##お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

30
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?