ecscheduleでECSのScheduled Taskを管理する

Japan APN Ambassador Advent Calendar 2020 2 日目のエントリです。ecschedule で ECS の Scheduled Task を管理してみました。

github.com

songmu.jp

インストール

go get でインストールしました。

$ go get github.com/Songmu/ecschedule/cmd/ecschedule
$ ecschedule -help
Usage of ecschedule (v0.3.0 rev:HEAD):
  -conf string
        configuration
  -version
        display version

Commands:
  apply  apply the rule
  dump   dump tasks
  run    run the rule
  diff   diff of the rule with remote

Scheduled Task の dump

dump サブコマンドで既存の Scheduled Task を dump することが可能です。今回は既に存在する Scheduled Task を dump してみます。

$ ecschedule dump --cluster sample-cluster --region ap-northeast-1 > ecschedule.yaml
$ cat ecschedule.yaml
region: ap-northeast-1
cluster: sample-cluster
rules:
- name: batch
  scheduleExpression: rate(1 minute)
  disabled: true
  taskDefinition: batch:6
  launch_type: FARGATE
  platform_version: 1.3.0
  network_configuration:
    aws_vpc_configuration:
      subnets:
      - subnet-xxxxxxxxxxxxxxxxxx
      security_groups:
      - sg-xxxxxxxxxxxxxxxxxx
      assign_public_ip: ENABLED

ecschedule.yaml に対象 ECS Cluster に存在する Scheduled Task が dump されました。

Scheduled Task の apply

該当の Scheduled Task が Disabled の状態となっているため、ecschedule で有効化してみます。

$ git diff
diff --git a/ecschedule.yaml b/ecschedule.yaml
index dd7be7b..31f021e 100644
--- a/ecschedule.yaml
+++ b/ecschedule.yaml
@@ -3,7 +3,6 @@ cluster: sample-cluster
 rules:
 - name: batch
   scheduleExpression: rate(1 minute)
-  disabled: true
   taskDefinition: batch:6
   launch_type: FARGATE
   platform_version: 1.3.0

ecschedule.yaml を変更して apply サブコマンドを実行する前に、diff サブコマンドで ecschedule.yaml と Scheduled Task の状態を差分確認してみます。

$ ecschedule -conf ecschedule.yaml diff -rule batch

以下の様に差分を出力してくれます。PR レビューに便利ですね。

f:id:enokawaa:20201129231810p:plain

差分が確認できたので apply します。

$ ecschedule -conf ecschedule.yaml apply -rule batch

差分が適用されました。

f:id:enokawaa:20201129232651p:plain

AWS マネージメントコンソールから Scheduled Task を見てみると、問題なく ENABLED となっていることが確認できました。

f:id:enokawaa:20201129233049p:plain

おわりに

簡単ですが、ecschedule を用いて Scheduled Task を管理してみました。とても便利ですね。個人的には dump 機能が好きです。「当初は AWS マネージメントコンソールや AWS CLI で作成したけど、後から IaC で管理したい」というケースに非常にマッチするのではないでしょうか。

ECS Service の Deployment は ecspresso で、Scheduled Task は ecschedule で管理すると最強なのでは説が僕の中で浮上しています。

ECS Task definitionのDiffツール taskdiff を作りました

業務で ECS の Task definition を更新する作業が多々あります。CI/CD パイプラインや CloudFormation、Terraform などで管理していれば Git で差分確認が可能ですが、手動更新だとそうはいきません。 ECS では Task definition の差分を確認する API は提供されていない(ハズ)ので、勉強も兼ねて Golang で taskdiff という CLI ツールを作成しました。

github.com

使い方

使い方はシンプルです。例えば sample-app:1sample-app:2 の差分を確認したい場合は以下のように実行します。

$ taskdiff sample-app:1 sample-app:2

f:id:enokawaa:20201021164659p:plain

taskdiff sample-app:1 sample-app:2 | less のようにパイプで less に渡す使い方を僕はよくやります。

Diff ライブラリ選定

