SlideShare a Scribd company logo
1 of 48
Download to read offline
9/28開催 Go言語初心者向け
ハンズオン#3
株式会社リンクバル
技術部 技術グループ 船寄良登
APIアプリをGKEで動かしてみよう
1. 自己紹介
2. はじめに
3. GKEとkubernetesについて
4. ハンズオン
5. 最後に
アジェンダ
2
自己紹介
3
船寄 良登 (ふなよせ よしと)
経歴: 受託開発会社、広告代理店などでサーバサイドエンジニアとして、
webサービスの開発をおこなってきました。
これまでPHPerでしたが、最近、Railsを本格的に触り始めました。
リンクバルでは「街コンジャパン」の開発を担当しています。
趣味: 美味しい物を食べること、子供と遊ぶこと。
その他: Go言語に興味があります。Hatchobori.goというGo言語のもくもく会を立ち上げ
ました。https://hatchobori-go.connpass.com/
今回のハンズオンは、Go言語で作成した、簡単なapiアプリを
Google Container Engine(GKE)上へデプロイして、実行する内容となっております。
はじめに
4
Google Container Engine(GKE)とは
5
Google Cloud Platform内で、Dockerコンテナを実行できる
フルマネージドサービス。
kubernetesで管理されている。
kubernetesとは
kubernetes
「オーケストレーション・ツール」と呼ばれる分野の管理ツールで、
Googleが主体的に開発に参画しているオープンソース・ソフトウェアです。
● 関連するコンテナのグルーピング
● コンテナに割り振られるIPアドレスの管理
● コンテナの監視
● コンテナ間のネットワークルーティング管理
● コンテナに割り当てるストレージの管理
などをやってくれるソフト
6
Google Cloud Platformアカウントの作成
7
サイトへアクセスし、無料トライアルをクリック。
https://cloud.google.com
Google Cloud Platformアカウントの作成
8
入力をすすめる
Google Cloud Platformアカウントの作成
9
住所、氏名、クレカ情報を入力後、「無料トライアルを開始」ボタンを押下
Google Cloud Platformアカウントの作成
10
登録完了
Google Cloud Platform プロジェクトの作成
11
Google Cloud Platform プロジェクトの作成
12
今回「techlink」というプロジェクトを作成する。
Google Cloud Platform プロジェクトの作成
13
ハンズオンの中でIDを使用しますので、
どこかにメモしておいてください
Google Cloud SDKのインストール
14
ツールを任意の場所へダウンロードし、展開してください。
展開したツールの中に移動し、パス追加などを行います。
install.shの質問1(sdkの改善に協力してくれますか?)
install.shの質問2(パスを通してタブ補完を有効にしますか?)
google-cloud-sdk-158.0.0-darwin-x86_64.tar.gz
cd google-cloud-sdk
./install.sh
.bash_profileの再読込
初期化用のコマンドを実行
yを選択し、ブラウザが開かれる(開かれない場合はURLをアドレスバーへ入力)
Google Cloud SDKの初期化
15
gcloud init
source ~/.bash_profile
使用するアカウントを選択する
Google Cloud SDKの初期化
16
スコープの許可を行う
Google Cloud SDKの初期化
17
ユーザ認証完了
Google Cloud SDKの初期化
18
プロジェクトの選択
Google Cloud SDKの初期化
19
Google Compute Engineは使わない
Google Cloud SDKの初期化
20
dockerを起動させます。
apiサーバの作成
21
apiサーバの作成
22
下記のリポジトリを任意の場所へcloneし、
ディレクトリへ移動します。
起動させます。
git clone https://github.com/funayoseyoshito/techlink-go3.git
cd techlink-go3
docker-compose up
apiサーバの作成
23
このような画面が表示されれば成功です
apiサーバの作成
24
create
read
update
delete
curl -F "name=test1" -F "email=test@test.com" localhost:4000/users
curl localhost:4000/users/1
curl -F "name=test1change1" -X PUT -F "email=test@test.com" localhost:4000/users/1
curl -X DELETE localhost:4000/users/1
apiサーバの作成とdocker imageのpush
25
docker image の名前を変更します
Container Registryへプッシュします。
gcloud docker -- push gcr.io/techlink-hogehoge/api:1.0
gcloud docker -- push {registroy host}/{プロジェクトID}/api:1.0
docker tag techlinkgo3_app gcr.io/techlink-hogehoge/api:1.0
docker tag techlinkgo3_app {registroy host}/{プロジェクトID}/api:1.0
kubectlをインストールする。
(API経由でKubenetesを操作するためのクライアントツール)
kubectlのインストール
26
gcloud components install kubectl
GCP上でGoogleCloudSQLを作成する
27
コンソール上でCloudSQLの画面を表示し、
「インスタンスを作成」を押下します。
GCP上でGoogleCloudSQLを作成する
28
MySQLを選択し、「次へ」を押下します。
GCP上でGoogleCloudSQLを作成する
29
「第2世代を選択」を押下します。
GCP上でGoogleCloudSQLを作成する
30
赤枠部分を入力及び選択します。
GCP上でGoogleCloudSQLを作成する
31
マシンスペックを変更し、「作成」ボタンを押下します。
GoogleCloudSQLへテーブルを作成します
32
インスタンスが起動したら、インスタンスIDを押下します。
「Cloud Shell を使用して接続」
を押下します。
接続ができたら、下記のSQLを実行します。
create database user;
use user;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_users_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
GoogleCloudSQLへテーブルを作成します
33
下記の画面へアクセスします。
「techlink」プロジェクトを選択し、「続行」を押下。
https://console.cloud.google.com/flows/enableapi?apiid=sqladmin
Cloud SQL Administration API を有効にする。
34
下記の画面へアクセスします。
「techlink」プロジェクトを選択し、「続行」を押下。
https://console.cloud.google.com/projectselector/iam-admin/servicea
ccounts?hl=ja
サービスアカウントを作成する
35
赤枠の部分を入力&選択し、「作成」を押下する。
キーがダウンロードされます。
サービスアカウントを作成する
36
コンテナクラスタの作成
37
下記のコマンドを実行する
gcloud container clusters create api-cluster 
--scopes cloud-platform 
--zone asia-northeast1-a 
--machine-type f1-micro 
--num-nodes 3
クレデンシャルファイルをupload
<PATH_TO_CREDENTIAL_FILE>は先ほどダウンロードしたjsonファイルパス
DB接続情報を登録する
<USERNAME>と<PASSWORD>は設定した値をそれそれ指定してください。
kubectl create secret generic cloudsql-db-credentials --from-literal=username=<USERNAME>
--from-literal=password=<PASSWORD>
DB接続用の認証情報をuploadする
38
kubectl create secret generic cloudsql-instance-credentials
--from-file=credentials.json=<PATH_TO_CREDENTIAL_FILE>
deploymentの作成
39
deploymentを作成する設定ファイルを編集します。(api-deployment.yml)
APIのdocker imageを指定します
接続名を指定します
下記のコマンドを実行します。
deploymentを作成する
40
kubectl create -f api-deployment.yml
deploymentの作成
41
deploymentの確認をしてみましょう
クラスタ上にpodsが作成されていて、既に動いている状態です
kubectl get deployments
kubectl get pods
Public IPの紐付け
42
deploymentへPublic IPを紐付ける
紐付けを確認する
kubectl expose deployment api --type="LoadBalancer"
kubectl get services
APIサーバの動作確認
43
create
read
update
delete
curl -F "name=test1" -F "email=test@test.com" {EXTERNAL-IP}:4000/users
curl {EXTERNAL-IP}:4000/users/1
curl -F "name=test1change1" -X PUT -F "email=test@test.com" {EXTERNAL-IP}:4000/users/1
curl -X DELETE {EXTERNAL-IP}:4000/users/1
クラスタの削除
44
下記のコマンドでクラスタを削除します
gcloud container clusters delete api-cluster --zone asia-northeast1-a
最後に
45
本日は、弊社の勉強会にご参加いただきまして、ありがとうございました。
これからも、有意義な勉強会を開催できるように努めますので、どうぞよろしくお願いします。
最後に、弊社ではエンジニア職を絶賛募集中です。
弊社に興味がある方、は是非、スタッフまでお声かけくださいませ。
また、お知り合いでご転職をお考えの方がいらっしゃいましたら、
弊社の事をお伝えいただけましたら幸いです。
[採用ページ]
http://linkbal.co.jp/recruit/
[エンジニアブログ]
http://tech.linkbal.co.jp/
どうもありがとうございました。
46
街コンジャパン
https://machicon.jp
・日本初のイベント特化型ECサイト
・4万件以上の街コン・パーティー情報を掲載
・会員数約100万 (2017年7月現在)
47
カップリンク
https://couplink.jp/
恋活・婚活 マッチングアプリ
Hatchobori.go
https://hatchobori-go.connpass.com/event/63145/
・Go言語のコミュニティを立ち上げました。
・主にもくもく会がメインです。
・参加者絶賛募集中ですので、
 こちらもよろしくお願いします。
