ようへいの日々精進XP

よかろうもん

2017 年 06 月 14 日(水)

ジョギング

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

kazukin

かずきんと香椎で呑んだ。

数少ないかもしれない、同年代で異業種の友人で色々と語り合った。

二軒目に寄った場末のスナックではっちゃけてるかずきんに昭和の匂いを感じた(笑

2017 年 06 月 12 日(月)

今日も

Bluetooth キーボードと Nexus7 で日記を書いてみる。

ジョギング

テンポよく走っているお兄さんを追っ掛けていたので多少オーバーペースになった。

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

しば漬け

奥さんがキューピー三分クッキングを見ながら作ったしば漬けを色々な食べ方で食べている。

バッファローの折り畳み式キーボード(BSKBB15BK)試用メモ

はじめに

f:id:inokara:20170611212027j:plain

スマフォ用にバッファローの折り畳み式キーボードを購入した。ヨドバシカメラ博多店で 2000 円也。

簡単に試用メモを書いてみる。

そもそもどんな製品か?

http://m.buffalo.jp/product/input/keyboard/bskbb15/

使ってみた感じ

打鍵感

値段相応だけど、特に打ちづらいということはなくサクサク入力出来ている。

キーボードの配列は残念ながら US 配列なので日本語入力の際には注意が必要。

端末とのペアリング

Galaxy S6 Edge とペアリングさせたけど、速攻で繋がって嬉しかった。

ケースが嬉しい

キーボードを納めているケースがそのままスタンドになるので嬉しい。

その他

ESC キーでスマフォロックが出来るのが嬉しい。

tips

入力言語の切り替え

Shift + Space でいける。

アプリの切り替え

Alt + Tab もしくは Win + Tab でいける。

コピペ

普通に Ctrl + c と Ctrl + v でいける。

Caps Lock と Ctrl キーを入れ替える

以下のアプリを入れて対応した。

2017 年 06 月 11 日(日)

昨晩のつけ

軽い二日酔いで辛い。

1P とおやまつさん

PHP カンファレンスに来ていた同僚の 1P さんとおやまつさんの三人で博多駅のほろ酔い横丁でお寿司をつまみながら昼呑み。

業務で直接からむことはないけど、色々と楽しい話を聞けたので良かった。

スマフォ用に Bluetooth キーボードを買った

以前から欲しかったスマフォ用のキーボードをヨドバシで購入した。2000 円也。

http://m.buffalo.jp/product/input/keyboard/bskbb15/

Galaxy S6 Edge とも特に難しい設定は必要なくサクッと繋がった。配列が英語配列なので慣れは必要かもしれないけどなかなか快適。

2017 年 6 月 10 日(土)

ジョギング

  • 香椎浜 x 2.5 周

  • 走り始めたら気持ちが良かったので少し多目に走ってみた

午後からは

気になっていた事の調査、検証等を行う。

夕飯

久しぶりによし本の千ベロセットと天ぷら盛り合わせ。コスパ最高。

帰り際に酒屋でお水とか買っていたら小山さんと出会ってそのまま小山さんに連れられるがままに二次会、三次会へ。

だいぶん酔ってしもた。

いろいろとツッコミどころはあるばってん、Backlog Git と AWS CodePipeline の連携について考察してみたくさ

CodePipeline よ Github や CodeCommit と連携出来るのはわかった

では、Backlog Git と連携はどげんすればよかとかね。

その答えにヒントを与えてくれたのは以下の記事。

Integrating Git with AWS CodePipeline | AWS DevOps Blog

なるほど…とにかく、何らかの方法で Codepipeline までソースコードをお届け出来れば…ということで、Backlog Git の Webhook と API Gateway + Lambda を組み合わせればいけそうな気がする!

ということで

ざっくり構成

以下のような構成を作ってみた。

f:id:inokara:20170611103801p:plain

Backlog Git の Webhook は…

以下のような JSON データを送信する。

{
  "before": push前のコミット,
  "after": push後のコミット,
  "ref": 参照
  "repository": {
    "url": リポジトリのURL,
    "name": リポジトリ名,
    "description": リポジトリの説明,
  },
  "revisions": [{
    "id": コミットのID,
    "url": コミットのURL,
    "author": {
      "email": コミットした人のメールアドレス,
      "name": コミットした人の名前
    },
    "message": コミットメッセージ,
    "timestamp": タイムスタンプ,
    "added": [ 追加されたファイル ],
    "removed": [ 削除されたファイル ],
    "modified": [ 修正されたファイル ],
  }]
}

詳細は以下のページに記載されている。

www.backlog.jp

Lambda ファンクションは…

Python で書いてみた。

# -*- coding: utf-8 -*-

import os
import os.path
import sys
import urllib
import urlparse
import shutil
import json

sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'vendor'))

