API Gateway & Lambda를 사용하여 Serverless에 JIRA 티켓 생성
10333 단어 람다jiraserverlessAPIGateway
소개
사내용 문의 폼을 쇄신함에 있어서, 지금까지 Google 폼으로 하고 있던 것을 AWS에 이관하기로 했습니다.
그 작업의 비망록입니다.
시스템 구성도
이 기사의 범위
메인은 API Gateway·Lambda(Python3.7)·JIRA API의 제휴에 대해서입니다.
S3에는 입력 폼용의 파일을 두고, API Gateway에 POST로 리퀘스트할 뿐이므로 이번 기사에서는 생략합니다.
또, VPC·NAT 게이트웨이에 대해서도 본 기사에서는 접하지 않으므로 다른 분의 기사를 참고로 해 주세요.
1. Lambda Function 만들기
API Gateway를 만들 때 지정해야하므로 먼저 여기에서 만듭니다.
1-1. 로컬 환경 구축
JIRA 티켓 작성을 위해 JIRA 모듈을 넣어야합니다. 또 JIRA 모듈을 넣기 위해서 pip를 사용하고 싶습니다만, Python3계에 pip가 없기 때문에 별도 넣고 있습니다.
※docker는 미리 설치 부탁드립니다
$ mkdir jira_function
$ cd jira_function
$ docker run --rm -it -v `pwd`:/lambda amazonlinux /bin/bash
# yum -y install vi zip gcc python3-devel zlib-devel libffi-devel
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# python3 get-pip.py
# pip install jira -t /lambda
# exit
1-2. jira_function.py 만들기
1-1에서 작성한 jira_function 디렉토리 아래에 작성합니다.
jira_function.py# -*- coding: utf-8 -*
from jira import JIRA
from jira.exceptions import JIRAError
import json
import os
import requests
def jira_handler(event, context):
# get environment value
jira_options = {'server': os.environ["JIRA_URL"]}
jira_user = os.environ["JIRA_USER"]
jira_pass = os.environ["JIRA_PASS"]
# JIRA Login
try:
jira = JIRA(options=jira_options, basic_auth=(jira_user, jira_pass))
except JIRAError as e:
return { "status" : "JIRA Login Failed." }
# Create New Issue
new_issue = jira.create_issue(
project=os.environ["JIRA_PROJECT"],
summary=event['summary'], # API GatewayからJIRAチケットのタイトルをもらう
description=event['desc'], # API GatewayからJIRAチケットの詳細文をもらう
issuetype={'name':os.environ["JIRA_ISSUE_TYPE"]}
)
return { "status" : "finished" }
1-3. zip 만들기
$ cd jira_function
$ zip -r ../jira_function.zip *
1-4. 콘솔에서 생성
서비스에서 AWS Lambda를 선택하고 함수 생성을 클릭합니다.
함수명을 적당히 입력해, 이번은 런타임에 Python3.7을 지정. 오른쪽 하단의 함수 만들기를 클릭합니다.
코드 항목 유형을 '.zip 파일 업로드'를 선택하고 '업로드'에서 1-3으로 만든 zip 업로드
1-5. Lambda Function 테스트
오른쪽 상단의 "테스트"를 누르면 모달이 시작됩니다.
이벤트명은 적절히 붙이고, 코드를 이하에 수정한다
{
"summary": "test summary",
"desc": "test desc"
}
이제 준비가 되었으므로 다시 오른쪽 상단의 "테스트"를 누르십시오.
안전 티켓이 만들어졌습니다.
2. API Gateway 만들기
방금 만든 Lambda Function을 호출하는 API Gateway를 만듭니다.
2-1. 콘솔에서 생성
서비스에서 API Gateway를 선택하고 API 만들기를 클릭합니다.
API 이름을 입력하고 API 만들기를 클릭합니다.
액션에서 리소스 만들기를 선택하고 리소스 이름을 입력한 후 오른쪽 하단의 리소스 만들기 버튼을 클릭합니다.
"액션"에서 "메소드 만들기"를 선택하고 드롭다운 목록에서 "POST"를 선택한 후 바로 오른쪽의 체크 버튼을 클릭합니다.
1에서 만든 람다 기능을 지정하고 저장을 클릭합니다.
권한 추가 대화 상자가 표시되므로 확인을 클릭합니다.
2-2. API Gateway로 전달된 파라미터를 Lambda에 전달하는 설정
통합 요청을 클릭
"맵핑 템플릿"을 눌러 Content-Type에 application/json
를 입력 한 후 확인 버튼을 클릭하십시오.
코드에 다음을 씁니다.
{
"summary" : "$input.params('summary')",
"desc" : "$input.params('desc')"
}
2-3. API Gateway→Lambda 테스트
이전 화면으로 돌아가서 "테스트"를 클릭하십시오.
POST 요청 매개변수는 '쿼리 문자열' 열에 GET 매개변수와 같이 작성하여 요청할 수 있습니다.
그래서 쿼리 문자열 열에 다음을 입력하십시오.
summary=test summary2&desc=test desc2
하단의 "테스트"를 클릭하면
안전 티켓이 만들어졌습니다.
그리고는 적당한 폼을 HTML로 작성해, API Gateway의 엔드 포인트에 POST하면 문의 폼의 완성입니다만 이 부분은 최초로도 말했듯이 생략합니다.
Reference
이 문제에 관하여(API Gateway & Lambda를 사용하여 Serverless에 JIRA 티켓 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mu-naka/items/9ad7f509e697e83c2987
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 기사의 범위
메인은 API Gateway·Lambda(Python3.7)·JIRA API의 제휴에 대해서입니다.
S3에는 입력 폼용의 파일을 두고, API Gateway에 POST로 리퀘스트할 뿐이므로 이번 기사에서는 생략합니다.
또, VPC·NAT 게이트웨이에 대해서도 본 기사에서는 접하지 않으므로 다른 분의 기사를 참고로 해 주세요.
1. Lambda Function 만들기
API Gateway를 만들 때 지정해야하므로 먼저 여기에서 만듭니다.
1-1. 로컬 환경 구축
JIRA 티켓 작성을 위해 JIRA 모듈을 넣어야합니다. 또 JIRA 모듈을 넣기 위해서 pip를 사용하고 싶습니다만, Python3계에 pip가 없기 때문에 별도 넣고 있습니다.
※docker는 미리 설치 부탁드립니다
$ mkdir jira_function
$ cd jira_function
$ docker run --rm -it -v `pwd`:/lambda amazonlinux /bin/bash
# yum -y install vi zip gcc python3-devel zlib-devel libffi-devel
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# python3 get-pip.py
# pip install jira -t /lambda
# exit
1-2. jira_function.py 만들기
1-1에서 작성한 jira_function 디렉토리 아래에 작성합니다.
jira_function.py# -*- coding: utf-8 -*
from jira import JIRA
from jira.exceptions import JIRAError
import json
import os
import requests
def jira_handler(event, context):
# get environment value
jira_options = {'server': os.environ["JIRA_URL"]}
jira_user = os.environ["JIRA_USER"]
jira_pass = os.environ["JIRA_PASS"]
# JIRA Login
try:
jira = JIRA(options=jira_options, basic_auth=(jira_user, jira_pass))
except JIRAError as e:
return { "status" : "JIRA Login Failed." }
# Create New Issue
new_issue = jira.create_issue(
project=os.environ["JIRA_PROJECT"],
summary=event['summary'], # API GatewayからJIRAチケットのタイトルをもらう
description=event['desc'], # API GatewayからJIRAチケットの詳細文をもらう
issuetype={'name':os.environ["JIRA_ISSUE_TYPE"]}
)
return { "status" : "finished" }
1-3. zip 만들기
$ cd jira_function
$ zip -r ../jira_function.zip *
1-4. 콘솔에서 생성
서비스에서 AWS Lambda를 선택하고 함수 생성을 클릭합니다.
함수명을 적당히 입력해, 이번은 런타임에 Python3.7을 지정. 오른쪽 하단의 함수 만들기를 클릭합니다.
코드 항목 유형을 '.zip 파일 업로드'를 선택하고 '업로드'에서 1-3으로 만든 zip 업로드
1-5. Lambda Function 테스트
오른쪽 상단의 "테스트"를 누르면 모달이 시작됩니다.
이벤트명은 적절히 붙이고, 코드를 이하에 수정한다
{
"summary": "test summary",
"desc": "test desc"
}
이제 준비가 되었으므로 다시 오른쪽 상단의 "테스트"를 누르십시오.
안전 티켓이 만들어졌습니다.
2. API Gateway 만들기
방금 만든 Lambda Function을 호출하는 API Gateway를 만듭니다.
2-1. 콘솔에서 생성
서비스에서 API Gateway를 선택하고 API 만들기를 클릭합니다.
API 이름을 입력하고 API 만들기를 클릭합니다.
액션에서 리소스 만들기를 선택하고 리소스 이름을 입력한 후 오른쪽 하단의 리소스 만들기 버튼을 클릭합니다.
"액션"에서 "메소드 만들기"를 선택하고 드롭다운 목록에서 "POST"를 선택한 후 바로 오른쪽의 체크 버튼을 클릭합니다.
1에서 만든 람다 기능을 지정하고 저장을 클릭합니다.
권한 추가 대화 상자가 표시되므로 확인을 클릭합니다.
2-2. API Gateway로 전달된 파라미터를 Lambda에 전달하는 설정
통합 요청을 클릭
"맵핑 템플릿"을 눌러 Content-Type에 application/json
를 입력 한 후 확인 버튼을 클릭하십시오.
코드에 다음을 씁니다.
{
"summary" : "$input.params('summary')",
"desc" : "$input.params('desc')"
}
2-3. API Gateway→Lambda 테스트
이전 화면으로 돌아가서 "테스트"를 클릭하십시오.
POST 요청 매개변수는 '쿼리 문자열' 열에 GET 매개변수와 같이 작성하여 요청할 수 있습니다.
그래서 쿼리 문자열 열에 다음을 입력하십시오.
summary=test summary2&desc=test desc2
하단의 "테스트"를 클릭하면
안전 티켓이 만들어졌습니다.
그리고는 적당한 폼을 HTML로 작성해, API Gateway의 엔드 포인트에 POST하면 문의 폼의 완성입니다만 이 부분은 최초로도 말했듯이 생략합니다.
Reference
이 문제에 관하여(API Gateway & Lambda를 사용하여 Serverless에 JIRA 티켓 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mu-naka/items/9ad7f509e697e83c2987
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
API Gateway를 만들 때 지정해야하므로 먼저 여기에서 만듭니다.
1-1. 로컬 환경 구축
JIRA 티켓 작성을 위해 JIRA 모듈을 넣어야합니다. 또 JIRA 모듈을 넣기 위해서 pip를 사용하고 싶습니다만, Python3계에 pip가 없기 때문에 별도 넣고 있습니다.
※docker는 미리 설치 부탁드립니다
$ mkdir jira_function
$ cd jira_function
$ docker run --rm -it -v `pwd`:/lambda amazonlinux /bin/bash
# yum -y install vi zip gcc python3-devel zlib-devel libffi-devel
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# python3 get-pip.py
# pip install jira -t /lambda
# exit
1-2. jira_function.py 만들기
1-1에서 작성한 jira_function 디렉토리 아래에 작성합니다.
jira_function.py
# -*- coding: utf-8 -*
from jira import JIRA
from jira.exceptions import JIRAError
import json
import os
import requests
def jira_handler(event, context):
# get environment value
jira_options = {'server': os.environ["JIRA_URL"]}
jira_user = os.environ["JIRA_USER"]
jira_pass = os.environ["JIRA_PASS"]
# JIRA Login
try:
jira = JIRA(options=jira_options, basic_auth=(jira_user, jira_pass))
except JIRAError as e:
return { "status" : "JIRA Login Failed." }
# Create New Issue
new_issue = jira.create_issue(
project=os.environ["JIRA_PROJECT"],
summary=event['summary'], # API GatewayからJIRAチケットのタイトルをもらう
description=event['desc'], # API GatewayからJIRAチケットの詳細文をもらう
issuetype={'name':os.environ["JIRA_ISSUE_TYPE"]}
)
return { "status" : "finished" }
1-3. zip 만들기
$ cd jira_function
$ zip -r ../jira_function.zip *
1-4. 콘솔에서 생성
서비스에서 AWS Lambda를 선택하고 함수 생성을 클릭합니다.
함수명을 적당히 입력해, 이번은 런타임에 Python3.7을 지정. 오른쪽 하단의 함수 만들기를 클릭합니다.
코드 항목 유형을 '.zip 파일 업로드'를 선택하고 '업로드'에서 1-3으로 만든 zip 업로드
1-5. Lambda Function 테스트
오른쪽 상단의 "테스트"를 누르면 모달이 시작됩니다.
이벤트명은 적절히 붙이고, 코드를 이하에 수정한다
{
"summary": "test summary",
"desc": "test desc"
}
이제 준비가 되었으므로 다시 오른쪽 상단의 "테스트"를 누르십시오.
안전 티켓이 만들어졌습니다.
2. API Gateway 만들기
방금 만든 Lambda Function을 호출하는 API Gateway를 만듭니다.
2-1. 콘솔에서 생성
서비스에서 API Gateway를 선택하고 API 만들기를 클릭합니다.
API 이름을 입력하고 API 만들기를 클릭합니다.
액션에서 리소스 만들기를 선택하고 리소스 이름을 입력한 후 오른쪽 하단의 리소스 만들기 버튼을 클릭합니다.
"액션"에서 "메소드 만들기"를 선택하고 드롭다운 목록에서 "POST"를 선택한 후 바로 오른쪽의 체크 버튼을 클릭합니다.
1에서 만든 람다 기능을 지정하고 저장을 클릭합니다.
권한 추가 대화 상자가 표시되므로 확인을 클릭합니다.
2-2. API Gateway로 전달된 파라미터를 Lambda에 전달하는 설정
통합 요청을 클릭
"맵핑 템플릿"을 눌러 Content-Type에 application/json
를 입력 한 후 확인 버튼을 클릭하십시오.
코드에 다음을 씁니다.
{
"summary" : "$input.params('summary')",
"desc" : "$input.params('desc')"
}
2-3. API Gateway→Lambda 테스트
이전 화면으로 돌아가서 "테스트"를 클릭하십시오.
POST 요청 매개변수는 '쿼리 문자열' 열에 GET 매개변수와 같이 작성하여 요청할 수 있습니다.
그래서 쿼리 문자열 열에 다음을 입력하십시오.
summary=test summary2&desc=test desc2
하단의 "테스트"를 클릭하면
안전 티켓이 만들어졌습니다.
그리고는 적당한 폼을 HTML로 작성해, API Gateway의 엔드 포인트에 POST하면 문의 폼의 완성입니다만 이 부분은 최초로도 말했듯이 생략합니다.
Reference
이 문제에 관하여(API Gateway & Lambda를 사용하여 Serverless에 JIRA 티켓 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mu-naka/items/9ad7f509e697e83c2987
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"summary" : "$input.params('summary')",
"desc" : "$input.params('desc')"
}
summary=test summary2&desc=test desc2
Reference
이 문제에 관하여(API Gateway & Lambda를 사용하여 Serverless에 JIRA 티켓 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mu-naka/items/9ad7f509e697e83c2987텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)