IK.AM

@making's tech note


SingleVMなConcourse 5.0をAWSにSpot Instanceで構築する

🗃 {Dev/CI/ConcourseCI}
🏷 Concourse CI 🏷 Concourse Lite 🏷 BOSH 🏷 AWS 🏷 Terraform 
🗓 Updated at 2019-03-10T06:02:22Z  🗓 Created at 2019-03-09T18:25:33Z   🌎 English Page

Concourse 5.0.0がリリースされたので、 Single VMなConcourse LiteをAWSに構築してみます。

Concourse Liteだと1VMに全てのコンポーネント(ATC, TSA, Garden, PostgreSQL)を同梱するため、使用量に応じてworkerをスケールアウトすることは出来ません。安く運用できるので、とりあえず始めたい場合には良い選択肢ではないかと思います。

以下の作業はMacまたはLinuxのみ対応しています。

次のCLIをインストールしてください

Concourss Liteではbosh create-envコマンドを使用してBOSH DirectorなしのSingle VMを作成します。

TerraformでAWS環境作成

まずはTerraformでConcourseをデプロイするためのVPC、EIP、Security Group、IAMを作成します。

templateを用意したのでgit cloneで取得してください。

git clone --recursive https://github.com/making/concourse-lite-on-aws.git
cd concourse-lite-on-aws

terraform.tfvars.sampleをコピーしてterraform.tfvarsを作成してください。

cp terraform.tfvars.sample terraform.tfvars

env_idは環境名を示す好きな文字列を、access_keysecret_keyはAWSのリソースを作成するためのAWSの認証情報を設定してください。 作成されるリソースは次のファイルを確認してください。

env_id = "changeme"
access_key = "changeme"
secret_key = "changeme"
region = "ap-northeast-1"

他の設定項目はvars.tfを確認してください。

terraformコマンドを実行します。

terraform init
terraform plan -out plan
terraform apply plan

Concourseで利用する環境情報はterraform outputで確認できます。

Concourse VMの作成

次にbosh CLIでconcourse-bosh-deploymentを使ってConcourse VMを立ち上げます。

コマンドはcreate-concourse.shに記述されています。HTTPSでアクセスできるように設定してあります。またSpot Instanceでt2.mediumなEC2インスタンスを作成するようにしています。

./create-concourse.sh

作成完了するまで初回は30-40分かかります。完了したら、次のコマンドを実行してください。

CONCOURSE_URL=https://$(terraform output --json | jq -r .external_ip.value)
ADMIN_PASSWORD=$(bosh int concourse-creds.yml --path /admin_password)

cat <<EOF
url: $CONCOURSE_URL
username: admin
password: $ADMIN_PASSWORD
EOF

ConcourseのURLとログインユーザーの情報が出力されます。

image

ログインすると、次のような画面が表示されます。

image

flyコマンドでログインする場合は、次のコマンドを実行してください。

fly -t lite login -k -c $CONCOURSE_URL -u admin -p $ADMIN_PASSWORD

ドキュメントのExampleを試してみてください。

cat <<EOF > hello.yml
jobs:
  - name: job
    public: true
    plan:
      - task: simple-task
        config:
          platform: linux
          image_resource:
            type: registry-image
            source: { repository: busybox }
          run:
            path: echo
            args: ["Hello, world!"]
EOF

fly -t lite sp -p hello -c hello.yml 
fly -t lite up -p hello
fly -t lite tj -j hello/job --watch

インスタンスサイズの変更

インスタンスサイズはt2.medium(Spot Instance)に設定してあります。T2シリーズはCPUクレジットの制限があるため、CIには向かないです。 変更したい場合はcreate-concourse.shの次の箇所を変更してください。

- type: replace
  path: /resource_pools/0/cloud_properties/instance_type
  value: t2.medium
- type: replace
  path: /resource_pools/0/cloud_properties/spot_bid_price?
  value: 0.0190

spot_bid_priceはスポット料金です。価格設定履歴を確認して設定してください。

例えばm4.largeに変更する場合は次のように設定します。

- type: replace
  path: /resource_pools/0/cloud_properties/instance_type
  value: m4.large
- type: replace
  path: /resource_pools/0/cloud_properties/spot_bid_price?
  value: 0.0340

変更後、./create-concourse.shを実行し直してください。

スポットインスタンスを作成できない場合はオンデマンドインスタンスが作成されます。

./create-concourse.sh --recreate

でVMを再作成できます。スポットインスタンスの制約でVMがシャットダウンされた場合も再作成してください。

上記の設定であればVM料金は

  • t2.mediumの場合、$13.68/月 (約1500円/月)
  • m4.largeの場合、$24.48/月 (約2700円/月)

ディスク、EIP料金含めて月2000-3000円で運用できるのは良いのではないでしょうか。

パフォーマンスを無視して、とにかく安くしたい場合は次の設定でt2.microで作成してみてください。

- type: replace
  path: /resource_pools/0/cloud_properties/instance_type
  value: t2.micro
- type: replace
  path: /resource_pools/0/cloud_properties/spot_bid_price?
  value: 0.0050

この場合はVM料金は$3.6/月 (約400円/月)で済みます(ただしコンパイル時間は遅くなります)。

ディスクサイズの変更

CIでコンテナが使用するディスクサイズは30GBに設定してあります。足りない場合はcreate-concourse.shの次の箇所を変更してください。

- type: replace
  path: /resource_pools/name=vms/cloud_properties/ephemeral_disk
  value: 
    size: 30_000
    type: standard

SSDが良い場合はtypegp2にしてください。

変更後、./create-concourse.shを実行し直してください。

Concourseのアップデート

新しいバージョンがリリースされたらconcourse-bosh-deploymentが更新されるため、 git pullで更新を反映して./create-concourse.shを実行し直してください。

cd concourse-bosh-deployment
git pull origin master
cd ..
./create-concourse.sh

を実行すればConcourseはバージョンアップされます。

環境の削除

eval "$(sed 's/create/delete/g' create-concourse.sh)"
terraform destroy -force

Concourse Liteの欠点としてはスケールアウトできないことと、設定変更に時間がかかることでです。 設定を変えて./create-concourse.shを実行するとVMを再作成して、ソースのcompileが始まります(10-20分くらいかかります)。永続ディスクは同じものがアタッチされます。同じ環境が再現できる点では良いのですが。

次回はAzure版を作成します。


✒️️ Edit  ⏰ History  🗑 Delete