2016-08-02 2 views
1

우리는 cloudformation을 사용하여 서비스 인스턴스를 aws에 배포합니다. 우리 스택의 일부는 현재 탄성 캐시 redis 클러스터이지만 조금 여분의 중복을 위해 redis ReplicationGroup으로 전환하려고합니다.aws-cli를 사용하여 AWS ReplicationGroup DNS 가져 오기

우리는 aws-cli를 통해 가져 와서 Redis DNS 항목을 가져 오는 것을 포함하여 Google 서비스의 배포를 자동화하기 위해 가능한 플레이 북을 사용합니다.

문제는 AWS-CLI는 ID로 ReplicationGroup이를 조회 할 수있는 기능 (aws-cli docs)을 가지고 있지만 CloudFormation은에 실제로 이 ID를 설정 능력, 대신 ID가 임의의 고유 한 값으로 설정되어 있지 않습니다이며, :

Elasticache replication group id in CloudFormation template

너무 오래 짧은 이야기, 내 ReplicationGroup이이 차 DNS 레코드를 얻을 수 있도록 내가 쿼리하는 데 사용할 수있는 하나의 명령이 무엇입니까?

+0

당신은이 가이드는 당신이 https://docs.aws 찾고있는 것입니다 확인 했 .amazon.com/AmazonElastiCache/latest/UserGuide/Replication.Endpoints.html # Replication.Endpoints.Finding.CLI – error2007s

+0

네,저기서 보았습니다. 그건 내 질문에 내가 설명하지 않은 ReplicationGroupId가 필요하다. 나는 단지 ReplicationGroup의 설명을 가지고있다. – StormeHawke

+0

복제 그룹은 CLI를 사용하여 CLI를 사용하여 식별되고 설명이 없기 때문에 불가능할 것이라고 나는 생각하지 않지만 다른 방법이 있는지 확실하게 알지 못한다. – error2007s

답변

0

우리의 devops 팀과 많은 논의와 토론을 마친 후 단일 aws-cli 명령으로 작동하는 방법을 발견했습니다.

첫째, "자원"블록 (외부의)와 같은 수준에, 당신의 레디 스 구성에 출력 블록을 추가 :

"Outputs" : { 
     "RedisReplicationGroupDnsName" : { 
      "Description" : "DNS entry for the redis replication group", 
      "Value" : { "Fn::GetAtt" : [ "<your replication group's json key>", "PrimaryEndPoint.Address" ] } 
     } 
    }, 

다음, 당신은 IAM 정책을 설정해야합니다 그 인스턴스가 자체 스택을 설명 할 수있게합니다.

마지막으로, 사용 AWS를-CLI이 명령을 사용하여 복제 그룹에 대한 기본 DNS 엔드 포인트를 얻을 수 있습니다 :

aws cloudformation describe-stacks --region {{ ansible_ec2_placement_region }} --stack-name <your stack name> --query 'Stacks[0].Outputs[?OutputKey==`RedisReplicationGroupDnsName`]|[0].OutputValue' --output text 
1

EC2 인스턴스에는 "현재 복제 그룹"개념이 없습니다. 따라서 복제 그룹 ID를 알지 못하면 직접 결정해야합니다.

옵션 1 : 당신의 CloudFormation 템플릿에서

, 그것은 사용자 데이터의를 통해 EC2 인스턴스에 복제 그룹 ID를 전달 그 일을 몇 가지 방법이 있습니다.

CloudFormation 템플릿에서 { "Ref" : "MyReplicationGroup" }을 사용하여 그룹의 복제 ID를 가져와 사용자 데이터로 전달할 수 있습니다.

또는 { "Fn::GetAtt" : [ "MyReplicationGroup", "PrimaryEndPoint.Address" ] }을 사용하여 기본 끝점의 주소를 가져올 수 있습니다. 의 EC2 인스턴스 내에서 다음

"Properties" : { 
    "UserData" : { "Ref" : "MyReplicationGroup" }, 
} 

를 사용자 데이터를 잡아 : 당신이 그렇지 않으면 실행 구성의 사용자 데이터 필드를 사용하지 않는 경우

, 당신은 단순히 속성의 ID 또는 엔드 포인트 주소를 참조 할 수 있습니다 인스턴스 메타 데이터에서 :

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-user-data-retrieval

$ curl http://169.254.169.254/latest/user-data 

옵션 2 :

이 하나의 명령이 아니라 당신이 복제 그룹 "발견"할 수 인스턴스 ID

  • 사용 AWS CLI를 얻을 인스턴스에 대한 태그를 얻을 수 describe-instances 명령을 인스턴스 메타 데이터에서

    1. 을 .
    2. 태그 중에는 CloudFormation 스택을 식별하는 aws:cloudformation:stack-name 태그가 있습니다.
    3. AWS CLI describe-stack-resources 명령을 사용하여 스택의 리소스를 가져옵니다. 거기에서 논리적 CloudFormation ID로부터 복제 그룹 ID를 찾으십시오.
  • +0

    흥미 롭습니다. 옵션 1에 대해 좀 더 자세히 설명해 주시겠습니까? 어떻게 전달할 것이며 ec2 인스턴스의 값에 어떻게 액세스 할 수 있습니까? – StormeHawke

    +0

    EC2 인스턴스의 시작 구성에는 'UserData' 속성이 있습니다. 이 속성은 데이터를 EC2 인스턴스로 전달합니다. 데이터가 될 수도 있고 스크립트 일 수도 있습니다. 현재, 그것은 아마도 Anabilities를 부트 스트랩하는 스크립트를 실행할 것입니다. 그렇다면 복제 그룹을 (어떤 식 으로든) 전달해야합니다. EC2 인스턴스 내부에서이를 읽는 것은 사용자 데이터에이를 쓰는 방법에 달려 있습니다. –

    +0

    우리의 빌드 프로세스는 ssh를 사용하여 가능한 다른 비즈니스 로직 관련 작업을 시작합니다. 현재로서는 userData를 전혀 사용하지 않습니다 – StormeHawke

    관련 문제