Briswell Tech Blog

ブリスウェルのテックブログです

GitLab CI 触ってみた

最近弊社ではソース管理にGitLabを使い始めた。

折角なので、GitLab CIを使ってみた。

まだまだ初心者中の初心者なので、ご指摘等ございましたらぜひお願いします。

 

やってみたのは下記内容

・サーバにGitLab Runnerを仕込み単純にGitから最新ソースを取得する

・Doker imageからAWS Elastic Beanstalkに更新をかける

・Doker imageからAWS S3経由でLambdaに更新をかける

 

・サーバにGitLab Runnerを仕込み単純にGitから最新ソースを取得する

CentOSにて実行

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install -y gitlab-runner

でGitLab runnerを最新ソースを取得したいサーバにinstall

gitlab-runner register

で、いくつか質問されるので、順番に回答する

 

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/)

→GitLabのURL

Please enter the gitlab-ci token for this runner:

→GitLab画面

プロジェクト → CI/CD → Runner

画面に記載されているTokenを入力

Please enter the gitlab-ci description for this runner:

[ip-172-31-43-84.ap-northeast-1.compute.internal]:

→なんか、一意の判断

Please enter the gitlab-ci tags for this runner (comma separated):

→tagが必要であれば入れる

Please enter the executor: ssh, docker+machine, kubernetes, docker, docker-ssh, parallels, shell, virtualbox, docker-ssh+machine

→種類を入力、今回はshellで作成

 

ps aux | grep gitlab
→このコマンドで、GitLab CIがどのユーザで実行されるかを確認する

今回はrootで強制的に実行したかったので、

gitlab-runner uninstall
gitlab-runner install -user root
gitlab-runner restart

の3つを実行し、再度ユーザ確認すると、rootに変わっている

 

SSHログイン時に実行するコマンドを定義

yum install expect

→installを行う
vi ~/.bash_profile

→でファイル編集

記載内容

eval `ssh-agent`

# 秘密鍵ファイル
KEY_FILENAME='id_rsa'
# パスフレーズ
PASSPHRASE='password'

expect -c "
set timeout -1
spawn ssh-add $HOME/.ssh/$KEY_FILENAME
expect {
\"Enter passphrase for\" {
send \"$PASSPHRASE\r\"
}
}
expect {
\"denied\" { exit 1 }
eof { exit 0 }
}
"

 

で、該当プロジェクトの直下に

.gitlab-ci.yml

を作成

—pullの場合—
stages:
- deploy

deploy:
stage: deploy
script:
- id
- ssh-add -l
- ssh -vT git@gitlab.com
- cd /var/www/html/

git pull origin master:master
only:
- master
tags:
- tags_name

 

で、とりあえずmaster Push時にだけ反応するように設定

developだけであればdevelopに変更すればOK

次回は
・Doker imageからAWS Elastic Beanstalkに更新をかける
・Doker imageからAWS S3経由でLambdaに更新をかける

を書きます

 

Elastic Beanstalk触ってみた感想

元々はEC2などは自前で立てて、開発や本番運用を行なっていた。

今回自社のパッケージを作成することになり、ElasticBeanstalkで構築することとした。

感想としては

・作成は全て勝手にやってくれるので、簡単

・環境をスワップできるので、stg prodみたいな環境があれば便利

・RDSは別で立てたほうが良さそう(アプリケーション、環境を削除してしまった場合データベースまで削除されてしまう、リスク排除のため)

・.ebextensions にconfigファイル追加していけば eb create コマンドだけで環境が作れる

・今回言語はnodejsなので、ローカルから eb deploy コマンドやるだけでnpm installとかは勝手にやってくれる

・pemキー発行しなければコンソールに入れない、不要なリスク排除

 

思いついたら追記

 

ただ、過去に全て自前で構築していじいじしていた経験は割と生きてる感じがする。

知ってると知っていない、の差だと思うが。

 

これならサーバ依存というのはなく、簡単にインスタンス入れ替えも可能だなー。

2019年

2019年

あけましておめでとうございます!!

 

このブログも中々更新できていませんが、本年はもう少し頻度と詳細度をあげて更新していきたいと思ってます。

 

今年もよろしくお願いします。

GitLab master Push エラー解決

最近弊社ではソース管理をGitLabに移行してまして。

