EventBridge+Lambda로 AMI 생성 알림을 구현하는 CloudFormation 템플릿 생성
9808 단어 EventBridgeCloudFormation람다AWS
이번에 참고한 기사
AMI 작성 시간을 알고 싶었기 때문에 SNS Topic으로 통지 해 보았습니다.
CloudFormation 템플릿으로 구현 개요
CloudFormation 템플릿으로 스택을 만들면 아래와 같은 구성이 완성됩니다.
CloudTrail은 CloudFormation 템플릿에 포함되어 있지 않으므로 별도 활성화가 필요합니다.
이 구성은 아래 CloudFormation 템플릿으로 구축됩니다.
AMI 생성시 SNS 알림용 CloudFormation 템플릿(notify-sns-createimage.yml)
AMI 생성 시 CreateImage라는 AWS API Call이 호출될 때 EventBridge를 통해 SNS 알림(Email)합니다. Lambda에서는 다음을 수행합니다.
메일 형식
件名:
Start CreateImage (対象インスタンスID(対象AMI名))
本文:
Start CreateImage
Region:対象リージョン
InstanceID:対象インスタンスID
AMI Name:対象AMI名
AMI ID:対象AMI ID
AMI 생성 시 SNS 알림용 CloudFormation 템플릿(notify-sns-createimage.yml)의 내용은 아래와 같습니다.
CloudFormation 스택을 만들 때 입력해야 하는 매개 변수를 설명합니다.
notify-sns-createimage.yml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
RoleName:
Type: String
Default: notify-sns-createimage
FunctionName:
Type: String
Default: notify-sns-createimage
EventName:
Type: String
Default: notify-sns-createimage_event
SNSTopicName:
Type: String
Default: notify-sns-createimage
SNSSubscriptionEmail:
Type: String
Default: xxxx@example.com
Resources:
LambdaRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: !Sub '${RoleName}'
AssumeRolePolicyDocument:
Statement:
- Action:
- 'sts:AssumeRole'
Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Version: 2012-10-17
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/AWSLambdaExecute'
Path: /
Lambda:
Type: 'AWS::Lambda::Function'
DependsOn: LambdaRole
Properties:
Code:
ZipFile: |
import os
import boto3
def lambda_handler(event, context):
awsRegion = event['detail']['awsRegion']
name = event['detail']['requestParameters']['name']
instanceId = event['detail']['requestParameters']['instanceId']
imageId = event['detail']['responseElements']['imageId']
client = boto3.client('sns')
sns_response = client.publish(
TopicArn= os.environ['SNS_TopicName'] ,
Message=('Start CreateImage\n\nRegion:'
+ awsRegion
+ '\nInstanceID:'
+ instanceId
+ '\nAMI Name:'
+ name
+ '\nAMI ID:'
+ imageId
+ '\n\n'),
Subject= 'Start CreateImage (' + instanceId + '(' + name + '))'
)
return sns_response
Description: SNS notification when CreateImage is executed
FunctionName: !Sub ${FunctionName}
Handler: index.lambda_handler
MemorySize: 128
Role: !GetAtt LambdaRole.Arn
Runtime: python3.6
Timeout: 300
Environment:
Variables:
'AWS_ACCOUNT': !Sub ${AWS::AccountId}
'SNS_TopicName': !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${SNSTopicName}
Tags:
- Key: Name
Value: !Sub ${RoleName}
- Key: CloudformationArn
Value: !Ref 'AWS::StackId'
NotifyMailSNSTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: !Sub ${SNSTopicName}
TopicName: !Sub ${SNSTopicName}
Subscription:
- Endpoint: !Sub ${SNSSubscriptionEmail}
Protocol: email
NotifyMailSNSPolicy:
Type: AWS::SNS::TopicPolicy
DependsOn: NotifyMailSNSTopic
Properties:
PolicyDocument:
Id: MyTopicPolicy
Version: '2012-10-17'
Statement:
- Sid: NotifyMailSNSPolicy
Effect: Allow
Principal:
AWS: !GetAtt LambdaRole.Arn
Action:
- sns:Publish
Resource: !Ref NotifyMailSNSTopic
Topics:
- !Ref NotifyMailSNSTopic
Rule:
Type: 'AWS::Events::Rule'
Properties:
Description: !Sub ${EventName}
Name: !Sub ${EventName}
EventPattern:
source:
- "aws.ec2"
detail-type:
- "AWS API Call via CloudTrail"
detail:
eventSource:
- "ec2.amazonaws.com"
eventName:
- "CreateImage"
State: "ENABLED"
Targets:
- Arn: !GetAtt
- Lambda
- Arn
Id: lambda
LambdaEvent:
Type: 'AWS::Lambda::Permission'
Properties:
Action: 'lambda:InvokeFunction'
FunctionName: !Ref Lambda
Principal: events.amazonaws.com
SourceArn: !GetAtt
- Rule
- Arn
Reference
이 문제에 관하여(EventBridge+Lambda로 AMI 생성 알림을 구현하는 CloudFormation 템플릿 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/junk87/items/13e3e7dfeff2ecb7aabd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)