SSM 문서에서 SSM 매개 변수에 저장된 값 참조

하고 싶은 일.


이는 이전 기고SSM 문서에서 CloudFormation Stack 만들기의 후속 내용이다.
생성된 SSM 문서를 여러 계정으로 확장할 때, 계정마다 SSM 문서를 업데이트하는 번거로움을 줄이기 위해 환경의 특정한 정보를 외부화합니다.
AWS 사용 설명서 보고도 모르는 부분이 있으니 미리 절차를 적어두세요.

원본 SSM 문서의 내용


임시 서버용 EC2 인스턴스에 대한 CFn Stack을 작성하여 SSM 문서를 자동으로 시작합니다.
정기적으로 임시 서버 시작 처리가 필요하기 때문에 SSM 문서화를 통해 같은 처리를 반복하기 쉽다.
아래의 SSM 문서의yaml 파일에는 ①"서비스 역할의 ARN에 포함된 계정 ID"②"만들고자 하는 CFn Stack의 이름"③"CFn Template 저장처의 S3 구간의 URL"3개를 계정별로 변경해야 한다.
description: Launch temporary server by creating CloudFormation stack
schemaVersion: '0.3'
#assumeRoleではドキュメント実行時に利用するサービスロールのARNを指定。ARNの「account-id」の箇所はドキュメントを作成するAWSアカウントごとに変更する必要がある(①)
assumeRole: 'arn:aws:iam::account-id:role/SSMServiceRole' 
mainSteps:
  - name: CreateStackForTemporaryServer
    action: 'aws:createStack'
    inputs:
#StackNameでは作成したいCFn Stackの名前を指定。アカウントの識別子(Devなど)を含めたいため、ドキュメントを作成するAWSアカウントごとに変更する必要がある(②)
      StackName: TempServerForDev
#TemplateURLでは作成したいCFn Template格納先のS3バケットのURLを指定。格納先バケットはSSMドキュメントを実行するアカウントで作成するため、ドキュメントを作成するAWSアカウントごとに変更する必要がある(③)
      TemplateURL: 'https://bucket-name.s3.ap-northeast-1.amazonaws.com/test/temporary-server.yaml'
      Capabilities:
        - CAPABILITY_IAM

환경 고유 정보의 외부화 절차


1. SSM 매개변수 스토어 값 참조


② "만들고자 하는 CFn Stack의 이름"③ "CFn Template 저장소의 S3 구간의 URL"값은 SSM 문서 측면에서 참조할 수 있도록 SSM 매개 변수 저장소에 저장됩니다.

1-1. SSM Parame 스토어에 값 등록


② "만들고자 하는 CFn Stack의 이름"을 위한 String 유형의 매개변수/tmp-server/stack-name를 만들고 값을 저장TempServerForDev합니다.
③ "CFn Template 저장소의 S3 구간의 URL"을 위한 String 유형의 매개 변수/tmp-server/cfn-template-url, 저장값https://bucket-name.s3.ap-northeast-1.amazonaws.com/test/temporary-server.yaml을 만듭니다.
SSM 매개변수 스토어의 값에 대한 등록 단계 상세 정보는 CloudFormation을 사용하여 Systems Manager의 매개 변수에 저장된 값을 로그인하고를 참조하십시오.

1-2. SSM 문서에 매개 변수 추가


SSM 문서 자체의 매개 변수를 추가하고 1-1에 추가된 SSM의 매개 변수 이름을 허용 값으로 지정합니다.
② 1-1에서 작성한 매개변수/tmp-server/stack-name를 참조하기 위해 SSM 문서의 매개변수StackNameForTempServer를 작성하려는 CFn Stack의 이름에 추가합니다.
다음과 같이 GUI를 통해 SSM 문서를 편집할 수 있습니다.

Allowed values의 SSM 매개변수 값은 {{ssm:parameter-name}}로 지정됩니다.
문서 매개 변수의 데이터 유형을 "String"으로 설정하면 입력하지 않음['{{ssm:parameter-name}}']이 욕먹을 수 있습니다.
입력하면 이미지처럼 표시됩니다- '{{ssm:parameter-name}}'.
③ "CFn Template 저장 위치의 S3 세그먼트의 URL"에 1-1에서 만든 매개변수/tmp-server/cfn-template-url를 참조하기 위해 SSM 문서의 매개변수CFnTemplateURL도 추가합니다.