ちょっと多く悩まされたのが、

"Please make sure you have the correct access rights"

この子。

 

アクセス権限確認してねって言ってるんだが、権限はしっかりある。

プロジェクトオーナーなので問題ないはず。

 

......

 

なんだろう。

 

...

 

とりあえず、protect リポジトリでmaster削除してみる

 

...

 

関係ない。

 

結果の解決策とりあえずKeyファイル作成し直し。

 

ssh-keygen -t rsa -C "GitLabのメアド" -b 4096

 

で、pub コピってGitLabに貼り付け

 

その後ローカルで

ssh-add ~/.ssh/id_rsa

 

ってやってmaster Pushでいけた。

 

無駄に悩まされた!

GitLabとAWS Codecommitの連携

GitLabでソース管理している物を、AWSのCodebuild + CodeDeploy + CodePipeline

でもろもろ自動化がしたかった。

 

GitLabをAWS上からは選べなかったので、GitLab -> Codecommit を自動連携するようにしてみた。

結構簡単で、

Codecommit、GitLabでプロジェクト作成、

AWS IAM ユーザ作成、Codecommit Fullアクセス権限を付与し、作成

 

IAMユーザ画面の認証情報タブ内、一番下の「AWS CodeCommit のHTTPS Git 認証情報」というところの生成ボタンを押してユーザ名、パスワードを取得する

 

GitLab、プロジェクト内設定 -> リポジトリから「Mirroring repositories」を選択

Push設定にして、パスワードを選択、ユーザ名入れるところなかったので、

https://"ユーザ名"@...

という形でセット

 

これでGitLabにPushしたソースは自動でCodeCommitにもあがる

 

AWS ELB スティッキーセッション

仮リリースしてたAPI サーバー冗長化するために、セッション管理をどうしようかなと思った。

CakePHP3 で構築してたので、DB管理にしてもよかったが、AWS ELB置いといたのでスティッキーセッションというのを試してみた。

 

こんな簡単なの?ってほど設定は簡単で、

ターゲットグループの維持設定を有効化するだけ。

 

後はよしなにAWS君がやってくれる。

簡単。

AWS S3 + CloudFront + WAF

f:id:Toshi_bw:20181022111018p:plain

 

株式会社ブリスウェル、Toshiです。

 

とあるAWS上で稼働している業務システムで、写真の表示がとても遅いと大量の声があがってきたため、構成を変えてみた。

 

  •  変更前

AWS EC2 - EBS で、写真をひたすらEBSに置いていた。

EC2が複数構成なので、File ServerとしてEC2をmountしていた。

(ELB スティッキーセッション入れようかな。)

 

  • 変更後

EBS -> S3 に写真ファイルを移行

(既存の置き方がとてもよくなかったため、同時にファイルパス構成も変更)

S3コマンドでひたすら待つ。。。

もっと良い方法がきっとあったはず。一度キリと思い、そのまま実施。

 

EC2からアクセスするのはS3ではなく、CloudFrontに。

結果速度は3倍以上に向上。

S3やCloudFront URL直アクセスを禁止するために、簡易的にWAFのQuery stringを使用。

 

S3 mountと、goofysも試してみたけど、CloudFrontの方が全然早かった。

 

次回はEC2 - CloudFront - WAF - S3の設定、実際のスピード変化の値について載せます! 

 

 

 

アプリ指紋認証のメッセージについて

f:id:yukitakai:20181015235343p:plain

 

briswellのtakaiです。

弊社でも開発者ブログを始めることになりました。

よろしくお願いします。 

開発者ブログといいつつ、僕は開発者ではないので、まずは簡単に弊社の紹介から。

 

株式会社ブリスウェルです。

プリスウェルでも、ブリスエルでもないです(よく間違われます...)。

 

由来ですが、

 

活き活き、元気にという意味の"brisk"

健康にという意味の”wellness

 を掛け合わせた造語で"briswell"です。

 

東京都 渋谷区 港区に本社を置き、ベトナムホーチミンにソフトウェア開発拠点を有するグローバルIT企業です。

大手企業からスタートアップまで幅広い顧客に対して、コンサルティング・ソフトウェア開発支援サービス、人材支援サービスを提供しています。

 

 詳しくはこちら

 

弊社の紹介ははこの辺にしておきます。

 

 

