Serverless Framework + TypeScriptでAPI Gatewayを作成する

タイトルにあるように、Severless FrameworkとTypeScriptでAPI Gatewayを使ったAPIを作成する手順になります。
HTTPのリクエストはAPI Gatewayが受けて、裏の処理を行うLambdaをTypeScriptで書く形となります。

以下、手順です。
なお、Serverless Frameworkを作業するローカルフォルダにインストールしたため、通常のServerless Frameworkの使い方とは異なっています。
グローバル領域にServerless Frameworkをインストールする場合は、Serverless Frameworkを実行するコマンドを適時置き換えてください。

作成手順

Serverless Frameworkのインストール

$ npm install serverless

$ ./node_modules/.bin/serverless --version
1.24.1

テンプレート作成

$ ./node_modules/.bin/serverless create -t aws-nodejs-typescript

package.jsonにServerless Frameworkを追記。
(これを行わなと次のコマンドでローカルにインストールしたServerless Frameworkが消えるため)
(グローバル領域にServerless Frameworkをインストールする場合は不要)

package.jsonに記載されたライブラリをインストール。

$ npm install

serverless.ymlの編集

(この手順はお好みの値で。やらなくてもOK。)providerに以下を追加。

provider:
  (中略 ここはデフォルト)
  stage: dev
  region: ap-northeast-1
  profile: default

デプロイ

デプロイしようとすると以下のエラーが発生する。

Cannot find name 'AsyncIterator'.

tsconfig.jsonのcompilerOptionsに以下を追加する。

"lib": ["es6", "dom", "esnext"]

参考サイトは
Cannot find name 'AsyncIterator' error in Typescript compilation process. · Issue #83 · apollographql/graphql-subscriptions · GitHub


上記を追加した後でデプロイ。

$ ./node_modules/.bin/serverless deploy

デプロイできたら、curlなどでGETできることを確認してください。

$ curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/hello
"message":"Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!"(以降略)

今回作成したもの

今回作成したものは以下になります。
GitHub - SrcHndWng/aws-nodejs-typescript-sample

API GatewayをGolangで作成する方法について調べてみた

AWSのLambdaは現時点ではGolangは公式にサポートされていないです。
ということで、サーバレスなAPIGolangで作成する方法について調べてみました。


いくつかの方法がありましたが、結果的には以下の記事にある方法が、自分には一番分かりやすかったです。
https://developer.capitalone.com/blog-post/building-a-serverless-rest-api-in-go/


やり方としては

  • Apexを使ってGolangでLambdaを実装してデプロイする
  • API Gatewayは手動(もしくはコマンドで)で設定する

となります。


ほぼこの記事の方法で出来たのですが、いくつか引っかかったところがあったのでメモっておきます。

珠玉のプログラミング 第一部の問題をやってみて

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

「珠玉のプログラミング」の第一部を読み、問題のいくつかを実際に解いてみました。
以下、チラ裏レベルの感想などなど。。。

  • コラム1
    • 数値をビット列にした場合の扱いやすさが印象的だった。golangで実装したので、ビット列はbyteのスライスにしたが。
    • 「ビット列は『限られた範囲内にあり、密で、重複がなく、付随する情報も無いようなデータのセット』を表すのに有効」。
    • 回答とはだいぶ異なる実装となった。
  • コラム2
    • 「名前の印(シグナチャー)」と二分探索木の有効性が良く分かった。
    • 生データからプログラム内で扱い易い形の「シグナチャー」を生成して、シグナチャーを参照して検索を行う、という流れは、一つのパターンとして覚えておきたい。(今までも無意識で行っていたけど・・・)
  • コラム3
    • データ構造の重要性について説明している。この事については、常々意識している。
  • コラム4
    • 「問題の定義、アルゴリズムのデザイン、データ構造の選択、です。」「これらをきちんとしておけば、正しいコードを書くことは、大抵の場合、やさしいのです。」
    • 「プログラムの検証」については、今の時代だとユニットテストで行うかな・・・。
  • コラム5
    • この辺りの問題も、今の時代だとユニットテストを導入することで解決を図るかな・・・、と。

解いたソースはこちらです。
GitHub - SrcHndWng/go-learning-programming-pearls at part-1.0.0

SourceTreeで別アカウントのリポジトリにPushする方法

タイトルにあるように、SourceTreeで普段使っているのとは別のアカウントのGitにpushする方法についてです。
なお、SourceTreeのMac版での話となります。

  1. 右上の「設定」を押下し、「リモート」タブを選択する。
  2. 「追加」を押下し、「リモートの名前」「URL/パス」を入力する。「URL/パス」には「https://ユーザ名@github.com/・・・」となるようにする。ユーザ名をURLに入れると、下の「ユーザ名」欄に自動的に表示される。
  3. 「高度な設定」タブを選択する。
  4. 「グローバルユーザー設定を使う」のチェックボックスを外し、「名前」「メールアドレス」を入れる。「メールアドレス」を入れないと、使用しているマシンのユーザ名がコミット時に使用されてしまうようです。

以上です。

Visual Studio CodeでGo言語(golang)のユニットテストをデバッグする

タイトルにあるように、Visual Studio CodeでGolangユニットテストを実行してデバッグする方法についてです。
とは言っても、ほとんどデバッグ時の設定手順と同じですが・・・。

デバッグ時の設定手順

  1. メニューバーの「Debug」より「Open Configurations」か「Add Configurations」を選ぶ。
  2. launch.jsonが開く。
  3. 「mode」の値を「test」に変更して保存する。
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "test",
  1. F5を押し、デバッグを実行する。

以上です。

Visual Studio CodeでGo言語(golang)のユニットテストを実行する

例によって忘れないための備忘録です。
Visual Studio CodeにGo with Visual Studio Codeが入っていることが前提です。

手順

  1. ユニットテストのファイル(〜_test.go)を作成する。
  2. commnad + shift + p などでコマンドパレットを起動する。
  3. 「Go: Test File」を選択する。

これでユニットテストが実行されると思います。

Visual Studio CodeでGo言語(golang)のデバッグをするときの設定

タイトルの件について、いつも忘れるからメモ。
Visual Studio Codeのバージョンによって違うかも。

デバッグ時の設定手順

  1. メニューバーの「Debug」より「Open Configurations」か「Add Configurations」を選ぶ。
  2. launch.jsonが開く。
  3. その中に設定を記述する。例えばデバッグ時に起動引数を渡したい場合は「args」の項目に渡したい値を設定する。
  4. デバッグを実行する。