1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSでBuildpackを作成する方法

Last updated at Posted at 2018-08-16

作成した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作った後で気が付いた:cry:

IBM CloudってGitのリポジトリから、Buildpackを作って適用しているんじゃないか?という事を。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?