最初に述べたように、僕自身はプログラマではなく、SEですので、

プログラムレベルの話ではなく、軽めの話を書けたらと思います。

というわけで、今回は

「アプリ指紋認証のメッセージについて」

です。

 

【背景】

とある案件にて、アプリの指紋認証を使ったログイン機能を実装しました。

指紋認証って便利ですよね(僕のiPhoneはなぜか認識してくれませんが)。その指紋認証で使われるメッセージは何種類か存在します。

 

もちろんメッセージのデフォルトは英語です。

日本人向けのアプリであれば翻訳する必要がありますね。

 

よし、「指紋認証 メッセージ 日本語翻訳」でググれば解決だ!

 

 

・・・あれ

 

 

・・・・・・出ない

 

 

・・・・・・・・・!? 

f:id:yukitakai:20181015235755j:plain

 

・・・・・・

 

・・・

 

というわけで、指紋認証にて使われるメッセージと日本語翻訳をまとめました。

(Fingerprint authentication messageでググれば出るのかもしれないですが)

 

【対応内容】

 

iOS

 

「"アプリ名"でtouchIDを使用」(Touch ID for "app name")

表示方法:指紋認証を実装する画面に遷移すると表示、指紋認証ログインと指紋認証登録が行える

 

「やり直す」(Try again)

指紋認証を一度以上失敗すると表示

 

「パスコードを入力」(Enter Security Code)

指紋認証を一度以上失敗すると表示

 

「リトライ回数制限を越えました」(Application retry limit exceeded)

規定数(累計3回)以上指紋認証を失敗で表示

 

指紋認証ロックされました」(Biometry is locked out)

上記に加えてさらに規定数(累計5回)以上指紋認証を失敗で表示、ロック画面にてパスコードを入力するまで再度使用不可

 

「この機能はご利用いただけません」(Fallback authentication mechanism selected.)

端末側で指紋認証失敗時に表示される「パスコードを入力」押下時に表示

 

「パスコードが設定されていません」(Passcode not set.)

パスコードをオフにした状態で、「指紋認証」画面に遷移した場合に表示

 

「指紋が登録されていません」(No identities are enrolled.)

パスコードはオンにした状態で、指紋を1つも登録していない状態で、「指紋認証」画面に遷移した場合に表示

 

指紋認証がキャンセルされました」(UI canceled by system.)

指紋認証画面にて電源ボタン押下(スリープ状態)後、再度画面を開いた場合の表示メッセージ

 

「キャンセルしました」(Finger authentication canceled)

指紋認証キャンセル時

 

 

android

 

「この端末は指紋認証に対応していません」(Your Device does not have a Fingerprint Sensor)

指紋認証機能がない端末の場合

 

「この端末は指紋認証に対応していません」(Your Device does not have a Fingerprint Sensor)

指紋認証機能がない端末の場合

 

指紋認証登録を行ってください」(Register at least one fingerprint in Settings)

指紋が登録されていない場合

 

「指紋が登録されていません」(Fingerprint Authentication failed)

指紋が正しくない(指紋が登録されていない)場合

※上記メッセージとの差分は不明

 

「この端末は指紋認証登録されていません」(Lock screen security not enabled in Settings)

ロック画面のセキュリティが有効になっていない場合

 

「正しく認識できませんでした」(Wipe Home key and try again)

指紋認証エリアに正しくタッチしなかった場合

 

「正しく認識できませんでした」(Make sure that your finger covers the entire Home key)

タッチしたが、半分の指ぐらいがHomeキーに付けた場合

※上記メッセージとの境目はわからなかったです

 

「リトライ回数制限を超えました」(Too many attempts. Try again later.)

正しく3回以上連続入力しない場合

※機能そのものがロックされることはなく以下の流れ (登録画面遷移->指紋認証->失敗を繰り返す->リトライ回数制限エラー->再度登録画面に遷移する->指紋認証->失敗を繰り返す->リトライ回数制限エラー->再度登録画面に遷移する…)

 

 

各OSのバージョンによってはメッセージの増減はあるかと思いますので、その点だけご了承ください。

 

よし、指紋認証のメッセージはこれでOK!

 

 

 

え、時代は顔認証・・・?

 

 

 

「顔認証 メッセージ 日本語翻訳」でググれば解決だ!