showcase-as-raloc

ralocの動作確認

1. ralocアプリテスト手順(AWSコンソールのAPI Gatewayダッシュボードから)

1-1. APIの選択

raloc01.png

1-2. 実行メソッドの選択(ユーザ単位の検索)

raloc02.png

1-3. テスト画面への遷移

raloc03.png

1-4. テスト実行

raloc04.png

1-5. 実行結果確認

raloc05.png

1-6. 実行メソッドの選択(ユーザ+日付指定の検索)

raloc06.png

1-7. テスト実行

raloc07.png

1-8. 実行結果確認

raloc08.png

2. ralocアプリテスト手順(CUIから)

2-1. API呼び出し用のURLの確認

  1. AWSマネジメントコンソールでCloudFormationのダッシュボードからcodedeployの親スタックの名前のリンクを押下

  2. 出力のタブを押下してパラメータを表示させ、curlコマンドの雛形(FindByDateCallSampleおよびFindByUserCallSample)をテキストエディタ等にコピーする
  3. コピーしたcurlコマンドの雛形のUSERNAMEを検索対象とするAWSアカウントのユーザ名に置き換える
  4. FindByDateCallSampleの方のみ、YYYY-MM-DDを検索対象の日付に置き換える

raloc09.png

raloc10.png

2-2. APIキーの確認

  1. AWSマネジメントコンソールでAPI GatewayのダッシュボードからAPI キーを押下
  2. APIキーの名前のリンクを押下
  3. APIキーの項目の右にある表示を押下し、表示されるAPIキーを先ほどコピーしておいたcurlコマンドの雛形のAPIKEYと置き換える

raloc11.png

raloc12.png

2-3. curl呼び出し実行

実行例

$ curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --header "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/Prod1/log/myuser | jq
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   205  100   205    0     0     28      0  0:00:07  0:00:07 --:--:--    53
[
 {
   "username": "myuser",
   "firsttime": "2018-11-26T01:33:06Z",
   "lasttime": "2018-11-26T02:39:43Z"
 },
 {
   "username": "myuser",
   "firsttime": "2018-11-21T00:38:37Z",
   "lasttime": "2018-11-21T01:39:21Z"
 }
]
$ curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --header "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/Prod1/log/myuser/findbydate?Date=2018-11-21 | jq
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   103  100   103    0     0     17      0  0:00:06  0:00:05  0:00:01    22
[
 {
   "username": "myuser",
   "firsttime": "2018-11-21T00:38:37Z",
   "lasttime": "2018-11-21T01:39:21Z"
 }
]
$

3. raloc 関数のCI/CDの確認

3-1. 確認のためのアプリケーション更新シナリオ

  1. 要件
    • APIが返すデータに日付の項目を追加する
  2. 仕様
    • データ構造に”date”を追加する
    • データの中身はlasttimeの値から先頭10文字を抜き出す(YYYY-MM-DDの日付が取得できる)
  3. CI/CD確認のためのポイント
    • CI/CDパイプラインの中で、ビルドのプロセスを実行する際にアプリケーションのテストが含まれている
    • テストでは、アプリケーションが返すデータのデータ構造の項目をチェックしているため、新しく項目を追加する場合テストも変更が必要
    • この確認のシナリオでは、きちんとテストが機能していることも確認する

3-2. アプリケーションの更新(AWSコンソールから実施する例)

  1. CodeCommitのリポジトリを開きます。
  2. Lambda/raloc/raloc.go を開きます。
  3. コードを編集し、コミットします。
    • コードの変更箇所を以下のコード例のように変更
    • 作成者名とEメールアドレスを入力
    • 変更のコミットを押下
  32行目から

  type Auditlog struct {
   Date string `json:"date"`    ←この行を追加
   Username string `json:"username"`
   Firsttime string `json:"firsttime"`
   Lasttime string `json:"lasttime"`
  }

  163(上記追加後は164)行目から

     auditlogs = append(auditlogs, Auditlog{
       Date: record[2][0:10],    ←この行を追加
       Username: record[0],
       Firsttime: record[1],
       Lasttime: record[2],
     })

cicd-test01.png

3-3. パイプラインでエラーが出るのを確認

  1. AWSマネジメントコンソールでCodePipelineを開き、パイプラインの名前を押下します。
    • コミット完了後、少し(およそ1分間隔で状態のポーリングが発生するので最大1分程度)時間が経過するとパイプラインが動作を開始します
  2. パイプラインのビルド実行時にエラーが発生するのを確認します。

cicd-test02.png

3-4. (オプション)パイプライン失敗の原因の調査

  1. 先ほどの失敗の画面から、詳細のリンクを押下
  2. ダイアログが表示されるので、実行の詳細へのリンクを押下

cicd-test03.png

3.画面下のビルドログを調査(以下にログを抜粋)

