ローカル環境で開発したGoアプリをEC2へデプロイを試みる。
使用ツールは以下
・EC2(t2.micro)
・RDS(MYSQL db.t3.micro)
・Apache
・CodePipeline
・Git
・Linux
1.環境作り
・EC2(t2.micro)
・RDS(MYSQL db.t3.micro)
をコンソールで作成する。
次にAWSを使いCI/CD環境の構築を試みる。
サービスはCodePipelineを使った。
CodePipelineとは?:
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/welcome.html
今回はGithubアカウントと連携して、
CodeCommitでGithubプッシュを確認→
CodeBuildでコードをビルド→
S3へ保存→
S3から保存したコードをデプロイ
という流れのCI/CD。
※CodeBuildでコードをビルドするにはbuildspec.ymlファイル、CodeDeployにはappspec.ymlのファイルが該当のソースコードのルート先に必要なようです。
詰まったとこ
最低限の設定でコミットからデプロイまで試したが、buildspec.ymlファイルをビルドコマンドだけ用意した
version: 0.2
phases:
build:
commands:
- GOOS=linux GOARCH=amd64 go build main.go
これで試してもデプロイ段階でエラーがでてしまった。
version: 0.2
phases:
build:
commands:
- GOOS=linux GOARCH=amd64 go build main.go
artifacts:
files:
- '**/*'
artifactsの部分でビルドしたコードの出力先を指定しているらしい。この場合既存のS3バゲットへしっかり保存された。
これでGithubのプッシュからデプロイまで自動化された。
2.サーバへデプロイ
ひとまずCodeDeployによってビルドされたコードが/var/www/html下に展開された。
環境構築を一通り
EC2へssh接続→
各種インストール(Apache,MySQL,go,etc...)→
MySQLコマンドでDB、ユーザ作成&ローカルからインポート
詰まったとこ
ひとまずビルドされた/var/www/html下にあるバイナリファイル(main)をコマンドラインから実行
./main
接続成功
このままIPアドレスへアクセスしても、Apacheのテストページが表示される。。
/etc/httpd/confにあるhttpd.confを編集する必要がありそう。
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
webアプリはFastCGIサーバーとして起動する必要があるようで、ApacheのVirtualHost設定で、FastCGIサーバーにアクセスするためのプロキシ設定を上記のように追加。
Apacheを再起動して再びパブリックIPへアクセスすると→
アプリのトップ画面が表示!