AWS での Bitbucket Data Center

This page describes considerations for deploying Bitbucket Data Center in the Amazon Web Services (AWS) environment.

 

Bitbucket Data Center is an excellent fit for the Amazon Web Services (AWS) environment. Not only does AWS allow you to scale your deployment elastically by resizing and quickly launching additional nodes, it also provides a number of managed services that work "out of the box" with Bitbucket Data Center and handle all their configuration and maintenance automatically.

AWS components

A typical Bitbucket Data Center deployment in AWS can be illustrated as follows.

このページの内容:

 

This deployment consists of the following components:

  • One or more Amazon Elastic Compute Cloud (EC2) instance(s) as cluster node(s), running Bitbucket.
    • Typically these instance(s) are managed by an Amazon Auto Scaling Group, which can scale up and down the number of cluster node(s) either manually or automatically in response to load between prescribed minimum and maximum limits.
  • An Amazon Elastic Load Balancer (ELB), both as load balancer and SSL-terminating reverse proxy.
  • 共有ホーム ディレクトリ用 Elastic Block Store (EBS) ボリュームを接続した、専用 NFS サーバーとしての EC2 インスタンス。 
  • 共有データベースとしての Amazon Relational Database (RDS) インスタンス。
  • コードおよびリポジトリ検索用の Amazon Elasticsearch Service ドメイン。
Bitbucket version Bitbucket Server 4.10.0 or higher.
クラスタノード One or more EC2 instances running Bitbucket, managed by an Auto Scaling Group.
ロード バランサとリバース プロキシ

リスナーを次のように構成した、Amazon Elastic Load Balancer。

ロード バランサのプロトコル ロード バランサのポート インスタンスのプロトコル インスタンスのポート
http 80 http 7991
HTTPS 443 http 7990
TCP 7999 TCP 7999

Note that Bitbucket is configured to immediately redirect all http:// requests received on port 7991 to https://, for security.

NFS サーバー

An EC2 instance configured as a dedicated NFS server for the cluster, with an EBS volume storing the Bitbucket shared home directory. This contains all of Bitbucket Server's repository, attachment, and other data.

データベース Amazon RDS for PostgreSQL 9.5.
Elasticsearch Amazon Elasticsearch Service, version 2.3.

CloudFormation template and Quick Start guide

An AWS CloudFormation template is a single JSON or YAML file which describes a collection of AWS resources, allowing you to create, update, and delete them all together as a single "stack". Using AWS CloudFormation to manage your resources is much quicker and more convenient that deploying and managing the separate resources individually.

Amazon also publishes Quick Starts as standard, automated reference deployments for a number of key applications in AWS. Each Quick Start launches, configures, and runs the AWS compute, network, storage, and other services required to deploy a specific workload on AWS, using AWS best practices for security and availability.

The easiest way to launch Bitbucket Data Center in the AWS environment is to follow the Quick Start guide and associated CloudFormation template. The complete Bitbucket Data Center Quick Start guide and template are available here:

AWS CloudFormation and Quick Starts do not incur any additional AWS charges, though of course you must pay for all AWS resources launched via CloudFormation normally with your usual AWS account billing process.

(error) Note: The Bitbucket Data Center Quick Start is not available in some regions, such as govcloud-us (AWS GovCloud (US)) and cn-north-1 (China (Beijing)).

スケーリング (拡張および縮小)

To increase or decrease the number of cluster nodes:

  1. AWS コンソールで [サービス] > [CloudFormation] に移動してスタックを選択し、[スタックの更新] をクリックします。
  2. Change the Minimum number of cluster nodes and Maximum number of cluster nodes parameters as desired.

オート スケーリング グループでこれを検出してパラメーターに変更を適用するには、数分かかる場合があります。

Unless you specify the same number for Minimum and Maximum number of cluster nodes, the Auto Scaling Group is allowed to launch new cluster nodes and terminate existing ones automatically to achieve the optimal desired number of nodes between these two limits. By default, this target number is determined by the following CloudWatch metrics:

  • オート スケーリング グループで 5 分間の平均 CPU 使用率が 60 % を上回った場合、ノードのターゲット数を 1 増やします (最大値まで)。
  • オート スケーリング グループで 30 分間の平均 CPU 使用率が 40 % を下回った場合、ノードのターゲット数を 1 減らします (最小値まで)。

A default "cooldown" period of 10 minutes between scaling events is also applied. See Scaling Based on Metrics for more information. 

Note: Adding new cluster nodes, especially automatically in response to load spikes, is a great way to increase capacity of a cluster temporarily. Beyond a certain point, adding very large numbers of cluster nodes will bring diminishing returns. In general, increasing the size of each node (i.e., "vertical" scaling) will be able to handle a greater sustained capacity than increasing the number of nodes (i.e., "horizontal" scaling), especially if the nodes themselves are small. See Recommendations for running Bitbucket in AWS for more information.

SSH 経由でノードに接続する

Sooner or later you will need to SSH to your Bitbucket cluster node(s) and file server to perform configuration or maintenance tasks. Note that you must keep your SSH private key file (the PEM file you downloaded from Amazon and specified as the Key Name parameter) in a safe place. This is the key to all the nodes in your instance, and if you lose it you may find yourself "locked out." See Administering Bitbucket Server in AWS for more information.

Note: BitbucketDataCenter.template deploys all EC2 instances in the Subnets specified by the Internal subnets parameter. If you have specified Internal subnets that are completely unreachable from outside, then you may need to launch an EC2 instance with SSH running and accessible in one of the the External subnets, and use this as a "jump box" to SSH to any instances in your Internal subnets. That is, you SSH first to your "jump box", and from there to any instance deployed in the Internal subnets.