48

More Related Content

Similar to テックリンクGoハンズオン#3 APIアプリをGoogle Container Engine (GKE)で動かしてみよう

Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?Ryuji Iwata
 
My Portfolio_Taichi Hidaka
My Portfolio_Taichi HidakaMy Portfolio_Taichi Hidaka
My Portfolio_Taichi HidakaTaichiHidaka
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうTakuya Ueda
 
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみようGoでwebアプリを開発してみよう
Goでwebアプリを開発してみようTakuya Ueda
 
My Portfolio Taichi Hidaka
My Portfolio Taichi HidakaMy Portfolio Taichi Hidaka
My Portfolio Taichi HidakaTaichiHidaka
 
Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Shinichirou Nakamura
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うTakuya Ueda
 
私なりのGo言語のご紹介
私なりのGo言語のご紹介私なりのGo言語のご紹介
私なりのGo言語のご紹介Ryuji Iwata
 
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜Keita Kawamoto
 
アプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツールアプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツールKeishi Hosoba
 
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発Yuji Otani
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!Antoine Choppin
 
勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126Akihiro Fujiwara
 
2017823 pythonを始めよう
2017823 pythonを始めよう2017823 pythonを始めよう
2017823 pythonを始めようshouta yoshikai
 
DroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidDroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidSENSY Inc
 
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたFlow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたMasao Niizuma
 
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いPHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いMasataka Kono
 

