CloudFormation으로 CloudWatch Events 및 Lambda 구축

CloudFormation 개요



망비록적으로 기재 하겠습니다.

JSON 파일이나 YAML 파일에 구축하고 싶은 AWS 서비스의 설정 항목을 기재해,
CloudFormation에 로드하게 하는 것으로 기재한 서비스의 구축을 자동화할 수 있다.

■ 공식 링크
공식 페이지
블랙 벨트

건설



구성



EC2라면 바로 검색할 수 있을까 생각하기 때문에,
지난 기사의 CloudWatch Events와 Lambda가 연동하는 부분을 구축합니다.
※Lambda의 코드도 전회의 기사를 참조를 부탁드립니다.
【전회:AWS Config의 통지 내용을 Lambda로 성형】



CloudFormation



템플릿
CloudFormation 매개 변수는 Lambda에 전달하기위한 것입니다.

AWSTemplateFormatVersion: 2010-09-09
Description: CFn test
Parameters: 
    変数名:CloudFormationで使用できる変数
        Type: String
        Description:(変数の説明文) 
    S3Name:
        Type: String
    ZipF:
        Type: String
    P3Handler:
        Type: String
Resources:
    以下AWSサービスの内容

이번 파라미터의 의도



Lambda의 코드는 YAML 파일에 직접 쓰지 않고 S3에 저장하고 그것을 참조시킵니다.
  • S3Name : python3 코드를 저장하는 S3 버킷 이름
  • ZipF : python3 코드를 포함하는 파일 이름
  • P3Handler : 위의 파일 이름에서 ".zip"을 제거한 문자

  • CloudWatch 이벤트



    YAML 파일의 내용
    내용은 GUI에서 Events의 규칙을 작성하면 이벤트 패턴을 열람할 수 있기 때문에,
    실제로 작성하고 싶은 이벤트를 손으로 설정해 보면 참고가 됩니다.

    IAM 설정 변경 감지


    
    EventRule:
        Type: 'AWS::Events::Rule'
        Properties:
          Description: EventRule
          EventPattern:
            source:
              - aws.config
            detail-type:
              - Config Configuration Item Change
            detail:
              configurationItem:
                resourceType:
                  - 'AWS::IAM::User'
                  - 'AWS::IAM::Group'
                  - 'AWS::IAM::Role'
                  - 'AWS::IAM::Policy'
          State: ENABLED
          Targets:
            - Arn: !GetAtt 
                - LambdaTestFunction
                - Arn
              Id: TargetFunctionV1
        DependsOn:
          - LambdaTestFunction
    

    규칙 준수 및 비준수 감지


    
      EventRule:
        Type: 'AWS::Events::Rule'
        Properties:
          Description: EventRule
          EventPattern:
            source:
              - aws.config
            detail-type:
              - Config Rules Compliance Change
          State: ENABLED
          Targets:
            - Arn: !GetAtt 
                - LambdaTestFunction
                - Arn
              Id: TargetFunctionV1
        DependsOn:
          - LambdaTestFunction
    

    항목 보충



    resourceType: IAM의 항목을 기재해, IAM의 설정 변경을 통지 대상으로 한다.
    Targets : CloudWatch Events와 연관된 Lambda 설명
    공식 참고 문서

    CloudWatch Events에 Lambda 역할 부여


    
      PermissionForEventsToInvokeLambda:
        Type: 'AWS::Lambda::Permission'
        Properties:
          FunctionName: !Ref LambdaTestFunction
          Action: 'lambda:InvokeFunction'
          Principal: events.amazonaws.com
          SourceArn: !GetAtt 
            - EventRule
            - Arn
    

    공식 참고 문서

    람다


    
      LambdaTestFunction:
        Type: 'AWS::Lambda::Function'
        Properties:
          Code:
            S3Bucket: !Ref S3Name
            S3Key: !Ref ZipF
          Environment:
            Variables:
          FunctionName: Config-item-change-test
          Handler: P3Handler.lambda_handler
          Runtime: python3.6
          Timeout: '3'
          Role: !GetAtt 
            - LambdaExecutionRole
            - Arn
    

    항목 보충


  • S3Bucket : python3 코드를 저장하는 S3 버킷 이름
  • S3Key : python3 코드를 포함하는 파일 이름
  • Handler : 위의 파일 이름에서 ".zip"을 제거한 문자

  • 공식 참고 문서

    이번에 작성한 Lambda용 Policy 작성 및 부여


      LambdaExecutionRole:
        Type: 'AWS::IAM::Role'
        Properties:
          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Principal:
                  Service:
                    - lambda.amazonaws.com
                Action:
                  - 'sts:AssumeRole'
          Path: /
          Policies:
            - PolicyName: lambdatest
              PolicyDocument:
                Version: 2012-10-17
                Statement:
                  - Effect: Allow
                    Action:
                      - 'logs:CreateLogGroup'
                      - 'logs:CreateLogStream'
                      - 'logs:PutLogEvents'
                      - 's3:PutAnalyticsConfiguration'
                      - 's3:PutAccelerateConfiguration'
                      - 's3:ReplicateObject'
                      - 's3:PutEncryptionConfiguration'
                      - 's3:PutBucketTagging'
                      - 's3:PutLifecycleConfiguration'
                      - 's3:PutObjectTagging'
                      - 's3:PutBucketVersioning'
                      - 's3:PutMetricsConfiguration'
                      - 's3:PutReplicationConfiguration'
                      - 's3:PutObjectVersionTagging'
                      - 's3:PutBucketCORS'
                      - 's3:PutInventoryConfiguration'
                      - 's3:PutObject'
                      - 's3:PutBucketNotification'
                      - 's3:PutBucketWebsite'
                      - 's3:PutBucketRequestPayment'
                      - 's3:PutBucketLogging'
                      - 's3:ListBucket'
                      - 'sns:Publish'
                    Resource:
                      - '*'
    

    공식 참고 문서

    모든 것을 하나로 결합



    템플릿의 "Resources :"에서 다음 줄로 들여 쓰고 붙여 넣습니다.
    AWSTemplateFormatVersion: 2010-09-09
    Description: CFn test
    Parameters: 
        S3Name:
            Type: String
        ZipF:
            Type: String
        P3Handler:
            Type: String
    Resources:
      LambdaTestFunction:
        Type: 'AWS::Lambda::Function'
        Properties:
          Code:
            S3Bucket: !Ref S3Name
            S3Key: !Ref ZipF
          Environment:
            Variables:
          FunctionName: Config-item-change-test
          Handler: P3Handler.lambda_handler
          Runtime: python3.6
          Timeout: '3'
          Role: !GetAtt 
            - LambdaExecutionRole
            - Arn
    
    

    CloudFormation에서 템플릿 확인



    CloudFormation은 템플릿이 올바른지 여부를 확인할 수 있습니다.
    AWS 리소스 단위로 생성되기 때문에 오류 부분이 표시됩니다.
    이것으로 에러 해소로 이어집니다.
  • CloudFormation 메뉴 내 템플릿 디자인에서
  • 오른쪽 상단의 파일 아이콘에서 열기를 선택하여 위에서 만든 YAML 파일을 엽니 다.
  • YAML 파일의 형식이 맞으면 아래와 같이 아이콘과 화살표가 나옵니다.

  • CloudFormation으로 구축


  • 업로드 아이콘을 클릭하여 빌드로 들어갑니다.
  • 이름이나 매개변수를 입력하십시오. 이번에 롤을 만들기 때문에,
    마지막으로 "AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 승인합니다."
    확인하는 것을 잊지 마십시오. 다른 것은 기본적으로 괜찮습니다.

  • 마지막으로



    CloudFormation은 0의 도전이었기 때문에 사용법을 배우는 것이 어려웠습니다.
    공식 문서가 충실하고, 선구자님 덕분에 사용할 수 있게 되었습니다.
    실수가 있으면 지적해 주시면 감사하겠습니다.

    좋은 웹페이지 즐겨찾기