CloudFormation을 사용하여 CloudFormation 매크로 만들기

12189 단어 CloudFormationAWS

소개



이 기사에서는 AWS CloudFormation 관리 콘솔을 사용하여 CloudFormation 매크로를 생성하는 단계를 설명합니다. (초보자용)

또한,

이 기사에서 샘플로서 소개하고 있는 템플릿의 매크로의 처리는, 매크로에 「Key」와 「Description」을 인수로서 건네주면, 10 자리수의 랜덤인 캐릭터 라인을 생성해, Systems Manager의 파라미터 스토어에, 키 그리고 그 값으로 10 자리 무작위 문자열과 설명을 등록하는 처리를 제공합니다.

본 기사에서 게재하고 있는 템플릿의 최신판은 아래에 두고 있습니다.
htps : // 기주 b. 코 m / 오쿠 보 t / 아 ws-c ぉ d d ぉ r 마치 온

CloudFormation 매크로란?



CloudFormation 템플릿의 표준 정의만으로는 실현할 수 없는 처리를,
템플릿 내에서 Lambda 함수(매크로)를 호출하여 실현할 수 있는 CloudFormation 확장 프로그램입니다.

참고



AWS 블로그
AWS CloudFormation을 AWS Lambda로 매크로로 확장

설정 절차



1 AWS CloudFormation 관리 콘솔에서 스택 생성을 클릭합니다.


2 후술하는 템플릿을 선택합니다.


3 각 파라미터를 입력합니다.



매개변수 이름
용도
비고


스택 이름
템플릿에서 만들 리소스 집합의 이름
예 prd-stack-vpc-20180801

CFnMacroName
만들 CloudFormation 매크로의 이름



4 후속 작업은 기본값으로 다음으로 생성됩니다.
만들기 전에 다음을 확인하십시오.
AWS CloudFormation에서 사용자 지정 이름이 있는 IAM 리소스를 생성할 수 있음을 승인합니다.


5 상황이 CREATE COMPLETE가 되면 CloudFormation 매크로의 작성이 완료됩니다.


6 Lambda 관리 콘솔에서 작성한 Lambda 함수(매크로)가 작성되었는지 확인할 수 있습니다.


템플릿



cfn-macro-01.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: 
  CloudFormation Macro Create

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------# 
Parameters:
  CFnMacroName:
    Type: String

# ------------------------------------------------------------#
#  LambdaExecutionRole
# ------------------------------------------------------------#        
Resources:
  LambdaExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: !Sub "${CFnMacroName}-LambdaExecutionRole"
      Policies:
        - PolicyName: !Sub "${CFnMacroName}-LambdaExecutionRole-Policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "logs:CreateLogGroup"
                  - "logs:CreateLogStream"
                  - "logs:PutLogEvents"
                Resource: "arn:aws:logs:*:*:*"

              - Effect: Allow
                Action:
                  - "ssm:PutParameter"
                Resource: "*"

      AssumeRolePolicyDocument: 
        Version: "2012-10-17"
        Statement: 
          - Sid: ""
            Effect: Allow
            Principal: 
              Service: "lambda.amazonaws.com"
            Action: "sts:AssumeRole"

# ------------------------------------------------------------#
#  Lambda Function for CloudFormation Macro
#  example : generate random string(10) and register SSM
# ------------------------------------------------------------#  
  LambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      FunctionName: !Ref CFnMacroName
      Role: !GetAtt LambdaExecutionRole.Arn
      Handler: index.handler

      Code:
        ZipFile: !Sub |
          import boto3
          import string
          import random

          ssm = boto3.client('ssm')

          def handler(event, context):
            key = event['params']['Key']
            description = event['params']['Description']
            randomstr = ''.join(random.choices(string.ascii_letters + string.digits, k=10))

            ssm.put_parameter(
              Name=key,
              Value=randomstr,
              Type='SecureString',
              Description=description
            )
            return {'requestId': event['requestId'], 'status': 'success', 'fragment': randomstr}

      Runtime: "python3.6"
      MemorySize: 128
      Timeout: 5

# ------------------------------------------------------------#
#  CloudFormation Macro
# ------------------------------------------------------------#  
  CFnMacro:
    Type: "AWS::CloudFormation::Macro"
    Properties:
      FunctionName: !Ref LambdaFunction
      Name: !Ref CFnMacroName
      Description: !Ref CFnMacroName 

CloudFormation 매크로 사용



템플릿 내에서 CloudFormation 매크로를 호출할 때 정의하는 방법은 다음과 같습니다.
(이 예에서는 RDS의 MasterUserPassword에서 사용합니다.)
Resources:
  DBInstance:
    Type: "AWS::RDS::DBInstance"
    Properties: 

      MasterUserPassword:
        "Fn::Transform":
        - Name: CFnMacroName #呼び出したいCloudFormationマクロの名前
          Parameters:
            Key: MasterUserPassword #各引数
            Description: "MasterUserPassword for RDS" #各引数

      DBInstanceIdentifier: !Ref DBInstanceIdentifier
      Engine: MySQL
      EngineVersion: 5.7
      DBInstanceClass: !Ref DBInstanceClass
      AllocatedStorage: 100
      StorageType: gp2
      DBName: !Ref DBName

## 以下 省略

좋은 웹페이지 즐겨찾기