ちょっと話題の記事

クローズド環境のGitHub欲しいよね! GitBucket編|アドカレ2013 : CFn #13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。アドベントカレンダー2013「AWS CloudFormationビッグバンテンプレート」、本日は13日目です。ああ、今日って13日の金曜日なんすねー。

さてさて、昨日はしんやさんのOpenPNE編でした。

GitHubクローン

GitHubが流行ってしばらく経ち、世の中にはOSSのGitHubクローンがうまれました。その中でもGitLabは有名ですね。しかし本日はGitLabではなく、Scalaで書かれたGitHubクローン「GitBucket」をAWS環境に一発構築してみましょう。

ちなみに、GitBucketの作者様は@takezoenさんという方です。日本製です。また、私の好きなデータアクセスフレームワーク「Mirage SQL」も@takezoenさん作です。私がエンジニアの道に引き込まれたのも@takezoenさんの書いた本が一因だと思います。おっと、話が脱線しましたww

今回の構成

特に面白く無いので構成図は書きませんが。今回の特徴は Elastic Beanstalk を使ったテンプレートである、ということです。Beantstalk自体使っている人が多くない印象ですが、それをCloudFormationから呼び出す例となると、一層珍しいんじゃないでしょうか。そういった物珍しさも感じていただければと。

"GitbucketApplication" : {
  "Type" : "AWS::ElasticBeanstalk::Application",
  "Properties" : {
    "Description" : "Gitbucket Application",
    "ApplicationVersions" : [{
      "VersionLabel" : { "Ref":"GitbucketVersion" },
      "Description" : { "Fn::Join" : ["", [ "Version ", { "Ref":"GitbucketVersion" } ]]},
      "SourceBundle" : {
        "S3Bucket" : "cm-public-cfn-templates",
        "S3Key" : { "Fn::Join" : ["", [ "gitbucket/gitbucket-", { "Ref":"GitbucketVersion" }, ".war" ]]}
      }
    }],
    "ConfigurationTemplates" : [{
      "TemplateName" : "DefaultConfiguration",
      "Description" : "Default Configuration",
      "SolutionStackName" : "64bit Amazon Linux running Tomcat 7",
      "OptionSettings" : [
        { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "KeyName" } },
        { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "SecurityGroups", "Value" : { "Ref" : "GitbucketSecurityGroup" } },
        { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : { "Ref" : "PowerUserProfile" } },
        { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "InstanceType", "Value" : { "Ref" : "InstanceType" } },
        { "Namespace" : "aws:elasticbeanstalk:application", "OptionName" : "Application Healthcheck URL", "Value" : "/" },
        { "Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : "SingleInstance" },
        { "Namespace" : "aws:elasticbeanstalk:hostmanager", "OptionName" : "LogPublicationControl", "Value" : "true" },
        { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "JVM Options",    "Value" : "" },
        { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "Xmx",            "Value" : "512m" },
        { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "XX:MaxPermSize", "Value" : "128m" }
      ]
    }]
  }
},

OptionSettingsの部分で、Beanstalkに対する設定をいろいろやってます。だいたい想像つきますよね。他にはどんなオプションがあるのかは、ドキュメント等を御覧ください。

今回の構成は、Multi-AZ構成ではありません。きちんと可用性を担保するためには、アプリケーションに対する様々な設定が必要です。また、データはEC2インスタンスローカルに保持されている状態ですので、terminateには充分ご注意ください。

起動っ!

今回はデモも何もなく。さっくり起動しましょう。

gitbucketを起動

パラメータは以下のとおりです。オープンで良いのならGitHubを使うはず、わざわざ別サーバを立てるということは、何らかのアクセス制御をしたいのでしょう。従って、SSHFromHTTPFromでIPアドレスベースのアクセス制御ができるようになっています。制限したくなければ0.0.0.0/0で良いです。

  • KeyName: ECのキーペア名。EC2へのSSH接続用。
  • SSHFrom: GitBucketサーバへのSSHアクセスを許すIPブロック(CIDR表記)
  • HTTPFrom: pGitBucketサーバへのHTTPアクセスを許すIPブロック(CIDR表記)
  • InstanceType: GitBucketが動くサーバののインスタンスタイプ
  • GitbucketVersion: GitBucketのバージョンです。現在最新は1.8ですね。現状、1.0〜1.8にまで対応しています。

GitBucketサーバにアクセスしてみよう

さて、スタックを作り終わったら、OutputsにIPアドレスがあるはずですので、そこにHTTPでアクセスします。

gitbucket01

管理者アカウントの初期状態は root / root なので、ログインしてすぐに変更しましょう。あとは直感で色々わかるはずです!(丸投げ

例によってGitHubに公開済みです

このテンプレートは例によってGitHubに公開済みです。要望・改善案等ございましたら、issue発行なりpull requestなり、ご自由にどうぞ!