2017-12-14 10 views
1

ECS 인프라를 만들 때 우리는 Task Definitions을 CloudFormation으로 설명합니다. 환경 변수를 매개 변수로 템플릿에 동적으로 전달할 수 있기를 원합니다. 문서에 따르면 Environment에는 KeyValuePair 유형이 있지만 CloudFormation 매개 변수에는이 유형이 없습니다. 이 템플릿은 중첩 스택으로 사용되므로 환경 변수가 동적으로 전달되므로 템플릿에 환경 변수를 하드 코딩 할 수 없습니다.Cloudformation KeyValuePair 매개 변수 목록

내가 지금까지 볼 수있는 유일한 방법은 모든 인수를 CommaDelimitedList로 전달한 다음 어떤 식 으로든 구문 분석하고 CloudFormation functions을 사용하여 매핑하는 것입니다. Fn :: Key와 Value의 모든 항목을 분할 할 수 있지만 CloudFormation에서 KeyValuePair의 배열을 동적으로 구축하는 방법은 무엇입니까?

또는 더 쉬운 방법이있을 수 있습니다. 어떤 아이디어라도 미리 감사드립니다.

+0

환경에서 키 쌍을 소비하는 클라이언트/서비스는 무엇입니까? 얼마나 많은 키 쌍이 매개 변수로 주입되어야합니까? –

+0

@RodrigoM, 키 - 값 쌍의 양은 동적이지만이 경우에는 최대 20 개의 환경 변수입니다. 이러한 환경 변수가 요구되는 경우 Docker 컨테이너에 전달됩니다. – Ivan

+0

나는 그 과정에서 그들이 참조 된 곳이 궁금했다. Docker 파일 또는 런타임 응용 프로그램에서 참조되는 값입니까? 양자 모두? –

답변

0

EC2 매개 변수 저장소를 사용하여 CloudFormation에서 지원되는 보안 키/값 쌍을 만들고 ECS 환경과 통합 할 수 있습니다.

AWS Systems Manager Parameter Store

AWS 시스템 관리자 매개 변수 스토어는 구성 데이터 관리 및 비밀 관리를위한 보안, 계층 스토리지를 제공합니다. 은 암호, 데이터베이스 문자열 및 라이센스 코드 과 같은 데이터를 매개 변수 값으로 저장할 수 있습니다. 값을 일반 텍스트 또는 암호화 된 데이터로 저장할 수 있습니다. 그런 다음 매개 변수를 만들 때 이라는 고유 한 이름을 사용하여 값을 참조 할 수 있습니다. 확장 성이 뛰어나고 사용 가능한 및 내구성이 뛰어난 매개 변수 저장소는 AWS Cloud에 의해 백업됩니다. 매개 변수 스토어는 추가 비용없이 제공됩니다.

매개 변수 스토어 응용 프로그램의 비밀을 저장하기위한 훌륭한 보안 기능을 가지고 있지만, 또한 등 공개 키, 환경 설정, 라이센스 코드,

그리고 직접 지원으로 민감하지 응용 프로그램의 문자열을 저장하는 데 사용할 수 있습니다

CloudFormation을 사용하면 ECS에서 액세스 할 수있는 응용 프로그램 구성 문자열을 쉽게 캡처, 저장 및 관리 할 수 ​​있습니다.

Description: Simple SSM parameter example 
Parameters: 
    pSMTPServer: 
    Description: SMTP Server URL eg [email-smtp.us-east-1.amazonaws.com]:587 
    Type: String 
    NoEcho: false 
    SMTPServer: 
    Type: AWS::SSM::Parameter 
    Properties: 
     Name: my-smtp-server 
     Type: String 
     Value: !Ref pSMTPServer 

모든 AWS 런타임 환경 (EC2, ECS, 람다)는 쉽게 안전하게 값을 검색 할 수 있습니다 이 템플릿은 콘솔 또는 CLI를 통해 스택 생성시 매개 변수 저장소 키 값을 제공 할 수 있습니다. 콘솔 측면에서 매개 변수 버전 기록을 유지하는 훌륭한 매개 변수 관리자 인터페이스가 있습니다. 권한이 표준 IAM 정책 구문으로 제어되도록 그것의, IAM과 intergated :

{ 
    "Action": [ 
     "ssm:GetParameterHistory", 
     "ssm:GetParameter", 
     "ssm:GetParameters", 
     "ssm:GetParametersByPath" 
    ], 
    "Resource": [ 
     "arn:aws:ssm:us-west-2:555513456471:parameter/smtp-server" 
    ], 
    "Effect": "Allow" 
}, 
{ 
    "Action": [ 
     "kms:Decrypt" 
    ], 
    "Resource": [ 
     "arn:aws:kms:us-west-2:555513456471:key/36235f94-19b5-4649-84e0-978f52242aa0a" 
    ], 
    "Effect": "Allow" 
} 

마지막으로,이 blog article 런타임에 Dockerfile에 권한을 읽을 수있는 방법을 보여줍니다. AWS Parameter Store를 사용하여 Docker에서 환경 변수를 안전하게 처리 할 수있는 방법을 제안합니다. 참고로 여기에 Dockerfile을 포함합니다 :

FROM grafana/grafana:master 

RUN curl -L -o /bin/aws-env https://github.com/Droplr/aws-env/raw/master/bin/aws-env-linux-amd64 && \ 
    chmod +x /bin/aws-env 

ENTRYPOINT ["/bin/bash", "-c", "eval $(/bin/aws-env) && /run.sh"] 

해당 매개 변수를 사용하여 각 매개 변수를 컨테이너의 환경 변수로 사용할 수 있습니다. 응용 프로그램은 환경 변수에서 매개 변수를 읽는 래퍼가 필요할 수도 있고 없을 수도 있습니다.

+0

템플릿 목록에 매개 변수 목록을 삽입하는 문제는 실제로 해결되지 않습니다. 그렇습니까? env 변수 값을 전달할뿐만 아니라 키도 필요합니다. – Ivan

+0

물론 템플릿에 20 개의 매개 변수를 포함 할 수 있습니다. 이게 네가 말하는거야? 어떤 종류의 열쇠? 일반 매개 변수 저장소이므로 아무 것도 저장할 수 있습니다. 다른 유형의 데이터 중 ssh 키를 저장하는 데 사용합니다. –

+0

CloudFusion에서 필요하다고 언급 한 TaskDefinition ContainerDefinition KeyValue 쌍과 기능면에서 동일합니다. SSM 매개 변수는 현재 CloudFormation에 있습니다. Fn :: GetAtt (매개 변수 'value')를 사용하여 다른 스택의 값을 참조 할 수도 있습니다. 네가 주어진 요구 사항에 맞지 않는 것 같니? –