LoginSignup
30
18

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
18
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
18