#はじめに
社内用問い合わせフォームを刷新するにあたり、今まで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ディレクトリ配下に作成します。
# -*- 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の作成」をクリック
「アクション」から「リソースの作成」を選択してリソース名を入力後、右下の「リソースを作成」ボタンをクリック
「アクション」から「メソッドの作成」を選択してドロップダウンリストから「POST」を選択後、すぐ右のチェックボタンをクリック
1で作成したLambda Functionを指定して保存をクリック
###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すれば問い合わせフォームの完成ですがこの部分は最初にも述べた通り割愛します。