作成したAWSインスタンス
Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-40142d25
Type t2.micro
ボリューム:8GB
まずは、Goをインストールしてセットアップします。
こちらのサイトを参考にセットアップしました。
インストール
sudo yum install golang
GOPATHの設定
.bashrc
に以下を追記します。
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source .bashrc
を実行して環境変数を反映させたらecho $GOPATH
で確認しましょう。
結果
[ec2-user@ip-XXX-XXX-XXX-XXX ~]$ echo $GOPATH
/home/ec2-user/go
となればOKです。
次にbuild-packagerをインストールします。
このサイトのREADOME
に従って、以下のコマンドを実行します。
go get github.com/cloudfoundry/libbuildpack
で、マニュアルでは次に
cd ~/go/src/github.com/cloudfoundry/libbuildpack/packager/buildpack-packager && go install
とすると書いてあるのですが、AWS上でこのまま実行すると
main.go:15:2: cannot find package "github.com/google/subcommands" in any of:
というメッセージが出てしまいます。
というわけで、こちらのパッケージも入れておきましょう。
コマンドは、
go get github.com/google/subcommands
です。
改めて、
cd ~/go/src/github.com/cloudfoundry/libbuildpack/packager/buildpack-packager && go install
とすると、正常にインストールできます。
[ec2-user@ip-XXX-XXX-XXX-XXX ~]$ buildpack-packager
Usage: buildpack-packager <flags> <subcommand> <subcommand args>
Subcommands:
commands list all command names
flags describe all known top-level flags
help describe subcommands and their syntax
Subcommands for Custom:
build Create a buildpack zipfile from the current directory
init Creates a folder with the basic structure of a new buildpack
summary Print out list of dependencies of this buildpack
upgrade Upgrades a buildpack scaffolded by buildpack-packager init
Use "buildpack-packager flags" for a list of top-level flags
となる事を確認しましょう。
パッケージをビルドしてみましょう。
私はPHPerなので、php-buildpack
をforkしてカスタマイズします。
まずは、
git clone https://github.com/motuo1201/php-buildpack
でforkしたリポジトリをcloneします。
次に、
cd php-buildpack/
buildpack-packager build -cached -any-stack
とすると、以下の結果を得ることが出来ます。
[ec2-user@ip-XXX-XXX-XXX-XXX php-buildpack]$ buildpack-packager build -cached -any-stack
cached buildpack created and saved as /home/ec2-user/php-buildpack/php_buildpack-cached-v4.3.59.zip with a size of 979MB
[ec2-user@ip-XXX-XXX-XXX-XXX php-buildpack]$ ls
4.3.52.20180419122106tmp fixtures README.md
bin ISSUE_TEMPLATE requirements.txt
cf.Gemfile itf.Dockerfile.5409018274803835473 run_tests.sh
cf.Gemfile.lock lib scripts
CHANGELOG LICENSE src
compile-extensions manifest.yml tests
CONTRIBUTING.md NOTICE vendor
defaults php_buildpack-cached-v4.3.59.zip VERSION
extensions PULL_REQUEST_TEMPLATE
ここに、php_buildpack-cached-v4.3.59.zip
というファイルが出来ましたね。
これが、実際に利用できるbuildpack
となります。
ちなみに、Buildpackを作成しようとした経緯
php-buildpack
を使ってLaravel
をデプロイする時に、.env
が無くてコケるケースが多発。
原因はGithubのリポジトリには.env
をコミットしない原則があるから。(セキュリティ的な観点から当然の事ですが…)
ただ、pipeline
とか使ってGithubから直接、デプロイする時に、これは困る!というわけで
.env.exampleが存在するかつ、.envファイルがない場合は、.env.exampleを.envにリネームする
処理を追加する事に決定。
いや、composer.jsonのpost-install-cmdに書けよ!
というツッコミが聞こえた気がしますが、今回は勉強のため…
そしてAWSでbuildpack作った後で気が付いた
IBM CloudってGitのリポジトリから、Buildpackを作って適用しているんじゃないか?という事を。