Go で Diff を出力するライブラリはいくつかあったのですが、シンプルな kylelemons/godebug/diff を選びました。sergi/go-diff も見てみたのですが、僕が Go (というかプログラミングそのもの..)を殆ど理解できていないため、浅はかですがコード量がそこまで多くないライブラリを選びました。といっても kylelemons/godebug/diff も理解しきれていませんが。。今後の宿題です。

これからやりたいこと

git diff のように差分がある行の前後 n 行だけ表示できたらもっと UX 上がりそうだなと思ったので、挑戦したいですね。(色も付けたいな... テストも書いてはみたものの、これで良いのかが分かりません。圧倒的にインプットが足りてないので様々なプロダクトのソースを読んだりして、テスト含めちょこちょこ改善していきます。

モチベーション

「自分が欲しいと思ったツールを作りたい」というのが強いです。実際業務でけっこう使っていて我ながら「便利だなぁ」と思う時もあります。だんだんと愛着も湧いてきたので、コツコツ育てたいと思います。

まとめ

taskdiff という ECS Task definition の Diff ツールを作成しました。ツッコミとかあれば GitHub の Issue やブコメTwitter のリプ or DM でいただけると嬉しいです。

github.com

【2020年版】自宅の作業環境を整えた

コロナ禍で在宅ワークがメインになり、自宅の作業環境を整えたのでログとして残しておきます。 例の給付金と、僕が在籍するアイレットで環境設備補助金も出たので最高です。

www.iret.co.jp

Before

もともと大雨の時や家族の体調が悪い時、大幅に寝坊した時 など 1 ヶ月に数回は在宅で仕事していたため、ある程度作業環境は整えていました。

f:id:enokawaa:20200625184356j:plain

f:id:enokawaa:20200625184321j:plain

アイテム 名前 コメント
チェア オカムラ Baron 元同僚の id:y13i さんから譲り受けた最高
デスク DJテーブル/DODAI 高さが結構辛い
モニター Dell プロフェッショナルシリーズ P2419HC 23.8インチ ワイド USBーC モニター USB-C 給電最高
キーボード Apple Magic Keyboard - 英語(US) 会社から借りパク
マウス Designer Bluetooth® Mouse 特に無し
PC スタンド Bestand ノートパソコンスタンド 目線が上がるのでよい

オカムラ Baron は最高です。 id:y13i さんには感謝しかないです。モニターは引っ越し祝いで上司からもらいました。感謝しかないです。 これだけでも割と良い作業環境なのですが、デスクが DJ 用で結構高さがあるんですよね。それが辛くてデスクを新調することにしました。

After

憧れの昇降式デスクにチェンジしました。

f:id:enokawaa:20200625213908j:plain

f:id:enokawaa:20200625213937j:plain

アイテム 名前 コメント
デスク IKEA BEKANT 昇降式
キーボード PFU Happy Hacking Keyboard Professional2 墨 英語配列 会社用で使ってた
マウス Apple Magic Mouse 2 - シルバー 会社の後輩から借りパク
USB 充電器 Anker PowerPort I PD 適当に
ヘッドホンハンガー audio-technica ヘッドホンハンガー AT-HPH300 audio-technica のヘッドホン使ってるので合わせた
ワイヤレス充電器 1 Anker PowerWave 10 Pad AirPods
ワイヤレス充電器 2 不明 クラウドネイティブさんノベルティ
パームレスト MMTT ウッドパームレスト タイピングがラク

慢性腰痛持ちで、今年の 4 月に急に強く痛みだしたので昇降式デスクにしました。ちょこちょこスタンディングで仕事すれば少しは良くなるかなと。FlexiSpot も検討したのですが、組み立てが楽そう && 奥行きなどサイズ感がベストだったので IKEA に決めました。

実際にスタンディングで仕事をしているのか?

購入する前に「昇降式デスクを買ったとして本当にスタンディングで仕事するのか?」と考えたのですが、スタンディングしたのは最初の一週間くらいでした。 もちろん個人差はあると思いますが、昇降式デスクの購入を検討している方の参考となれば幸いです。昇降機能の有無で値段に結構差があるので。

昇降式デスクにしてよかったこと

今回購入した BEKANT は天板裏に収納スペースがあり、そこに電源タップや USB 充電器を収納しています。 ケーブルの抜き差しや、収納作業の際に最高の高さにすれば中腰くらいで作業ができるのでラクです。個人的には今のところそれくらいしか良かったことが見当たらないですね。。

f:id:enokawaa:20200625213957j:plain
天板裏

余談

僕の所属するアイレットでは DocBase という情報共有ツールを利用しているのですが、コロナ禍でもポジティブにいこうぜということで俺のデスクというタグで自分の作業環境を晒してみました。始めたきっかけは「俺のデスクを自慢したい!」とかではなく、単純に「他のメンバーのデスク環境を見てみたかったから」でした。思いのほか反響があり様々なメンバーが俺のデスクシリーズを公開し、いま DocBase を見たら 14 件メモ( DocBase の記事の単位 )が公開されていました。小さいムーブメントが起きて面白いですね。他にも派生( ? )して自己紹介のメモも公開されたりしています。

EKSにPrisma Cloudを導入する

EKS に Prisma Cloud を導入してみたのでメモとして残しておきます。

www.paloaltonetworks.jp

Prisma Cloudとは

Palo Alto Netoworks 社が提供する SaaS 型のセキュリティ製品です。 Palo Alto Netoworks 社が Evident.io 社、RedLock 社、Twistlock 社、PureSec 社を買収し、そのうちの Twistlock と PureSec の機能が Prisma Cloud に統合されました。 今回は Twistlock の機能である Defender を EKS にデプロイします。

www.paloaltonetworks.jp

blog.paloaltonetworks.com

Defenderのインストール

公式ドキュメントを参考に進めていきます。

docs.paloaltonetworks.com

EKS や Kubernetes 環境は事前に用意しておいて下さい。 今回は以下のエントリで記載した方法で EKS Cluster を用意しました。

enokawa.hatenablog.jp

0. Prisma Cloudのフリートライアル申し込み

以下のページよりフリートライアル( 30 日 )を申し込みます。

marketplace.paloaltonetworks.com

Activate のメールが送信されるので、Activate Link をクリックしアカウントし、ページに従って進めます。

1. Console’s API addressを控える

Compute > System > Downloads > Path to Console で内容をコピーしておきます。 ついでに後ほど利用する twistcli もインストールしておきます。

f:id:enokawaa:20200608215928p:plain

2. Console’s service addressを控える

Compute > Manage > Defenders > Deploy > DaemonSet の「The name that clients and Defenders use to access this Console」の内容をコピーしておきます。 といってもテキストを選択することができないのですが。。確証は無いですが、おそらく 1 の手順で控えた URL と同じ FQDN です。

f:id:enokawaa:20200608215601p:plain

3. defender.yamlの生成

EKS へデプロイする defender.yamltwistcli で生成します。

$ twistcli defender export kubernetes \
--address https://xxxxx.cloud.twistlock.com/xxxxxxxxx \ # 1 で控えた Console’s API address
--user enokawa@example.com \ # Prisma Cloud アカウントのメールアドレス
--cluster-address xxxxx.cloud.twistlock.com # 2 で控えた Console’s service address

パスワードを求められるので、Prisma Cloud アカウントのパスワードを入力します。はい。401 が出ました。

Please provide Console credentials: 
Enter Password for enokawa@example.com: # Prisma Cloud アカウントのパスワードを入力
Status: 401 Unauthorized
GET https://xxxxx.cloud.twistlock.com/xxxxxxxxx/api/v1/version failed.
Error: invalid credentials

ソースは見つけられなかったのですが、この認証には Access Keys を用いる必要があるみたいなので作成します。 Settings > Access Keys > + Add New > で Name を入力して Create します。Access Key ID と Secret Key が表示されますので控えておきます。CSV でのダウンロードも可能です。

f:id:enokawaa:20200608221458p:plain

再度 twistcli を実行します。

$ twistcli defender export kubernetes \
--address https://xxxxx.cloud.twistlock.com/xxxxxxxxx \ # 1 で控えた Console’s API address
--user XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX \ # Access Key ID
--cluster-address xxxxx.cloud.twistlock.com # 2 で控えた Console’s service address
Please provide Console credentials:
Enter Password for XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX: # Secret Key
defender daemonset written successfully to /path/to/your/directory/defender.yaml

正常に defender.yaml が生成されました。

4. defender.yamlのデプロイ

事前に twistlock Namespace を作成しておく必要がある必要があります。

$ kubectl create namespace twistlock
namespace/twistlock created

デプロイします。

$ kubectl create -f defender.yaml
clusterrole.rbac.authorization.k8s.io/twistlock-view created
clusterrolebinding.rbac.authorization.k8s.io/twistlock-view-binding created
secret/twistlock-secrets created
serviceaccount/twistlock-service created
daemonset.apps/twistlock-defender-ds created
service/defender created

デプロイが完了しました。全てのノードで twistlock-defender-ds DaemonSet が起動していることが分かります。

$ kubectl get daemonset/twistlock-defender-ds -n twistlock
NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
twistlock-defender-ds   3         3         3       3            3           <none>          2m28s

$ kubectl get pods -n twistlock -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP           NODE                         NOMINATED NODE   READINESS GATES
twistlock-defender-ds-7lxmx   1/1     Running   0          3m    10.0.3.94    ip-10-0-3-94.ec2.internal    <none>           <none>
twistlock-defender-ds-7nqmc   1/1     Running   0          3m    10.0.5.16    ip-10-0-5-16.ec2.internal    <none>           <none>
twistlock-defender-ds-npwm5   1/1     Running   0          3m    10.0.4.245   ip-10-0-4-245.ec2.internal   <none>           <none>

5. Prisma Cloudを確認

実際に Prisma Cloud 上に浮かび上がってきているかを確認しましょう。 Compute > Defenders > Manage > Defenders で、DaemonSet が表示されました。

f:id:enokawaa:20200608224106p:plain

DaemonSet をクリックすると、Filesystem や Network の状況が確認できます。

f:id:enokawaa:20200608230203p:plain

サンプルアプリケーションのデプロイ

このままじゃつまらないので、サンプルアプリケーション( ゲストブック )をデプロイして Prisma Cloud の挙動を確認してみます。

docs.aws.amazon.com

手順通りに流します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-controller.json
replicationcontroller/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-service.json
service/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-controller.json
replicationcontroller/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-service.json
service/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-controller.json
replicationcontroller/guestbook created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-service.json
service/guestbook created
$ kubectl get services -o wide
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)          AGE    SELECTOR
guestbook      LoadBalancer   172.20.59.58     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-0123456789.us-east-1.elb.amazonaws.com   3000:32530/TCP   78s    app=guestbook
kubernetes     ClusterIP      172.20.0.1       <none>                                                                    443/TCP          116m   <none>
redis-master   ClusterIP      172.20.101.101   <none>                                                                    6379/TCP         115s   app=redis,role=master
redis-slave    ClusterIP      172.20.60.151    <none>                                                                    6379/TCP         95s    app=redis,role=slave