SSH 経由でインスタンスに接続する場合、ユーザー名として ec2-user を使用します。例:

ssh -i keyfile.pemec2-user@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com

ec2-user は、 sudo アクセスを持ちます。root による SSH アクセスは許可されません。

Installing an SSL certificate

Before launching BitbucketDataCenter.template for the first time, it is recommended to upload your SSL certificate into Amazon, as described in SSL Certificates for Classic Load Balancers. Then, when launching Bitbucket Data Center, you can specify the SSL certificate's name in the SSL Certificate Name parameter, and it will be deployed automatically on your ELB, with listeners set up as follows:

ロード バランサのプロトコル ロード バランサのポート インスタンスのプロトコル インスタンスのポート
http 80 http 7991
HTTPS 443 http 7990

But if you didn't have an SSL certificate set up at initial launch time, or omit the SSL Certificate Name parameter, then your ELB will be configured with only one HTTP listener as follows:

ロード バランサのプロトコル ロード バランサのポート インスタンスのプロトコル インスタンスのポート
http 80 http 7990

Note that Bitbucket's server.xml and web.xml configuration is different in each case.

If you need to install or change your SSL certificate after initial launch, you should:

  1. Go to Services >> CloudFormation in the AWS console, select the stack, and click Update Stack.
  2. Change the SSL Certificate Name parameter to the name of your new certificate.
  3. SSH to each of your cluster node(s), and configure the HTTP to HTTPS redirect manually in the server.xml and web.xml files, as described in Redirect HTTP Requests to HTTPS.
  4. If the host name of your Bitbucket instance has changed:
    1. SSH to each of your cluster node(s) and run
      sudo /opt/atlassian/bin/atl-update-host-name.sh <newhostname>
    2. Update Bitbucket's base URL as described in Specifying the base URL for Bitbucket Server.

アップグレード

To upgrade a Bitbucket Data Center instance launched from BitbucketDataCenter.template:

  1. Go to Services > CloudFormation in the AWS console, select the stack, and click Update Stack.
  2. Change the Version parameter to the new version (this does not actually upgrade any existing cluster node(s), but ensures that any new nodes launched in the Auto Scaling Group will be on the new version).
  3. Terminate your existing cluster node(s), and allow the Auto Scaling Group to launch new node(s) running the new version.

Bitbucket Data Center currently does not allow upgrading an instance without some downtime in between the last cluster node of the old version shutting down and the first cluster node on the new version starting up.

See the Bitbucket Server upgrade guide for more information.

バックアップ

Every Bitbucket Data Center instance launched from BitbucketDataCenter.template comes with the Bitbucket DIY Backup utilities pre-installed and pre-configured to use Amazon EBS and RDS snapshots for Zero Downtime Backup. Just SSH to your file server instance and run the following commands:

cd /opt/atlassian/bitbucket-diy-backup
git pull
./bitbucket.diy-backup.sh

This script can also be run on a regular schedule (e.g., hourly), from cron. See Using Bitbucket zero downtime backup for more information.

Deploying mirrors

To deploy a mirror of an existing Bitbucket Data Center instance in AWS:

  1. Deploy BitbucketServer.template, with the Bitbucket properties parameter set to application.mode=mirror.

  2. SSH to your new mirror instance and install your SSL certificate as described in Securing Bitbucket Server behind nginx using SSL.

  3. Proceed through the new mirror's Setup Wizard as usual.

See Set up a mirror for more information.

Deploying a Disaster recovery standby instance

To deploy a Disaster recovery standby of an existing Bitbucket Data Center instance in AWS,

  1. Find out the Amazon Resource Name (ARN) of your primary instance's RDS database. This is given by the DBMaster output of your primary's CloudFormation stack, and will be a string of the form arn:aws:rds:eu-west-1:123456789012:db:qdc37u5sysye14.
  2. Deploy BitbucketDataCenter.template in your desired AWS Region (typically not the same Region as your primary instance) with the Bitbucket properties parameter set to this ARN. 

    At this point, you should have a standby instance with no cluster nodes running and an Amazon RDS read replica database.

  3. Follow the Disaster recovery guide for Bitbucket Data Center, with atlassian-bitbucket-diy-backup variables configured as follows:

    BACKUP_HOME_TYPE=zfs
    BACKUP_DATABASE_TYPE=amazon-rds

    DR_RDS_READ_REPLICA=<identifier of your RDS read replica>
    STANDBY_JDBC_URL=jdbc:postgresql://<endpoint of your RDS read replica>.rds.amazonaws.com:5432/bitbucket

If you need to fail over from your primary Bitbucket instance to the Disaster recovery standby, you can launch cluster node(s) by updating the Minimum number of cluster nodes parameter in the standby stack, as described in the section Scaling up and down above.

See Disaster recovery guide for Bitbucket Data Center for more information.

AWS への既存のインスタンスの移行

AWS に既存のインスタンスを移行するには:

  1. Migrate it's database to PostgreSQL (if not already).
  2. Take a backup of your existing home directory and database, as described in Bitbucket Server DIY Backup.
  3. バックアップ ファイルをファイル サーバー EC2 インスタンスにコピーします。
  4. Unpack the backup file under /media/atl/bitbucket/shared of your file server.
  5. Restore the PostgreSQL database dump contained in the backup file to your RDS instance with pg_restore.
最終更新日: 2016 年 9 月 23 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.