import boto3
import dulwich.client
from dulwich.repo import Repo
from dulwich import porcelain

target = os.environ['TARGET_DIR']
username = os.environ['USER_NAME']
password = os.environ['PASSWORD']
source_bucket = os.environ['BUCKET_NAME']

def git_clone(repo_url):
    print repo_url + ' からソースコードを取得します.'

    parsed_url = urlparse.urlparse(repo_url)
    src = parsed_url.scheme + '://' + username + ':' + password + '@' + parsed_url.netloc + parsed_url.path + '.git'

    if not os.path.isdir(target):
        os.mkdir(target)
    else:
        shutil.rmtree(target)

    try:
        porcelain.clone(src, target)
    except Exception as e:
        print(e)

    print(os.listdir(target))

def zip_files():
    print 'ソースコードを zip で圧縮します.'

    try:
        shutil.make_archive(target, 'zip', target)
    except Exception as e:
        print(e)

def upload_to_s3():
    print '圧縮したソースコードを s3 にアップロードします.'

    zip_file_name = target.split('/')[-1]

    s3 = boto3.client('s3')
    try:
        s3.upload_file(target + '.zip', source_bucket, zip_file_name + '.zip')
    except Exception as e:
        print(e)

def git(event, context):

    payload = json.loads(event['body']['payload'])
    repo_url = payload['repository']['url']

    git_clone(repo_url)
    zip_files()
    upload_to_s3()

    response = {
        'statusCode': 200
    }

    return response

以下の点を直したいけど取り急ぎ。

  • エラー処理
  • 環境変数で指定している各種値を KMS で暗号化

API Gateway と Lambda ファンクションのセットアップは…

Serverless Framework を使えば一瞬だった… serverless.yml は以下の通り。

service: slstest
provider:
  name: aws
  runtime: python2.7
  region: ap-northeast-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource: "arn:aws:s3:::demodemo-codepipeline/*"
functions:
  hello:
    handler: handler.git
    memorySize: 128
    timeout: 60
    events:
      - http:
          path: git/push
          method: post
          integration: lambda
          request:
            parameters:
              querystrings:
                payload: true
    environment:
        USER_NAME: kappa
        PASSWORD: xxxxxxxxxxxxxx
        TARGET_DIR: /tmp/oreno-repo
        BUCKET_NAME: demodemo-codepipeline

今まで何で Serverless Framework を使っていなかったんだろうと後悔。

CodePipeline と S3 バケットの連携は…

以前に書いた記事を参考にした。

inokara.hateblo.jp

これはマネジメントコンソールから。

S3 バケットを作って、バージョニングを有効にして CodePipeline からソースプロバイダとして指定するだけ。

Codebuild では Ruby のテストを走らせてみる

以下のドキュメントを参考にして Codebuild で Ruby のテストを走らせてみた。

docs.aws.amazon.com

ファイル構成は以下の通り。

$ tree oreno-repo/
oreno-repo/
├── HelloWorld.rb
├── HelloWorld_spec.rb
└── buildspec.yml

0 directories, 3 files

buildspec.yml は以下の通り。

version: 0.1

phases:
  install:
    commands:
      - echo Installing RSpec...
      - gem install rspec
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Ruby code...
      - rspec HelloWorld_spec.rb
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - HelloWorld.rb

実際にビルドを走らせた図。

f:id:inokara:20170611110705p:plain

あえて Failed させている。

まとめ

課題

本構成には以下のような課題が残っている。

  • Webhook 用 URL のアクセス制限(API キーによる認証又は IP アドレス制限
  • Lambda ファンクションで利用する環境変数の暗号化(KMS と連携させる)
  • ブランチ毎に処理を変えられるようにする(master ブランチ以外のブランチだけでビルドが走るようにするとか)

Serverless Framework

API Gateway と Lambda のセットを丸っとサクッと作ってくれるのが気持ち良すぎた。

2017 年 06 月 09 日(金)

ジョギング

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

Serverless Framework

github.com

なんで今まで使ってなかったんやって言うくらい便利。

API Gateway + Lambda の構成がエッチ、スケッチ、ワンタッチでたまげた。

2017 年 06 月 08 日(木)

ジョギング

Fukuoka.ex に行ってきた

techjin.connpass.com

事前に

www.slideshare.net

チュートリアルしていたので勉強会の内容の半分位は理解出来た気がする。

Elixir やってくぞ!

2017 年 06 月 07 日(水)

to you

いつの間にか梅雨(to you)入りしていた。

なんか体調がイマイチ。

福岡 Ruby 会議 02

regional.rubykaigi.org

「もう一度、Rubyと出会う」というテーマが掲げられているが、個人的には Ruby に出会える日だと思っているので、とても楽しみにしている。