此文件說明利用EventBridge事件觸發Lambda執行發信程式
主要用到的服務 #
Lambda #
AWS提供的程式執行代理服務,不用另外準備環境,就可以執行任何應用或後端程式。
本身可以單獨執行,也可以透過事件、其他服務處發,簡單舉例:
-
搭配API Gateway,就可以將其變成一個API服務。
-
這次要說明的,利用EventBridge的事件,搭配發信的Lambda程式,變成一個事件通知服務。
EventBridge #
原先為CloudWatch下的"事件",後被獨立出去為單獨服務。

相較於常見的CloudWatch的日誌 (Status Log),只記錄狀態,事件更適合拿來做於一些執行結果、狀態判斷
設定說明 #
這裡同CodePipeline一樣,如同AWS大多數服務,都沒有規定建立的先後順序,差別只在於怎麼樣設定起來比較順手(不會覺得缺東缺西)。
這裡建議先建立Lambda,再建立EventBridge
Lambda #
函數 #

建立函數 #

-
設定基本資訊,如名稱、runtime(翻譯可能誤解)、執行環境架構(影響可用指令集)
-
:warning:部分語言不支援線上編輯程式,如.NET/.NET Core。
-
runtime、架構選定後無法更改,只能重建。
-
-
變更預設執行角色
這裡根據權限管理,自行設定存取的角色
-
進階設定

程式碼 #
撰寫要執行的程式碼,可以利用"測試"進行串接其他服務前的測試
以下提供python的發信程式參考:
import boto3
import json
from botocore.exceptions import ClientError
def send_email(body):
SENDER = "<sender mail>" # must be verified in AWS SES Email
RECIPIENT = "<sender mail>" # must be verified in AWS SES Email
# If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES.
AWS_REGION = "ap-northeast-1"
# The subject line for the email.
SUBJECT = "code pipeline update"
# The email body for recipients with non-HTML email clients.
BODY_TEXT = body
# The HTML body of the email.
BODY_HTML = """<html>
<head></head>
<body>
<h1>Hey Hi...</h1>
<p>This email was sent with
<a href='https://aws.amazon.com/ses/'>Amazon SES CQPOCS</a> using the
<a href='https://aws.amazon.com/sdk-for-python/'>
AWS SDK for Python (Boto)</a>.</p>
</body>
</html>
"""
# The character encoding for the email.
CHARSET = "UTF-8"
# Create a new SES resource and specify a region.
client = boto3.client('ses',region_name=AWS_REGION)
# Try to send the email.
try:
#Provide the contents of the email.
response = client.send_email(
Destination={
'ToAddresses': [
RECIPIENT,
],
},
Message={
'Body': {
#'Html': {
# 'Data': BODY_HTML
#},
'Text': {
'Data': BODY_TEXT,
'Charset': CHARSET
},
},
'Subject': {
'Data': SUBJECT,
'Charset': CHARSET
},
},
Source=SENDER
)
# Display an error if something goes wrong.
except ClientError as e:
print(e.response['Error']['Message'])
else:
print("Email sent! Message ID:"),
print(response['MessageId'])
def lambda_handler(event, context):
s1 = "detail-type: " + event["detail-type"] + "\r\n"
s2 = "source: " + event["source"] + "\r\n"
s3 = "detail: " + json.dumps(event["detail"], indent=4, ensure_ascii=False)
send_email(s1 + s2 + s3)
測試 #
建立一個測試事件/情境,可以選擇建立新事件,或是從實際執行事件中擷取做為測試JSON (這比較不推薦,因可能需要先開啟SNS服務擷取部分資料後才知道完整JSON架構)

EventBridge安裝與設定 #
事件匯流排 Event Buses #
這裡主要是提供使用者,用來規劃、自訂事件的分類,或是限定資源的使用等等,這裡拿default來用。
規則 Rules #
建立規則 #
- 設定名稱與類型,這裡類型選擇事件模式(要擷取Pipeline的狀態)。

-
建置事件模式,這裡分為四個區塊 #
-
事件來源,為了搭配CodePipeline,選擇第一項"AWS 事件或 EventBridge 合作夥伴事件"。

-
範例事件,選擇測試情境
(可不選,不影響實際設定,用於第4區塊的事件測試)

-
建立方法
這裡可以依照喜好選擇,最一開始什麼都不知道的推薦"使用模式表單",快速產生一個簡易的JSON。

-
事件模式
決定要使用何種服務/事件類型/狀態,這邊的版面會依據上一區塊的選擇而有所不同,此處展示為"使用模式表單"的畫面。

-
-
選取目標
設定事件發生後,要去執行哪個服務,這裡選擇AWS服務 > Lambda 函數。
若還未建立Lamb da,可先跳過。

-
設定標籤
如同大部分服務都有tag可以設定,可略過。
-
檢閱和建立
確認資料填寫正確後,按建立規則。