AWS Lambda의 Slack 연동 기능을 사용하여 EC2 인스턴스의 시작 상태를 Slack에서 확인할 수 있습니다.
Slack-echo-command와 Cloudwatch-alarm-to-slack의 두 종류가 있습니다. .
할 일은 다음과 같습니다.
*가 붙어 있는 부분에 대해서는, 클래스 메소드씨의 블로그 「 【신기능】AWS Lambda에 Slack 제휴의 BluePrint가 등장. ChatOps가 더 쉽게 」를 참고로 했으므로, 이번은 할애하고 싶습니다.
Lambda 함수 만들기
이번에는 Python으로 작성하고 싶습니다.
blueprint "slack-echo-command-python"을 선택하십시오.
slack_aws.py
# -*- coding: utf-8 -*-
import boto3
from base64 import b64decode
from urlparse import parse_qs
import logging
ENCRYPTED_EXPECTED_TOKEN = "***" # Enter the base-64 encoded, encrypted Slack command token (CiphertextBlob)
kms = boto3.client('kms')
expected_token = kms.decrypt(CiphertextBlob = b64decode(ENCRYPTED_EXPECTED_TOKEN))['Plaintext']
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
req_body = event['body']
params = parse_qs(req_body)
token = params['token'][0]
if token != expected_token:
logger.error("Request token (%s) does not match exptected", token)
raise Exception("Invalid request token")
command_text = params['text'][0]
instances_info = ""
if command_text == "instances":
for reservation in boto3.client('ec2').describe_instances()["Reservations"]:
for instance in reservation["Instances"]:
instances_info = instances_info + instance["InstanceId"] + "->" + instance["State"]["Name"] + " "
return instances_info
IAM 역할 만들기
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1448895482556",
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:ap-northeast-1:894357485438:key/xxxxxxxx"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
테스트
위와 같이 Slash 명령을 두드리면,
처럼 인스턴스 ID와 상태를 반환합니다.
/aws 뒤에 오는 문자열이 command_text 에 들어오므로 그 내용에 따라 반환하는 정보를 변경해 주면 AWS 의 다양한 정보를 Slack 에서 확인할 수 있게 됩니다!
도전
1) 타임 아웃 대응
가끔 아래와 같이 타임 아웃이 발생합니다.
조사해 보면, 3,000ms 이상 경과하면 타임 아웃이 되는 모양. ( stackoverflow )
대응하려고 생각하면 할 수 있는 것 같아서, 언젠가 하려고 합니다.
2) Slack 에 표시하는 인스턴스 정보의 개행
개행 문자를 돌려주는 것만으로는 좋지 않았습니다.
대응 방법 아시는 분은 가르쳐 주셨으면합니다.
요약
여러가지 모르는 곳도 있습니다만, Lambda 를 사용하는 것으로 간단하게 ChatOps 환경을 만들 수 있다고 생각합니다.
다음은 Cloudwatch-alarm-to-slack을 사용하여 무언가를 해보고 싶습니다.
Reference
이 문제에 관하여(AWS Lambda의 Slack 연동 기능을 사용하여 EC2 인스턴스의 시작 상태를 Slack에서 확인할 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ketancho/items/41ccf435c6fcc324b1e1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)