Submit Search
仮想通貨取引所 bitbank の IaC の導入と実践
0 likes
2,945 views
bitbank, Inc. Tokyo, Japan
X-Tech JAWS#2 @AWS
Engineering
Read more
1 of 45
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
More Related Content
PDF
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
PPT
RecoChoku tech night #09 -reinvent2018報告会- オープニング
recotech
PDF
ビットバンクにおける少人数で支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
PDF
DSXでデータ・サイエンス
BMXUG
PDF
Deploy TypeScript with CodePipeline in Fargate
bitbank, Inc. Tokyo, Japan
PPTX
IBM Cloud 2017年 振り返り
Hayama Kyouhei
PDF
IBM Cloud Private の全貌 (Kubernetesベース)
capsmalt
PDF
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
RecoChoku tech night #09 -reinvent2018報告会- オープニング
recotech
ビットバンクにおける少人数で支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
DSXでデータ・サイエンス
BMXUG
Deploy TypeScript with CodePipeline in Fargate
bitbank, Inc. Tokyo, Japan
IBM Cloud 2017年 振り返り
Hayama Kyouhei
IBM Cloud Private の全貌 (Kubernetesベース)
capsmalt
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
What's hot
(20)
PPTX
AWS IoTを使った双方向通信システムの実装と注意点
Kohei MATSUSHITA
PDF
Lightning Network, Swap, Nloop
bitbank, Inc. Tokyo, Japan
PDF
めっちゃお得なDNS。Alibaba Cloud DNS を diggin’ @Alibaba Cloud Developers Meetup #2 - ...
Masaki Yoshimura
PPTX
201312クラウド女子会
Yasuhiro Araki, Ph.D
PPTX
Alieaters2 alibabacloud 20180320
Qiu Binbin
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
PDF
Deploy TypeScript Application by CodePipeline
bitbank, Inc. Tokyo, Japan
PDF
Ad Tech on AWS - IVS CTO Night and Day Spring 2016
Eiji Shinohara
PPTX
SORACOM と Azure で IoT
kekekekenta
PDF
Kubernetes+Ansibleでつくる最新Linuxディストリビューション開発環境
BMXUG
PDF
5分でわかるAWS IoT! - あなたも今日からIoT生活 -
Toshiaki Enami
PDF
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
Amazon Web Services Japan
PDF
NW-JAWS x Tech-on勉強会:AWS Transit Gateway で広がるネットワークアーキテクチャ
Shuji Kikuchi
PDF
15分でわかるAWSクラウドで コスト削減できる理由
Yasuhiro Horiuchi
PPTX
Networking for cloud migration
DeNA
PDF
K8s-icp-capsmalt-jjugccc2018spring
capsmalt
PDF
Architecting on Alibaba Cloud - 超基礎編 -
真吾 吉田
PDF
サーバーレス・アーキテクチャ概要
真吾 吉田
PDF
AWSマネージドサービスをフル活用したヘルスケアIoTプラットフォーム
Hiroki Takeda
PDF
170311 JAWS days 2017 fintech
Toshihide Atsumi
AWS IoTを使った双方向通信システムの実装と注意点
Kohei MATSUSHITA
Lightning Network, Swap, Nloop
bitbank, Inc. Tokyo, Japan
めっちゃお得なDNS。Alibaba Cloud DNS を diggin’ @Alibaba Cloud Developers Meetup #2 - ...
Masaki Yoshimura
201312クラウド女子会
Yasuhiro Araki, Ph.D
Alieaters2 alibabacloud 20180320
Qiu Binbin
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
Deploy TypeScript Application by CodePipeline
bitbank, Inc. Tokyo, Japan
Ad Tech on AWS - IVS CTO Night and Day Spring 2016
Eiji Shinohara
SORACOM と Azure で IoT
kekekekenta
Kubernetes+Ansibleでつくる最新Linuxディストリビューション開発環境
BMXUG
5分でわかるAWS IoT! - あなたも今日からIoT生活 -
Toshiaki Enami
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
Amazon Web Services Japan
NW-JAWS x Tech-on勉強会:AWS Transit Gateway で広がるネットワークアーキテクチャ
Shuji Kikuchi
15分でわかるAWSクラウドで コスト削減できる理由
Yasuhiro Horiuchi
Networking for cloud migration
DeNA
K8s-icp-capsmalt-jjugccc2018spring
capsmalt
Architecting on Alibaba Cloud - 超基礎編 -
真吾 吉田
サーバーレス・アーキテクチャ概要
真吾 吉田
AWSマネージドサービスをフル活用したヘルスケアIoTプラットフォーム
Hiroki Takeda
170311 JAWS days 2017 fintech
Toshihide Atsumi
Ad
Similar to 仮想通貨取引所 bitbank の IaC の導入と実践
(20)
PDF
ソフトバンクにおける Java による クラウドネイティブの実現
Shigeru Tatsuta
PDF
Real World Android Akka - 日本語版
Taisuke Oe
PDF
Azureをフル活用したサーバーレスの潮流について
真吾 吉田
PDF
Serverless for VUI
真吾 吉田
PDF
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
PDF
クラウド+ソフトウェアで起こすイノベーション
Serverworks Co.,Ltd.
PDF
AWS CloudFormationによるInfrastructure as Codeの実現
HIRA
PDF
試して学べるクラウド技術! OpenShift
Etsuji Nakai
PDF
Amazon EC2 Container Service Deep dive
Amazon Web Services Japan
PDF
インフラセキュリティブートキャンプ #seccamp
Masahiro NAKAYAMA
PDF
【初心者向け】API を使ってクラウドの管理を自動化しよう
富士通クラウドテクノロジーズ株式会社
PDF
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
真吾 吉田
PDF
AWSによるサーバーレスアーキテクチャ
真吾 吉田
PPTX
SpringOne Platform Replay -Pivotal Cloud Foundry-
CASAREAL, Inc.
PDF
UnityとAmazon Web Servicesで生み出す新しい価値
Keisuke Nishitani
PPTX
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
Yasuhiro Matsuo
PDF
サーバーレスの今とこれから
真吾 吉田
PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
PDF
AWS Introduction for Startups
akitsukada
KEY
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
ソフトバンクにおける Java による クラウドネイティブの実現
Shigeru Tatsuta
Real World Android Akka - 日本語版
Taisuke Oe
Azureをフル活用したサーバーレスの潮流について
真吾 吉田
Serverless for VUI
真吾 吉田
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
クラウド+ソフトウェアで起こすイノベーション
Serverworks Co.,Ltd.
AWS CloudFormationによるInfrastructure as Codeの実現
HIRA
試して学べるクラウド技術! OpenShift
Etsuji Nakai
Amazon EC2 Container Service Deep dive
Amazon Web Services Japan
インフラセキュリティブートキャンプ #seccamp
Masahiro NAKAYAMA
【初心者向け】API を使ってクラウドの管理を自動化しよう
富士通クラウドテクノロジーズ株式会社
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
真吾 吉田
AWSによるサーバーレスアーキテクチャ
真吾 吉田
SpringOne Platform Replay -Pivotal Cloud Foundry-
CASAREAL, Inc.
UnityとAmazon Web Servicesで生み出す新しい価値
Keisuke Nishitani
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
Yasuhiro Matsuo
サーバーレスの今とこれから
真吾 吉田
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
AWS Introduction for Startups
akitsukada
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
Ad
More from bitbank, Inc. Tokyo, Japan
(20)
PDF
インフラチームの歴史とこれから
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのデプロイ戦略について
bitbank, Inc. Tokyo, Japan
PDF
ビットバンク流 アジャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクで求められるプロジェクトマネジメント
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのマッチングエンジン.pdf
bitbank, Inc. Tokyo, Japan
PDF
bitbank Corporate Information
bitbank, Inc. Tokyo, Japan
PDF
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
PDF
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
PDF
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
bitbank, Inc. Tokyo, Japan
PDF
中規模Angularアプリケーションの再設計
bitbank, Inc. Tokyo, Japan
PDF
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
bitbank, Inc. Tokyo, Japan
PPTX
Ethereumのシャーディング概論
bitbank, Inc. Tokyo, Japan
PDF
Daocasinoにおけるstate channel実装
bitbank, Inc. Tokyo, Japan
PDF
TypeScriptでライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
PDF
20181108 bitbank lt-maintainable-e2e-testing
bitbank, Inc. Tokyo, Japan
PDF
Angular Refactoring in Real World
bitbank, Inc. Tokyo, Japan
PDF
アプリケーション開発目線から考える テストの書き方について
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクの開発におけるAWSの利用
bitbank, Inc. Tokyo, Japan
PDF
Asana handson
bitbank, Inc. Tokyo, Japan
インフラチームの歴史とこれから
bitbank, Inc. Tokyo, Japan
ビットバンクのデプロイ戦略について
bitbank, Inc. Tokyo, Japan
ビットバンク流 アジャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
ビットバンクで求められるプロジェクトマネジメント
bitbank, Inc. Tokyo, Japan
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
bitbank, Inc. Tokyo, Japan
ビットバンクのマッチングエンジン.pdf
bitbank, Inc. Tokyo, Japan
bitbank Corporate Information
bitbank, Inc. Tokyo, Japan
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
bitbank, Inc. Tokyo, Japan
中規模Angularアプリケーションの再設計
bitbank, Inc. Tokyo, Japan
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
bitbank, Inc. Tokyo, Japan
Ethereumのシャーディング概論
bitbank, Inc. Tokyo, Japan
Daocasinoにおけるstate channel実装
bitbank, Inc. Tokyo, Japan
TypeScriptでライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
20181108 bitbank lt-maintainable-e2e-testing
bitbank, Inc. Tokyo, Japan
Angular Refactoring in Real World
bitbank, Inc. Tokyo, Japan
アプリケーション開発目線から考える テストの書き方について
bitbank, Inc. Tokyo, Japan
ビットバンクの開発におけるAWSの利用
bitbank, Inc. Tokyo, Japan
Asana handson
bitbank, Inc. Tokyo, Japan
仮想通貨取引所 bitbank の IaC の導入と実践
1.
仮想通貨取引所bitbank のIaC の導⼊と実践 2019/07/30
X-Tech JAWS @AWS →← 1 / 45
2.
Who? Shogo Ishikawa (@koarakko99) Engineer
@ Bitbank (2018/04-) AWS Team CI/CD Account management Fargate, EB Favorite service CloudFormation, VPC →← 2 / 45
3.
Who? Yuta Suzuki (@euxn23) Engineer
@ Bitbank (2018/07-) Developer Success Team DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか AWS, DevOps, NodeJS Engineer formerly, Application Engineer (Angular / TS Backend) Using AWS half a year awswakaran.tokyo co-founder (w/@potato4d)
4.
bitbank とは
5.
ビットバンクは、ビットコインなどを扱う仮想通貨取引所です
6.
bitbank.cc はAngular +
TypeScript + AWS です
7.
bitbank における活⽤状況 ElasticBeanstalk を利⽤したCodePipeline CloudFormation
StackSets を利⽤したアカウント管理 GitLab Runner の構築
8.
導⼊編
9.
なぜIaC を導⼊したのか? リソースが何が起因作られたかわからなくなった 同じ環境を⼿作業で作るのがシンドかった 環境を何回も作り直したかった。
10.
なぜCloudFormation を採⽤したか? AWS 以外のクラウドの利⽤予定がなかった AWS
ドキュメントに慣れていたため 悩みをAWS サポートに相談できるから
11.
CloudFormation の習得するためにやったこと AWS CloudFormation
の公式ドキュメントを読んだ GitHub で他⼈のコードを読んだ Resource 名で検索するとヒットするのでそれを読んだ
12.
特に習得しておくと便利なテクニック 疑似パラメータを積極的に使う。 なるべくnested しておき、汎⽤性を⾼める 最初⼿作業で作って、describe の結果を利⽤
13.
疑似パラメータを積極的に使う。
14.
アカウントID => AWS::AccountId リージョン=>
AWS::Region スタックID => AWS::StackId など
15.
なるべくnested しておき、汎⽤性を⾼める Resources: IamRole: Type: AWS::CloudFormation::Stack Properties: TemplateURL:
../../components/iam.yml Parameters: IamPolicy: !Ref IamPolicy MyInstance: Type: AWS::CloudFormation::Stack Properties: TemplateURL: ../../components/ec2.yml Parameters: SubnetId: !Ref SubnetId ImageId: !Ref ImageId InstanceType: !Ref InstanceType InstanceName: MyInstance KeyName: !Ref KeyName IamRole: !GetAtt IamRole.Outputs.MyInstanceProfile SecurityGroupId: !Ref SecurityGroupId
16.
最初⼿作業で作って、describe の結果を利⽤
17.
$ aws codepipeline
get-pipeline ... { "pipeline": { "name": "test", "roleArn": "arn:aws:iam::xxxxxxxxxxxx:role/dev-test-codepipeline", "artifactStore": { "type": "S3", "location": "testbucket" }, "stages": [ { "name": "Source", "actions": [ { "name": "App", "actionTypeId": { "category": "Source", "owner": "AWS", "provider": "CodeCommit", "version": "1" }, "runOrder": 1, "configuration": { "BranchName": "dev", "RepositoryName": "testrepo" }, "outputArtifacts": [ { "name": "App" } ], "inputArtifacts": [] } ] }, ...
18.
CLI の結果を転記する Pipeline: Type: AWS::CodePipeline::Pipeline Properties: Name:
!Ref ApplicationName RoleArn: !GetAtt CodePipelineServiceRole.Arn ArtifactStore: Type: S3 Location: testbucket Stages: - Name: Source Actions: - Name: App ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit Configuration: RepositoryName: testrepo BranchName: dev OutputArtifacts: - Name: App RunOrder: 1
19.
クロススタック参照は使わなかった以下のような記述 Outputs: WebSG: Description: Service VPC Value:
!Ref ServiceVPC Export: Name: 'stack-service-vpc'
20.
使わなかった理由 クロススタック参照の値を変更がしづらい テスト時などで値を変えたい
21.
ParameterStore を使うメリット 値の変換が簡単 ⼀覧で⾒やすい
22.
代わりにParameterStore に値を⼊れたSG のARN
をParameterStore に格納 Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: test-sg VpcId: !Ref VpcId SecurityGroupEgress: - IpProtocol: '-1' CidrIp: 0.0.0.0/0 SecurityGroupIdParameter: Type: AWS::SSM::Parameter Properties: Name: test-sg Type: String Value: !Ref InstanceSecurityGroup 取得時 AWSTemplateFormatVersion: '2010-09-09' Description: Main template. Parameters: SecurityGroupId: Type: AWS::SSM::Parameter::Value<String<AWS::EC2::SecurityGroup::Id>> Default: test-sg
23.
そのほか、CloudFormation で苦労したところ サービスの制約 ⽂字数制限 IAM 権限の不⾜ 権限を厳密に書きすぎて、必要な権限が⾜りない 全部が対応している訳ではない。
24.
導⼊編まとめCloudFormation は最初にドキュメントを読んで全体をつかんだ⽅がよい 実際に作るときは、AWS CLI
を使うことで簡単にResource の値を⼊れられる
25.
実践編
26.
Q. CloudFormation の実⾏、どうしてますか?
27.
A. make?make は冪等性担保と相性が良い make
は複雑な引数処理ができる make は使い回しができる
28.
_⼈⼈⼈⼈⼈_ > できる <  ̄Y^Y^Y^Y
 ̄ (簡単とは⾔っていない)
29.
Q. make ではtoo
much なケースでは?
30.
A. npm script
31.
bitbank はJS が社内標準語なので package.json(npm
run) で⼀部管理しています (CDK がnpm ecosystem なので、今後AWS 系のエンジニアにもnpm は普及するはず)
32.
メリット 何をやっているかわかりやすくするため IaC は読むためにあるので、読みやすさは⼤事 コマンドのオペミスを減らすため IaC コマンドを⼿順書からコピー&ペーストしているとそのうち絶対にミスするので
33.
例 GitLab CI Runner
の構築 フロントエンド検証環境の構築
34.
なぜCFn の簡易コマンド化が必要か デプロイ対象や検証環境ごとに権限対象が異なる デプロイ対象や検証環境が増えるたびに環境を作成する AWS 担当以外の開発者もCFn
を触れることで開発を⾼速化できる
35.
Q. CloudFormation にないところはどう実⾏するか
36.
A. SDK を使って冪等っぽくなるようにたたく
37.
具体例 Fargate の環境変数のValueFrom (ParameterStore
からの取得は) ⻑らくCFn では記述できなかった 現在は実装済み TaskDefinitions を更新するたびにただの環境変数に戻ってしまう デプロイの都度、主導で直すのは⼿間だし、忘れる
38.
SDK で解決(冪等になります) const taskDefinitionFamilies
= await ecs.listTaskDefinitionFamilies({ status: 'ACTIVE' }).promise(); if (!taskDefinitionFamilies.families) { throw new Error('listTaskDefinitionFamilies failed'); } for (const family of taskDefinitionFamilies.families) { console.log(`${family} task definition update start`); const { taskDefinition } = await ecs.describeTaskDefinition({ taskDefinition: family }).promise(); if (!taskDefinition || !taskDefinition.containerDefinitions) { throw new Error('describeTaskDefinition failed'); } const { containerDefinitions, executionRoleArn, cpu, memory, taskRoleArn, requiresCompatibilities, networkMode } = taskDefinition; const requestContainerDefinitions = containerDefinitions.map((def) => ({ ...def, secrets: [ ...(def.secrets || []), ...def .environment!.filter((env) => envToSecretKeys.includes(env.name!)) .map((env) => ({ name: env.name!, valueFrom: env.value!, })), ], environment: def.environment!.filter((env) => !envToSecretKeys.includes(env.name!)), }));
39.
Q. CFn のparameter-overrides
って実⾏時エラー出したくない
40.
A. 型安全になるようにTypeScript のtemplate
から注⼊する (quicktype.js を使いました)
41.
config.template.yml.ts import { Convert,
Env } from './env.quicktype'; export function prepare(env: string = 'default'): Env { const envJson = JSON.stringify(require(`./.env.${env}`)); return Convert.toEnv(envJson); } // language=yaml export default ({ envName, nodeEnv, awsAccountId, defaultCpu, defaultMemoryMb }: Env) => ` all: Application: app SSMKeyPrefix: /${envName}/ ...
42.
env.quicktype.ts export interface Env
{ envName: string; nodeEnv: string; awsAccountId: string; defaultCpu: string; defaultMemoryMb: string; } env.develop.ts import { Env } from './env.quicktype'; const env: Env = { envName: 'app-dev', nodeEnv: 'develop', awsAccountId: '123456789012', defaultCpu: '256', defaultMemoryMb: '512' }; module.exports = env; materialize-template.ts import * as fs from 'fs'; import { resolve } from 'path'; import main, { prepare } from './config.template.yml'; const env = process.env.ENV; if (!env) { throw new Error('$ENV is required'); } fs.writeFileSync(resolve(__dirname, `config.${env}.yml`), main(prepare(env)));
43.
アプリケーション指向の解決⽅法を実践 。o (モノによってはaws-sdk (node)
の型定義がそのままうまく使えるかも?)
44.
実践編まとめCloudFormation は使うとき/読むときのことを考える CloudFormation の限界はSDK
を使って超える アプリケーション的なアプローチでより効率的かつ安全にする
45.
今後の展望CloudFormation の社内普及を進めたい CloudFormation のノウハウを⾔語化して共有したい CDK
の導⼊によりアプリケーションエンジニアでも触りやすくしたい
Download