diff --git a/README.md b/README.md index ae0d6d9f0..27d00d285 100644 --- a/README.md +++ b/README.md @@ -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 リポジトリに含まれていないファイルの配布 diff --git a/provisioning/cf-kakomon/README.md b/provisioning/cf-kakomon/README.md index 6d316c4cf..63fc0a869 100644 --- a/provisioning/cf-kakomon/README.md +++ b/provisioning/cf-kakomon/README.md @@ -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` ユーザで以下のコマンドを実行することでベンチマーカを実行可能です。 @@ -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` が受ける想定です。 @@ -33,7 +69,7 @@ cd ~/bench ssh isucon@<競技用サーバのグローバルアドレス> -L 5000:localhost:5000 ``` -### ISU の登録 +#### ISU の登録 ブラウザより ISU の登録を行う際にも JIA API Mock が必要です。 こちらについては [アプリケーションマニュアル](../../docs/isucondition.md) をご確認ください。 diff --git a/provisioning/cf-kakomon/cf.yaml b/provisioning/cf-kakomon/cf.yaml index 1078aa4f5..9b252efcc 100644 --- a/provisioning/cf-kakomon/cf.yaml +++ b/provisioning/cf-kakomon/cf.yaml @@ -62,7 +62,7 @@ Resources: BenchInstance: Type: AWS::EC2::Instance Properties: - ImageId: ami-082201231e54507b9 + ImageId: __BENCH_AMI_ID__ InstanceType: c4.xlarge SecurityGroupIds: - !Ref SecurityGroup @@ -86,7 +86,7 @@ Resources: QualifyInstance1: Type: AWS::EC2::Instance Properties: - ImageId: ami-0088b181798171356 + ImageId: __CONTESTANT_AMI_ID__ InstanceType: c5.large SecurityGroupIds: - !Ref SecurityGroup @@ -109,7 +109,7 @@ Resources: QualifyInstance2: Type: AWS::EC2::Instance Properties: - ImageId: ami-0088b181798171356 + ImageId: __CONTESTANT_AMI_ID__ InstanceType: c5.large SecurityGroupIds: - !Ref SecurityGroup @@ -132,7 +132,7 @@ Resources: QualifyInstance3: Type: AWS::EC2::Instance Properties: - ImageId: ami-0088b181798171356 + ImageId: __CONTESTANT_AMI_ID__ InstanceType: c5.large SecurityGroupIds: - !Ref SecurityGroup diff --git a/provisioning/packer/Makefile b/provisioning/packer/Makefile index 13c765f10..2f7fdc1fd 100644 --- a/provisioning/packer/Makefile +++ b/provisioning/packer/Makefile @@ -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 @@ -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/ @@ -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 @@ -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 +