ブラウザで動作確認までできました。

f:id:enokawaa:20200608231549p:plain

Rader

Twistlock の代表的な機能である Radar をスクショ祭でお届けします。

docs.paloaltonetworks.com

俯瞰的に Pod を視認することが可能です。

f:id:enokawaa:20200608232041p:plain

Docker image や Namespace が確認できたり。

f:id:enokawaa:20200608232145p:plain

Docker image の脆弱性も確認可能です。

f:id:enokawaa:20200608232617p:plain

Host OS で起動しているプロセスの一覧も確認できました。

f:id:enokawaa:20200608233208p:plain

そのプロセスが起動している Host や起動ユーザも確認できたり。

f:id:enokawaa:20200608233632p:plain

Host OS で起動している Docker や Kubernetes のバージョンも確認可能。kernel の CVE も確認できました。親切に Amazon Linux Security Center へのリンクも記載されています。嬉しいですね。 Docker image やホストだけではなく、コンテナランタイムの脆弱性にもいち早く気付けそうです。

f:id:enokawaa:20200608233926p:plain

他にも多くの機能が

今回は Twistlock の機能を中心に紹介しましたが、Prisma Cloud には他にも AWS や Azure、GCP、Alibaba Cloud などのクラウドアカウントを追加も可能で、アカウントの設定内容なども横断的に監視することが可能です。 複数のクラウドアカウントを管理していて、かつ Host や Kubernetes、Lambda などの FaaS をまとめていい感じにセキュリティを俯瞰したいというニーズにはマッチしそうです。

