Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] feat(infra): 過去問環境構築手順を AMI 自前構築方法に差し替え #1452

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,7 @@ JWT を生成・検証するための公開鍵・秘密鍵はそれぞれ以下

## AWS 上での過去問環境の構築方法

### 用意された AMI を利用する場合

[provisioning/cf-kakomon](./provisioning/cf-kakomon) を参照してください。なお AMI は ISUCON11 運営の解散を目処に公開を停止する予定です。上記イメージが参照不可である場合ひとつ下の手順で構築してください。

### AMI を自前で作成し構築する場合

手順準備中です。
[provisioning/cf-kakomon](./provisioning/cf-kakomon) を参照してください。なお AMI は ISUCON11 運営の解散を目処に公開を停止する予定です。

#### git リポジトリに含まれていないファイルの配布

Expand Down
56 changes: 46 additions & 10 deletions provisioning/cf-kakomon/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,51 @@
# cf-kakomon

isucon11 予選の過去問環境を AWS 上に構築するための CloudFormation ファイルが配置されています
isucon11 予選の過去問環境を AWS 上に構築するためのファイルが配置されています

## 利用手順
## 構築手順

1. 事前に EC2 KeyPair の作成してください
2. CloudFormation より cf.yaml を利用してスタックを作成してください
* パラメータに手順1で作成した KeyPair 名を指定
3. CloudFormation により作成される EC2 インスタンスには、手順1で作成した秘密鍵を利用して `ubuntu` ユーザでログイン可能です
1. AWS にて事前に EC2 KeyPair の作成してください
2. packer を実行し AMI を作成してください
* 詳しくは [AMI の構築](#ami-の構築) を参照
3. cf.yaml ファイルを開き、競技者・ベンチ用 AMI の ID を更新してください
* 詳しくは [cf.yaml に書かれた AMI ID の更新](#cf.yaml-に書かれた-ami-id-の更新) を参照
4. CloudFormation より cf.yaml を利用してスタックを作成してください
* パラメータに手順2で作成した KeyPair 名を指定
5. CloudFormation により作成される EC2 インスタンスには、手順2で作成した秘密鍵を利用して `ubuntu` ユーザでログイン可能です

## ベンチ実行手順
### AMI の構築

以下のコマンドを事前にインストールする必要があります。

* https://github.com/hashicorp/packer
* https://github.com/google/jsonnet

AMI の構築手順は以下のとおりです。

1. https://github.com/isucon/isucon11-qualify/releases/tag/public の各ファイル (`1_InitData.sql`, `initialize.json`, `images.tgz`) を `provisioning/packer/files-generated/` 以下に配置
* **`1_InitData.sql` は `initial-data.sql` に rename してください**
2. aws-cli を用い AMI のビルドと登録を行う AWS アカウントにログイン
3. `provisioning/packer/` 以下に移動し、AMI の構築を行うコマンドの実行
* ベンチ用イメージの構築: `make build-bench_kakomon`
* 競技者用イメージの構築: `make build-contestant_kakomon`

### cf.yaml に書かれた AMI ID の更新

* 以下のコマンドを実行することで AMI ID が更新されます。
* `${CONTESTANT_AMI_ID}` , `${BENCH_AMI_ID}` にはそれぞれ [AMI の構築](#ami-の構築) 手順で構築した AMI の ID を指定してください

```shell
sed -i \
-e 's|__CONTESTANT_AMI_ID__|'${CONTESTANT_AMI_ID}'|g' \
-e 's|__BENCH_AMI_ID__|'${BENCH_AMI_ID}'|g' \
provisioning/cf-kakomon/cf.yaml
```

## 構築された環境の利用方法

大方針は [当日マニュアル](../../docs/manual.md) 及び [アプリケーションマニュアル](../../docs/isucondition.md) をご参照ください。

### ベンチ実行手順

ベンチマーカインスタンスにログインした後 `isucon` ユーザで以下のコマンドを実行することでベンチマーカを実行可能です。

Expand All @@ -18,11 +54,11 @@ cd ~/bench
./bench -tls -target=192.168.0.11 -all-addresses=192.168.0.11,192.168.0.12,192.168.0.13 -jia-service-url http://192.168.0.10:5000
```

## ブラウザでのアクセスにおける留意点
### ブラウザでのアクセスにおける留意点

過去問環境において競技用インスタンスで動作している isucondition にブラウザからアクセスする際の留意点です。

### ログイン
#### ログイン

「JIAのアカウントでログイン」を押すと http://localhost:5000 に遷移するようになっています。
このアクセスは競技用サーバ上で動作する `jiaapi-mock.service` が受ける想定です。
Expand All @@ -33,7 +69,7 @@ cd ~/bench
ssh isucon@<競技用サーバのグローバルアドレス> -L 5000:localhost:5000
```

### ISU の登録
#### ISU の登録

ブラウザより ISU の登録を行う際にも JIA API Mock が必要です。
こちらについては [アプリケーションマニュアル](../../docs/isucondition.md) をご確認ください。
8 changes: 4 additions & 4 deletions provisioning/cf-kakomon/cf.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Resources:
BenchInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-082201231e54507b9
ImageId: __BENCH_AMI_ID__
InstanceType: c4.xlarge
SecurityGroupIds:
- !Ref SecurityGroup
Expand All @@ -86,7 +86,7 @@ Resources:
QualifyInstance1:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0088b181798171356
ImageId: __CONTESTANT_AMI_ID__
InstanceType: c5.large
SecurityGroupIds:
- !Ref SecurityGroup
Expand All @@ -109,7 +109,7 @@ Resources:
QualifyInstance2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0088b181798171356
ImageId: __CONTESTANT_AMI_ID__
InstanceType: c5.large
SecurityGroupIds:
- !Ref SecurityGroup
Expand All @@ -132,7 +132,7 @@ Resources:
QualifyInstance3:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0088b181798171356
ImageId: __CONTESTANT_AMI_ID__
InstanceType: c5.large
SecurityGroupIds:
- !Ref SecurityGroup
Expand Down
43 changes: 30 additions & 13 deletions provisioning/packer/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ files-generated/initial-data.sql:
mkdir -p files-generated/
aws s3 cp s3://isucon11-qualify-dev/initial-data.sql files-generated/initial-data.sql


files-generated/initialize.json:
mkdir -p files-generated/
aws s3 cp s3://isucon11-qualify-dev/initialize.json files-generated/initialize.json
Expand All @@ -48,20 +49,11 @@ target/contestant.json: files-generated output base.libsonnet contestant.jsonnet
jsonnet --jpath . contestant.jsonnet > target/contestant.json
packer validate target/contestant.json

target/contestant_kakomon.json: files-generated output base.libsonnet contestant_kakomon.jsonnet
mkdir -p target/
jsonnet --jpath . contestant_kakomon.jsonnet > target/contestant_kakomon.json
packer validate target/contestant_kakomon.json

target/bench.json: files-generated output base.libsonnet bench.jsonnet
mkdir -p target/
jsonnet --jpath . bench.jsonnet > target/bench.json
packer validate target/bench.json

target/bench_kakomon.json: files-generated output base.libsonnet bench_kakomon.jsonnet
mkdir -p target/
jsonnet --jpath . bench_kakomon.jsonnet > target/bench_kakomon.json
packer validate target/bench_kakomon.json

target/standalone.json: files-generated base.libsonnet standalone.jsonnet
mkdir -p target/
Expand All @@ -73,12 +65,8 @@ build: build-contestant build-bench

build-contestant: files-generated target/contestant.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/contestant.json
build-contestant_kakomon: files-generated target/contestant_kakomon.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/contestant_kakomon.json
build-bench: files-generated target/bench.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/bench.json
build-bench_kakomon: files-generated target/bench_kakomon.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/bench_kakomon.json
build-standalone: files-generated target/standalone.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/standalone.json

Expand All @@ -90,3 +78,32 @@ clean:

clean-output:
rm -rf output/


# for kakomon

.PHONY: files-generated_kakomon files-generated_kakomon/initial-data.sql files-generated_kakomon/initialize.json files-generated_kakomon/images.tgz build-contestant_kakomon build-bench_kakomon

files-generated_kakomon: files-generated/REVISION files-generated/isucon11-qualify.tar files-generated_kakomon/initial-data.sql files-generated_kakomon/initialize.json files-generated_kakomon/images.tgz

files-generated_kakomon/initial-data.sql:
$(error "files-generated/initial-data.sql does not exist")
files-generated_kakomon/initialize.json:
$(error "files-generated/initialize.json does not exist")
files-generated_kakomon/images.tgz:
$(error "files-generated/images.tgz does not exist")

target/contestant_kakomon.json: files-generated output base.libsonnet contestant_kakomon.jsonnet
mkdir -p target/
jsonnet --jpath . contestant_kakomon.jsonnet > target/contestant_kakomon.json
packer validate target/contestant_kakomon.json
target/bench_kakomon.json: files-generated output base.libsonnet bench_kakomon.jsonnet
mkdir -p target/
jsonnet --jpath . bench_kakomon.jsonnet > target/bench_kakomon.json
packer validate target/bench_kakomon.json

build-contestant_kakomon: files-generated_kakomon target/contestant_kakomon.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/contestant_kakomon.json
build-bench_kakomon: files-generated_kakomon target/bench_kakomon.json
packer build -var "revision=$(shell cat files-generated/REVISION)" target/bench_kakomon.json