1-3. SSM 문서의 해당 위치에서 매개변수 지정하기


SSM 문서의 적절한 위치에서 1-2에 추가된 SSM 문서 자체의 매개변수 이름을 지정합니다.StackNameForTempServer를 "Stack name", CFnTemplateURL를 "Template URL"으로 지정합니다.
아래와 같다.
매개 변수의 이름을 {{}}로 묶는 것을 주의하세요.

2. Automation 시스템 variables 활용


①'서비스 역할의 ARN에 포함된 계정 ID'는 SSM 문서에 제공하는 Automation 시스템 variables를 외부화한다.
SSM 문서가 실행될 때 IAM 사용자 또는 IAM이 스크롤하는 계정 ID를 참조할 수 있는 변수global:ACCOUNT_ID를 사용합니다.
Automation 시스템 variables의 일람표는 앞에도 실렸다AWS 사용 설명서.

2-1. SSM 문서에 매개 변수 추가


SSM 문서 자체의 매개 변수AutomationAssumeRole를 추가하고 서비스 역할 ARN을 허용 값으로 지정합니다.
1~2단계와 대체로 같다. 아래와 같다.

Allowed values에서 지정한 서비스 역할 ARN은 arn:aws:iam::{{global:ACCOUNT_ID}}:role/SSMServiceRole과 같이 지정됩니다.
2-2와 마찬가지로 문서 매개 변수의 데이터 유형을 "String"['arn:aws:iam::{{global:ACCOUNT_ID}}:role/SSMServiceRole']으로 설정하면 입력하지 않으면 격노합니다.

2-2. SSM 문서의 해당 위치에서 매개변수 지정하기


2-1에 추가된 문서의 매개 변수AutomationAssumeRole를 SSM 문서의 적절한 위치인'가정작용'으로 지정합니다.
1-3과 마찬가지로 매개 변수의 명칭은 {{}}로 묶어야 한다.

이렇게 되면 ①"서비스 롤러의 ARN에 포함된 계정 ID"②"만들고자 하는 CFn Stack의 이름"③"CFn Template 저장소의 S3 구간의 URL"3개가 모두 외부화됩니다.

업데이트된 SSM 문서 내용


업데이트된 SSM 문서의 yaml은 다음과 같습니다.
이렇게 다시 쓰면 다른 계정에서 SSM 문서를 펼칠 때도 이yaml을 직접 복사할 수 있습니다.
description: Launch temporary server by creating CloudFormation stack
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  StackNameForTempServer:
    type: String
    allowedValues:
      - '{{ssm:/tmp-server/stack-name}}'
    description: ' (Required) CFn Stack name for temporary server.'
  CFnTemplateURL:
    type: String
    allowedValues:
      - '{{ssm:/tmp-server/cfn-template-url}}'
    description: (Required) CFn Template URL for temporary server.
  AutomationAssumeRole:
    type: String
    allowedValues:
      - 'arn:aws:iam::{{global:ACCOUNT_ID}}:role/SSMServiceRole'
    description: (Required) The ARN of the role that allows Automation to perform the actions on your behalf.
mainSteps:
  - name: CreateStackForTemporaryServer
    action: 'aws:createStack'
    inputs:
      StackName: '{{ StackNameForTempServer }}'
      TemplateURL: '{{ CFnTemplateURL }}'
      Capabilities:
        - CAPABILITY_IAM

추기


환경 고유의 정보를 매개 변수로 제공하는 상황에서 매개 변수의 값을 고정 값으로 할 수 있다면 allowedValues에서 사용default이 비교적 적합하다는 것을 알아차린다.allowedValues의 경우 실행할 때 매개 변수의 값이 유지allowedValues인지 덮어쓰는지 명확하게 지정해야 하지만 default는 매번 명시적으로 지정할 필요가 없기 때문에 비교적 쉽다.
그러나 2020년 8월까지 SSM 콘솔의 문서 생성기는 지정default할 수 없기 때문에yaml 파일을 준비해 제작해야 한다.

좋은 웹페이지 즐겨찾기