~~~略~~~
[Container] 2018/11/27 08:55:28 Running command go test
2018/11/27 08:55:29 version: , revision:
2018/11/27 08:55:29 raloc: body: [{"date":"","username":"John","firsttime":"2018-11-26T09:55:29Z","lasttime":"2018-11-26T07:55:29Z"},{"date":"","username":"John","firsttime":"2018-11-25T09:55:29Z","lasttime":"2018-11-25T07:55:29Z"},{"date":"","username":"John","firsttime":"2018-11-24T09:55:29Z","lasttime":"2018-11-24T07:55:29Z"}]
2018/11/27 08:55:29 version: , revision:
2018/11/27 08:55:29 auditlogs in findByDateMock: [{ John 2018-11-27T07:55:29Z 2018-11-27T09:55:29Z}]
2018/11/27 08:55:29 raloc: body: [{"date":"","username":"John","firsttime":"2018-11-27T07:55:29Z","lasttime":"2018-11-27T09:55:29Z"}]
--- FAIL: TestHandler (0.00s)
 handler_test.go:108: An undefined field 'Date' is in a struct of Auditlog
 handler_test.go:108: An undefined field 'Date' is in a struct of Auditlog
 handler_test.go:108: An undefined field 'Date' is in a struct of Auditlog
 handler_test.go:108: An undefined field 'Date' is in a struct of Auditlog
FAIL
exit status 1
FAIL Lambda/raloc 0.005s
 [Container] 2018/11/27 08:55:29 Command did not exit successfully go test exit status 1
[Container] 2018/11/27 08:55:29 Phase complete: POST_BUILD Success: false
[Container] 2018/11/27 08:55:29 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: go test. Reason: exit status 1
~~~略~~~

3-5. テストコードの更新(AWSコンソールから実施する例)

  1. CodeCommitのリポジトリを開きます。
  2. Lambda/raloc/handler_test.go を開きます。
  3. コードを編集し、コミットします。
    • コードの変更箇所を以下のコード例のように変更
    • 作成者名とEメールアドレスを入力
    • 変更のコミットを押下
21行目
  result := Auditlog{Username: iamuser, Firsttime: firsttime, Lasttime: lasttime}
以下に変更
  result := Auditlog{Date: firsttime[0:10], Username: iamuser, Firsttime: firsttime, Lasttime: lasttime}

33行目
  l := Auditlog{Username: iamuser, Firsttime: firsttime, Lasttime: lasttime}
以下に変更
  l := Auditlog{Date: firsttime[0:10], Username: iamuser, Firsttime: firsttime, Lasttime: lasttime}

107行目
  case "Username", "Firsttime", "Lasttime": break
以下に変更
  case "Date", "Username", "Firsttime", "Lasttime": break

3-6. パイプラインが正常に実行されるのを確認

  1. AWSマネジメントコンソールでCodePipelineを開き、パイプラインの名前を押下します。
    • コミット完了後、少し(およそ1分間隔で状態のポーリングが発生するので最大1分程度)時間が経過するとパイプラインが動作を開始します
  2. 今度は正常にDeployまで完了するのを確認します。
  3. アプリケーションを実行して変更が反映されているのを確認します。

cicd-test04.png

実行確認

$ curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --header "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/Prod1/log/myuser | jq
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   245  100   245    0     0     33      0  0:00:07  0:00:07 --:--:--    61
[
 {
   "date": "2018-11-26",
   "username": "myuser",
   "firsttime": "2018-11-26T01:33:06Z",
   "lasttime": "2018-11-26T02:39:43Z"
 },
 {
   "date": "2018-11-21",
   "username": "myuser",
   "firsttime": "2018-11-21T00:38:37Z",
   "lasttime": "2018-11-21T01:39:21Z"
 }
]
$ curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --header "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/Prod1/log/myuser/findbydate?Date=2018-11-21 | jq
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   123  100   123    0     0     20      0  0:00:06  0:00:05  0:00:01    25
[
 {
   "date": "2018-11-21",
   "username": "myuser",
   "firsttime": "2018-11-21T00:38:37Z",
   "lasttime": "2018-11-21T01:39:21Z"
 }
]
$

3-7. (オプション)パイプライン失敗の時とのBuild動作の違いをログで確認する

  1. Buildの項目の詳細のリンクを押下

cicd-test05.png 2.画面下のビルドログを参照(以下にログを抜粋)

~~~略~~~
[Container] 2018/11/28 01:15:08 Running command go test
2018/11/28 01:15:09 version: , revision:
2018/11/28 01:15:09 raloc: body: [{"date":"2018-11-27","username":"John","firsttime":"2018-11-27T02:15:09Z","lasttime":"2018-11-27T00:15:09Z"},{"date":"2018-11-26","username":"John","firsttime":"2018-11-26T02:15:09Z","lasttime":"2018-11-26T00:15:09Z"},{"date":"2018-11-25","username":"John","firsttime":"2018-11-25T02:15:09Z","lasttime":"2018-11-25T00:15:09Z"}]
2018/11/28 01:15:09 version: , revision:
2018/11/28 01:15:09 auditlogs in findByDateMock: [{2018-11-28 John 2018-11-28T00:15:09Z 2018-11-28T02:15:09Z}]
2018/11/28 01:15:09 raloc: body: [{"date":"2018-11-28","username":"John","firsttime":"2018-11-28T00:15:09Z","lasttime":"2018-11-28T02:15:09Z"}]
PASS
ok Lambda/raloc 0.005s
~~~略~~~