この記事は公開されてから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には充分ご注意ください。
起動っ!
今回はデモも何もなく。さっくり起動しましょう。
パラメータは以下のとおりです。オープンで良いのならGitHubを使うはず、わざわざ別サーバを立てるということは、何らかのアクセス制御をしたいのでしょう。従って、SSHFromやHTTPFromで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でアクセスします。
管理者アカウントの初期状態は root / root なので、ログインしてすぐに変更しましょう。あとは直感で色々わかるはずです!(丸投げ
例によってGitHubに公開済みです
このテンプレートは例によってGitHubに公開済みです。要望・改善案等ございましたら、issue発行なりpull requestなり、ご自由にどうぞ!