Slide 1

Slide 1 text

© Link and Motivation Group AWS Aliasを使った開発生産性向上施策について 株式会社リンクアンドモチベーション Developer Productivity Unit 岸本直樹

Slide 2

Slide 2 text

2 © Link and Motivation Group 自己紹介 岸本 直樹(きしもと なおき) 株式会社リンクアンドモチベーション Developer Productivity Unit SREG @sre_naokishi 2019年入社。2020年からSREとして活動。 ECS移設から開発メトリクス向上Pjtで4keysの一つであ るデプロイ頻度をMiddleからHighへ、生産性の高い組織 へと牽引

Slide 3

Slide 3 text

3 © Link and Motivation Group アジェンダ ❏ AWS Aliasを使うにあたっての背景 ❏ 課題ケース①EC2インスタンスにSSHする運用 ❏ 課題ケース②ECS環境にCodebuildでデプロイ実行する運用 ❏ まとめ ❏ 余談

Slide 4

Slide 4 text

4 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷顕在化していた課題 AWS上にあるテスト環境へのデプロイす るために用意されてるCodebuild動かす かぁ 開発者A

Slide 5

Slide 5 text

5 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷顕在化していた課題 開発者A AWSにログインせずとも、ローカ ルから叩けるよ! 開発者B AWS上にあるテスト環境へのデプロイす るために用意されてるCodebuild動かす かぁ

Slide 6

Slide 6 text

6 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷顕在化していた課題 開発者A AWSにログインせずとも、ローカ ルから叩けるよ! え!?そんな方法あるの?? 知らなかった!! 開発者B

Slide 7

Slide 7 text

7 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷顕在化していた課題 開発者A AWSにログインせずとも、ローカ ルから叩けるよ! え!?そんな方法あるの?? 知らなかった!! 開発者B AWSの操作に関して 開発者全員が生産性高い状態を標準化したい

Slide 8

Slide 8 text

8 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷標準化するのにあたっての要件 導入が容易であること 要件 自由にカスタマイズができること AWSと親和性が高いこと

Slide 9

Slide 9 text

9 © Link and Motivation Group AWS Aliasを使うにあたっての背景 ▷標準化するのにあたっての要件 導入が容易であること 要件 自由にカスタマイズができること AWSと親和性が高いこと AWS Aliasが要件を満たす

Slide 10

Slide 10 text

10 © Link and Motivation Group AWS Aliasとは? aws cliが使えれば、セットアップが容易 bashスクリプトでエイリアスが作成できる └ ~/.aws/cli/aliasに記載 $ mkdir -p ~/.aws/cli $ echo '[toplevel]' > ~/.aws/cli/alias test-alias = !f() { aws sns publish --message "${1}" --phone-number ${2} }; f 頻繁に使用するコマンドやスクリプトを短縮するために AWS Command Line Interface (AWS CLI) で作成できるショートカット

Slide 11

Slide 11 text

© Link and Motivation Group 11 課題ケース① EC2インスタンスにSSHする運用

Slide 12

Slide 12 text

12 © Link and Motivation Group どういう課題か EC2サーバーに入るためには踏み台サーバーを経由

Slide 13

Slide 13 text

13 © Link and Motivation Group EC2サーバーに入るためには踏み台サーバーを経由 各サーバーのIPを特定するために、AWSアカウント にログインし、該当IPを検索してSSH どういう課題か ssh ec2-user@${インスタンスのIP} -i ~/.ssh/key コマンド:

Slide 14

Slide 14 text

14 © Link and Motivation Group EC2サーバーに入るためには踏み台サーバーを経由 各サーバーのIPを特定するために、AWSアカウント にログインし、該当IPを検索してSSH どういう課題か ssh ec2-user@${インスタンスのIP} -i ~/.ssh/key コマンド: 生産性が低いことが当たり前になっていた!!

Slide 15

Slide 15 text

15 © Link and Motivation Group EC2サーバーに入るためには踏み台サーバーを経由 各サーバーのIPを特定するために、AWSアカウント にログインし、該当IPを検索してSSH どういう課題か ssh ec2-user@${インスタンスのIP} -i ~/.ssh/key コマンド: 生産性が低いことが当たり前になっていた!! 踏み台サーバーのなかにAWS Aliasを導入し SSHを自動化

Slide 16

Slide 16 text

16 © Link and Motivation Group AWS Aliasを使って自動化

Slide 17

Slide 17 text