Similar to テックリンクGoハンズオン#3 APIアプリをGoogle Container Engine (GKE)で動かしてみよう (20)

Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
What is "Go" Gopher?
What is "Go" Gopher?What is "Go" Gopher?
What is "Go" Gopher?
 
My Portfolio_Taichi Hidaka
My Portfolio_Taichi HidakaMy Portfolio_Taichi Hidaka
My Portfolio_Taichi Hidaka
 
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろうGoだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
 
Pythonを始めよう
Pythonを始めようPythonを始めよう
Pythonを始めよう
 
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみようGoでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
 
My Portfolio Taichi Hidaka
My Portfolio Taichi HidakaMy Portfolio Taichi Hidaka
My Portfolio Taichi Hidaka
 
Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
 
私なりのGo言語のご紹介
私なりのGo言語のご紹介私なりのGo言語のご紹介
私なりのGo言語のご紹介
 
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜
インターネットで 可能性をつなげる、ひろげる 〜ペパボ福岡デザインチーム〜
 
アプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツールアプリ開発の境界問題を支えるツール
アプリ開発の境界問題を支えるツール
 
Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発Hack+FuelPHPによるWebサービス開発
Hack+FuelPHPによるWebサービス開発
 
Easy easy2
Easy easy2Easy easy2
Easy easy2
 
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
 
勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126勉強会用Swift授業2018-0126
勉強会用Swift授業2018-0126
 
2017823 pythonを始めよう
2017823 pythonを始めよう2017823 pythonを始めよう
2017823 pythonを始めよう
 
DroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for AndroidDroidKaigi 2018 - Dialogflow for Android
DroidKaigi 2018 - Dialogflow for Android
 
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみたFlow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
Flow用kintoneカスタムコネクタ - スマホで使える「ふとアプリ」を作ってみた
 
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いPHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
 

テックリンクGoハンズオン#3 APIアプリをGoogle Container Engine (GKE)で動かしてみよう