JAWS-UG 初心者支部＆千葉支部 #26 新人さん歓迎！ハンズオン&LT(オンライン) 

###0. はじめに感謝の気持ちを伝えさせて下さい！
- 世界中で[非常事態宣言](https://ja.wikipedia.org/wiki/%E9%9D%9E%E5%B8%B8%E4%BA%8B%E6%85%8B%E5%AE%A3%E8%A8%80)が発動されているという緊迫した状況にも関わらず、オンライン開催を実行されたスタッフさんの俊敏性が素晴らしい！と感じた[勉強会](https://jawsug-bgnr.connpass.com/event/172979/?utm_campaign=event_message_to_selected_participant&utm_source=notifications&utm_medium=email&utm_content=title_link)でした。:clap:

- いま一番興味あるテーマの**サーバーレス＆Web API**をAWSさんの解説付きでハンズオンできるチャンスでしたので、モクモクさせていただきました。どうもありがとうございます。

- 資料は[こちら](https://speakerdeck.com/ketancho/jaws-ug-bgnr-24-serverless-quick-start-hands-on)に公開されています。本メモでは「忘れちゃいけないな」と思った3つの点について、資料を一部使用させていただきましたこと、お許し下さい。:bow:

###1. マスターすると決めた種目は、誰かへちゃんと説明できるまでのレベルを目指そう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/b5708daa-ccfe-5fbc-f766-e21e657caaff.png)

###2. やらなくてことを止めて、やるべきことに集中しよう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/03af6237-1c9f-6540-69d4-43902132a2ac.png)

###3. うぉーーー、サーバーレスの時代にインフラエンジニアの仕事はない！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/4ee15ffc-fcd6-546e-7abc-f87923fb2b0c.png)


###4. 翻訳Web API（RESTでJapaneseをEnglishに翻訳します）
- 興味のあるAPI Gatewayを使ったハンズオン2についてメモしておきます。（ハンズオンは3個ありましたが時間内にハンズオン3が完遂できなかったので、翌朝モクモクしてみました）

- 東京リージョンを使いましたがターンアラウンドタイムがとても早いなと体感できます。

- URLにクエリ文字列（翻訳したい文字列）を入れて、作ったAPIGatewayへリクエストを飛ばすと、Englishでレスポンスが返ってきます（おかえり:grin:）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/349e92f4-0591-0b31-08e4-a20b7e67edc9.png)

- 処理フローの内容を文字にすると...
GETリクエスト➡️APIGateway➡️Lambda（python+AWStranslate）➡️レスポンス200

- API Gatewayのマネコンで確認するとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280358/4834eeb7-f4f8-602b-0f20-ab6068b00f81.png)

###5. 翻訳した結果についてDynamoDBに格納する
- 宿題のハンズオン2の+αに挑戦した時のLambda関数のコードです。

```
import boto3
import datetime
import json

def lambda_handler(event, context):

    # translateリソースを作成
    translate = boto3.client('translate')

　＃ URLから入力された日本語文字列をイベントとし、input_text変数に格納
    input_text = event['queryStringParameters']['input_text']

    # translate_textメソッドでinput_text変数の日本語（ja）を英語（en）へ翻訳
    response = translate.translate_text(
        Text=input_text,
        SourceLanguageCode='ja',
        TargetLanguageCode='en'
    )

    # 翻訳した英語をoutput_text変数に格納
    output_text = response['TranslatedText']

    # dynamoDBリソースを作成
    dynamodb = boto3.resource('dynamodb')

    # tableリソースを作成
    table = dynamodb.Table('TranslateHistory')

    # tableリソースへデータ登録（テーブルはCLIで事前に作成済み）
    table.put_item(
        Item = {
            'date': datetime.datetime.now().strftime("%Y%m%d"),
            'time': datetime.datetime.now().strftime("%H%M%S"),
            'from': input_text,
            'to': output_text
        })

    # クライアント（ブラウザ）への戻り値
    return {
        'statusCode': 200,
        'body': json.dumps({
            'output_text': output_text
        })
    }
```

###6. Next Action
- 正確に理解できていないキーワードをトリガーにPythonとLambdaをモクモク。
 - [boto3](https://aws.amazon.com/jp/sdk-for-python/)=Python用のSDK。
ちなみに[boto](https://github.com/boto/boto3/issues/1023)の由来はAmazonのエンジニアが回答しています（アマゾンにいる🐬）
 - [handler](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-handler.html)=pythonの関数のことをハンドラーと呼んでいる。
 - [event](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html)
 - [context](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-context.html)オブジェクト

###最後に
- 自動化や人の役に立つアプリケーションを開発することを目標に日々モクモクしている感じです。そんな時にとっても有意義なセミナーを創っていただいた初心者支部のスタッフさんとAWS金澤さんに感謝です。:grinning:

- Next Actionが進めて本記事を少しずつ更新したいと思います。