17 © Link and Motivation Group 実際に作成したもの ssh-instance = !f() { read -p "SSHしたいEC2インスタンス名を入力してください(曖昧検索されます):" INSTANCE_NAME instance_list=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=*$INSTANCE_NAME*" "Name=instance-state- name,Values=running" | jq -r .Reservations[].Instances[].Tags[].Value) echo "SSHしたいインスタンスの番号を選択してください" select instance in $instance_list do instance_name=$instance break done instance_ip=$(aws get-instance-ip $instance_name) ssh ec2-user@${instance_ip} -i ~/.ssh/key }; f

Slide 18

Slide 18 text

18 © Link and Motivation Group 実際に作成したもの ssh-instance = !f() { read -p "SSHしたいEC2インスタンス名を入力してください(曖昧検索されます):" INSTANCE_NAME instance_list=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=*$INSTANCE_NAME*" "Name=instance- state-name,Values=running" | jq -r .Reservations[].Instances[].Tags[].Value) echo "SSHしたいインスタンスの番号を選択してください" select instance in $instance_list do instance_name=$instance break done echo "どちらのユーザーでSSHしますか?" select user in mcs2-user ec2-user do login_user=$user break done instance_ip=$(aws get-instance-ip $instance_name) ssh ${login_user}@${instance_ip} -i ~/.ssh/dev-ap-login-key.pem }; f 少しの工夫でトイルを月6時間ほどの時間削減 (1日にECSを使う開発者:6人×前の方法でSSHするのにかかる時間: 2min)

Slide 19

Slide 19 text

© Link and Motivation Group 19 課題ケース②ECS環境にCodebuildでデプロイ実行する運用

Slide 20

Slide 20 text

20 © Link and Motivation Group どういう課題か ECS環境で自分のブランチをテストしたい時の運用

Slide 21

Slide 21 text

21 © Link and Motivation Group どういう課題か ECS環境で自分のブランチをテストしたい時 毎回、AWSに入り、環境変数のセットし実行する必 要がある

Slide 22

Slide 22 text

22 © Link and Motivation Group どういう課題か ECS環境で自分のブランチをテストしたい時 コミット変更するたびに、AWSコンソールを開いて 環境変数のセットという作業が当たり前になっていた 毎回、AWSに入り、環境変数のセットし実行する必 要がある

Slide 23

Slide 23 text

23 © Link and Motivation Group どういう課題か ECS環境で自分のブランチをテストしたい時 毎回、AWSに入り、環境変数のセット、もしくは自 分が一度起動したCodebuildの実行履歴を探し、再実 行する必要がある コミット変更するたびに、AWSコンソールを開いて 環境変数のセットという作業が当たり前になっていた ローカルにCodebuild実行用のAWS Aliasを登録してもらい 無駄な思考・時間を削減

Slide 24

Slide 24 text

24 © Link and Motivation Group AWS Aliasを使った効率化

Slide 25

Slide 25 text

25 © Link and Motivation Group 実際に作成したもの deploy-ecs = !f() { read -p "環境名を検索します。検索したい環境名を記入して下さい:" search_text stack_name_list=$(aws ecs list-clusters | jq -r '.clusterArns[]|select(contains('¥"${search_text}¥"'))' | grep web | aw k -F'/' '{print $2}' |awk '{sub("-blue.*", "");print $0;}')$ echo "deployしたい環境名を指定して下さい" select stack in $stack_name_list do stack_name=$stack break done echo "${stack_name}を選択しました" read -p "デプロイしたいブランチ名を指定して下さい:" git_branch aws codebuild start-build --project-name update-ecs-env --environment-variables-override name=TERRAFORM_COMMAND,value=apply,type=PLAINTEXT name=STACK_NAME,value=${stack_name},type=PLAINTEXT name=PARAMS,value="GIT_BRANCH=${git_branch}", type=PLAINTEXT echo "デプロイ実行しました" }; f

Slide 26

Slide 26 text

© Link and Motivation Group 26 まとめ

Slide 27

Slide 27 text

27 © Link and Motivation Group まとめ Good More 少しの工夫で 大きく生産性を向上できる ● AWSを使う作業系はaliasで簡単に かける ● 今までの当たり前だと思っていた トイルが無くなる 個人から全体へ ナレッジの共有する仕組みの運用 ● 個人ごとで工夫しているナレッジ を全体に共有し、生産性を向上し ていこうという運用を形骸化しな いようにするのが難しい

Slide 28

Slide 28 text

© Link and Motivation Group 28 余談

Slide 29

Slide 29 text

29 © Link and Motivation Group コンテナに直接入るのに最適なツール ECSKがおすすめ(https://github.com/yukiarrr/ecsk#ecsk)