TerraformでEKSを作成する

Terraform で EKS を作成してみたのでメモとして残しておきます。 サンプルは GitHub に置いてます。README 通りに進めればデプロイできます。不備があれば Issue や PR もらえると喜びます。

github.com

なぜeksctlじゃないのか

github.com

ざっと理由を挙げると以下です。

  • EKS Cluster に関連しない AWS リソースの管理が複雑となる
    • EKS Cluster 群は eksctl で、それ以外はマネコンや AWS CLI、Terraform とかとなると運用辛そう
  • 細かいパラメータの指定ができない
    • Security Group のルールとか Launch Templete のパラメータとか

誤っているとかあればブコメTwitter で教えてください。 念の為に書いておくと、僕は eksctl を dis るつもりは全く無く、なんなら今でも検証用途でサクッと EKS Cluster 作りたい時は eksctl でやっています。 プロダクションで eksctl 使ってるよって人がいればどういう運用をしているのか聞いてみたいです。

Managed Node Groupを利用しない

Managed Node Group は便利ですが、様々な制約があります。( 2020/06/07 現在

docs.aws.amazon.com

全ては網羅していませんが、代表的なものを挙げると以下です。

  • UserData がカスタムできない 1
  • Spot Instance が利用できない 2
  • Launch Template が指定できない 3

特に UserData がカスタムできない点が痛いです。Docker や kubelet の Config を修正することができないほか、 kubelet を起動する際に --register-with-taints オプションで Taints を割り当てることもできません。 Unmanaged Node Group の場合は UserData で bootstrap.sh の引数として --register-with-taints を渡すことが可能です。

その他の Issue については aws/containers-roadmap に挙がっていますので、これ欲しい!という機能があれば Issue を立てるか既存の Issue に +1 しましょう!

工夫したところとか

template_fileData Sourceの利用

Terraform の template_file Data Source を利用して Woker node の UserData を指定しました。

www.terraform.io

Worker node を作成した EKS Cluster に参加させる際に /etc/eks/bootstrap.sh の引数で EKS Cluster 名を指定する必要があり、そこで template_file を利用することで、ShellScript に EKS Cluster 名をハードコードせずとも動的に指定することが可能です。便利。

EKS最適化AMIのAMI IDをSSM Parameter Storeから取得

EKS 最適化 AMI の AMI ID は SSM Parameter Store に存在します。

docs.aws.amazon.com

以下の様に Data Source で SSM Parameter Store の情報を取得し、value を利用することが可能です。便利。

data "aws_ssm_parameter" "eks_optimized_ami_id" {
  name = "/aws/service/eks/optimized-ami/1.16/amazon-linux-2/recommended/image_id"
}

resource "aws_launch_template" "eks_worker_node_template" {
  .
  .
  .
  image_id = data.aws_ssm_parameter.eks_optimized_ami_id.value
  .
  .
  .
}

www.terraform.io

ハマったとことか

殆どドキュメントに記載されている内容です。

docs.aws.amazon.com

Worker nodeが認識されない

$ kubectl get nodes
No resources found in default namespace.

様々な問題が考えられますが、僕の場合は Security Group に問題がありました。 Terraform で Cluster 用の Security Group を作成していましたが、aws_eks_cluster Resource で security_group_ids を指定していなかったことが原因でした。 下記の様に security_group_ids を指定することで、EKS 上では Additional security groups として認識されます。

vpc_config {
  security_group_ids = [ aws_security_group.eks-cluster-sg-01.id ]
  subnet_ids         = [
    aws_subnet.public-a-01.id,
    aws_subnet.public-b-01.id,
    aws_subnet.protected-a-01.id,
    aws_subnet.protected-b-01.id
  ]
}

Additional security groups は EKS Cluster 作成後は更新できないため、注意しましょう。( 僕は Cluster 再作成しました...

aws-auth configMap のデプロイ漏れ

aws-auth configMap のデプロイし忘れで Worker node が認識されませんでした。

docs.aws.amazon.com

API server endpoint accessの設定不備

kubectlなどでローカルマシンから EKS の API server endpoint に対してリクエストを行う場合、接続元 IP アドレスを制限することが可能です。

docs.aws.amazon.com

ドキュメントにも記載されていますが、IP 制限を行う場合は API server endpoint access の設定で Private からも許可する設定を行うか、Worker node がインターネットへ出る時の Public IP も Public access source whitelist に追加する必要があります。つまり、下記の設定だと Worker node と EKS Cluster の Control Plane ( kube-apiserver ) 間の通信ができません。

f:id:enokawaa:20200606185601p:plain

なので僕は下記の様に設定しました。これで Worker node と Control Plane 間の通信が可能となりました。

f:id:enokawaa:20200606190914p:plain

次は

ALB Ingress Controllerについて書こうかと思います。

github.com

2019年振り返り

tl;dr

こんにちは。えのかわです。昨年に引き続き、2019年を振り返ります

blog.enokawa.co

2019年の目標

2018年振り返りでも書いているが改めて。

  1. 5 つの OSS にコントリビュートする
  2. Go 言語で 1 つ OSS を公開する
  3. コンテナを人に説明できるレベルまで理解する

結果的に達成できたのは 3 のみだった。コンテナ(主に Docker)について社内で勉強会を開催したり、コンテナ初心者に理解してもらえるように説明できたので、達成できたかなと思っている。

1 については、2 つの OSS にはコントリビュートできたが、あと 3 つ足りなかった。

github.com

github.com

2 については、みんGo(気づいたら改訂2版が出ていた)すら読んでいない。。Web ベースのチャットツールを遊びで作ってみたレベルなので未達。

github.com

2019年振り返り

本題の 2019 年振り返り。今年も仕事が忙しかった。慢性的に忙しかった。ただ忙しい中でもどうにか時間を作ってコンテナの勉強をしたり、社内で AWS 認定資格の勉強会を開催したり、Software Design に寄稿したりしてエンジニアとしての活動を維持できたかなと思っている。その甲斐もあってか、Japan APN Ambassador 2019 に選出いただいた。APN Ambassador 選出は、アイレットに入社して 5 年目で、ようやく自分が AWS エンジニアとして認められたと感じた。APN Ambassador 選出もあり、re:Invent 2019 へ行くこともできた(行かせてくれた会社に感謝!!)。入社して一番嬉しかった。

aws.amazon.com

一応 2019 年の output とか成果を纏めておく。

振り返ってみると、今年は色々やったなぁと。2018 年と比べると外に向けての output ができて良かった。

2020年どうする

目標は↓。

  1. Kubernetes を人に説明できるレベルまで理解する
  2. Go 言語で 1 つ OSS を公開する
  3. GCP を完全に理解する(ためにブログを5本以上書く)

Kubernetes はやるやる言って全然やってこなかったのでいい加減やる。Go については 2019 年の目標に引き続きやる。そもそも何一つプログラミング言語を修得していないことに大きなコンプレックスがある。のでみんGo を読んで写経した上で何かしらの Web サービスを作って OSS として公開したい。GCP は弊社アイレットでもパートナーとして認定されたのでやる。

3 つの目標に関わらず、ブログなどの output は 2019 年同様のペースで進めたい。

ということで

来年から本気だす。

CircleCIユーザーコミュニティミートアップ@福岡に登壇してきました #CircleCIJP

tl;dr

こんばんは。えのかわです。福岡で下記のイベントに登壇してきたのでレポートします。

circleci.connpass.com

会場提供は株式会社ヤマップさんです。かの有名(?)な「新・令和の間」に案内されました。 あと CircleCI さんから「チョットデキル」 Tシャツもらえて嬉しい。僕のレベルは「完全に理解した」ですがw

f:id:enokawaa:20191211213641j:plain

2019/12/13 追記

Togetter で纏められていたので追記。

togetter.com

CircleCI ユーザーコミュニティについて - YAMAP川原さん

CircleCI ユーザコミュニティについて説明いただきました。川原さんの前職が僕の現職なので、なんだか懐かしい気分になりました。福岡では東京とは違ってアットホーム感を出したいとのことでした。質問などもしやすい雰囲気なので良いですね。

f:id:enokawaa:20191211213716j:plain

YAMAP アプリの CI 環境のおはなし (iOS版) - YAMAP藤木さん

  • ビルド・テスト・リリース環境
    • タスク管理: Backlog
    • レポジトリ: GitHub
    • ビルドツール: fastlane
    • ビルド環境: CircleCI
    • リリース・テスト: TestFlight
  • Rakefile で Buildしている
  • CI でやらせることはシンプルに
    • 藤木さんが Jenkins 職人化(=属人化)してしまった経緯から
  • PR を作成した時に Build を走らせる
  • つらいところ
  • CircleCI に任せすぎて費用が跳ね上がってる
    • TestFlight へのアップロードに約 30 分
    • TestFlight を使うメリットが大きいのでしょうがない
    • CPU Usage 単位で課金できるといいな。。。

職人化(属人化)分かりすぎる。。

CircleCI Orbs にコントリビュートした話 - @enkw_

オレです。こちらのエントリの内容を深堀りしてお話しました。

enokawa.hatenablog.jp

資料は下記です。

speakerdeck.com

いくつか質問をいただいたので、メモとして残しておきます。

Q1. 他に利用している Orbs はあるか

はい。 コントリビュートしたのは circleci/aws-ecs ですが、Docker image の Build/Push のために circleci/aws-ecr も利用しています。

サンプルの .circleci/config.yml を Gist で公開したので、参考にしてもらえると。

CircleCI Orbs Sample · GitHub

Q2. 自前 Orbs として公開しなかった理由は?

本家 Orbs に PR 出して取り込まれた方がカッコいいと思ったからです。あとは、そこまで急ぎではない要件だったので自前 Orbs として公開しませんでした。

その後は、実際に CircleCI の画面を開いてデプロイされた結果とかを見たいとの要望があったので、画面に写したりしてました。これもアットホームな雰囲気だからこそできることですね。

Android Wear アプリを提供するの会社の CI 環境 (と多様化するビルド方法) (仮) - @rakuishi07さん

  • aad(Android App Bundle)
    • 各デバイスごとに最適化された apk を含む(イメージ)
    • apk を比較して配信サイズが 20MB → 13MB(40% 減)になった
  • Executor/Commands を利用
  • Slack Channel が汚染される問題
    • Slack orb を利用する

apk はなんとなく知ってましたが、aad というものがあるんですね。勉強になりました。

アットホームな雰囲気が心地よかった

都心のイベントとは違い、FAQ や懇親会なども終始アットホームな雰囲気で、自然と皆が話し合っているのがすごく良かったです。福岡、また来ます。あと高校一年生の方も参加されていて、でその方がすげー人で、日本の未来は明るいなぁと思いました(小並感

あと今日のハイライトは、CircleCI の中の人が教えてくれたのですが僕が出した PR のレビューをしてくれた lokst が、今日の僕の登壇を知ってすごくエキサイティングしていたことです。そのことを伝えて(教えて)くれた CircleCI の中の方には感謝しかありません。いつか会えるといいなぁ。