S3
用途
- ビルドのログを保存するためにS3をバケットを作成します。
バケット作成
- AWSコンソール画面の検索窓に「S3」と入力→
S3
をクリック→バケットを作成
ボタンをクリック - 設定は以下の項目だけでOKです。その他の項目はデフォルトのままでOK。バケット名はlambdのときと同じで一意である必要があります。
画面 | 設定項目 | 設定値 |
---|---|---|
一般的な設定 | バケット名 | mattermost-codebuild |
タグ(0) - オプション | キー | Name |
値 - オプション | mattermost-codebuild |
- 追記 作りはしますが手動版では使ってません。書き込み権限がなくエラーになります。自動版の手順では使ってます。
AWS Systems Manager
用途
サーバの構築にはAnsibleを利用します。AWS Systems ManagerはAnsibleがEC2にSSHログインするために使う秘密鍵を保存するために利用します。AWS Systems Managerはパスワードとか機密性の高いデータを保存する場所です。
パラメータを作成
画面 | 設定項目 | 設定値 |
---|---|---|
パラメータの詳細 | 名前 | ssh_private_key |
説明 — Optional | Save private key to ssh to EC2. | |
利用枠 | 標準 | |
タイプ | 安全な文字列 | |
KMS キーソース | 現在のアカウント | |
KMS キー ID | alias/aws/ssm | |
値 | 自分がEC2にsshするときの秘密鍵の中身を張り付ける | |
タグ — Optional | キー | Name |
値 | mattermost-asm |
CodeBulid
用途
- git pushしたあとに自動で何かしてくれるものです。
- 何かでよくあるのが、コードチェック、デプロイで、今回はこの2つを行います。
buildspec.ymlの作成
ロール作成
CodeBuild
からAWS Systems Manager
にアクセスを許可するロールを作成します。- AWSコンソール画面の検索窓に「IAM」と入力し、
IAM
をクリックする。 - 左メニューの
ロール
をクリック→ロールを作成
ボタンをクリック - 設定項目は以下。短時間でロールを削除してやり直す場合はエラーになることがあるので別ロール名とするか、いくらか時間を空けた方がよい。
画面 | 設定項目 | 設定値 |
---|---|---|
信頼されたエンティティを選択 | 信頼されたエンティティタイプ | AWS のサービス |
ユースケース | CodeBuild | |
許可を追加 | 許可ポリシー | AmazonSSMReadOnlyAccess |
名前、確認、および作成 | ロール名 | codebuild-mattermost-role |
説明 | This is the role that holds access to ASM and applies to CodeBuild. | |
タグを追加 | キー | Name |
値 - オプション | mattermost-codebuild-role |
CodeBuildのプロジェクト作成
- AWSコンソール画面の検索窓に「CodeBuild」と入力し、
CodeBuild
をクリックする。 ビルドプロジェクトを作成する
ボタンをクリックする。
画面 | 設定項目 | 設定値 |
---|---|---|
プロジェクトの設定 | プロジェクト名 | mattermost-codebuild ※ プロジェクト作成ボタン クリック後にThe policy is attached to 0 entities but it must be attached to a single role が表示される場合は名前を変えてください。 |
説明 - オプショナル | Code check and deploy for mattermost. | |
ビルドバッジを有効にする | チェックを入れない | |
このプロジェクトが開始できる同時ビルドの数を制限する | チェックを入れない | |
キー | Name | |
値 | mattermost-codebuild | |
ソース | ソースプロバイダ | GitHub |
リポジトリ | GitHub アカウントのリポジトリ ※OAuth を使用して接続するを選択した後、GitHubに接続ボタンをクリックします。すると表示が変わり「GitHub アカウントのリポジトリ」を選択可能です。Githubと接続済みだと最初から「GitHub アカウントのリポジトリ」が選択可能です。 |
|
forkしたGitHub アカウントのリポジトリ | ||
ソースバージョン - オプショナル | main | |
追加設定 | (デフォルトのままでOK) | |
環境 | 環境イメージ | マネージド型イメージ |
オペレーティングシステム | Ubuntu | |
ランタイム | Standard | |
イメージ | aws/codebuild/standard:6.X ※最新を選択すること |
|
イメージのバージョン | aws/codebuild/standard:6.X-XX.XX.XX ※最新を選択すること |
|
環境タイプ | Linux | |
(特権付与)Docker イメージを構築するか、ビルドで昇格されたアクセス権限を取得するには、このフラグを有効にします | チェックを入れない | |
サービスロール | 既存のサービスロール | |
ロールの ARN | codebuild-mattermost-role | |
AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする | チェックする | |
(追加設定) | 環境変数(名前) | ssh_private_key |
環境変数(値) | ssh_private_key | |
環境変数(タイプ) | パラメータ | |
上記以外はデフォルトでOKです | - | |
Buildspec | ビルド仕様 | buildspec ファイルを使用する |
Buildspec 名 - オプショナル | (デフォルトのままでOK) | |
バッチ設定 | バッチ設定を定義 - オプショナル | チェックを入れない |
アーティファクト | タイプ | Amazon S3 |
バケット名 | mattermost-codebuild ※自分で作ったバケット名を入力してください。バケット名は一意です。 |
|
上記以外はデフォルトでOKです | - | |
ログ | CloudWatch Logs - オプショナル | チェックを入れる |
上記以外はデフォルトでOKです | - |
Ansible設定ファイルの修正
- 設定ファイルでEC2とRDSエンドポイントを修正する必要があります。EC2、RDSの画面からコピペします。画像にはないですが、任意作業で
alb_dns
も修正しても良いです。 - forkしたリポジトリをcloneします。URLは読み替えてください
- コマンドで
vi
を書いてますが、普通にテキストエディタ使っても構いません。git cloneの方法も任意です。
# git clone git clone https://github.com/tmoritoki0227/mattermost-cf-playbook.git # EC2とRDSエンドポイントの修正 $ vi inventories/prod
- この後、forkしたリポジトリに
commit
とpush
をしてください。
codebuild実行
ビルドプロジェクトを開く
- ビルドプロジェクトの一覧から作成したプロジェクト名をクリックします。画像は例です
ビルドを開始する
- ビルドを開始ボタンをクリック
- ビルドが始まりますので成功(ステータスが「CREATE_COMPLETE」となる)することを祈りましょう。下の方にログが出力されます。リアルタイムには出力されません。一定期間毎にログが出ます。エラーになったら対処を行って再ビルドです。
- 成功したら、少し間をおいてから https://toki.jagisama.com にブラウザからアクセスします。(URLは自分のドメインに読み替えてください。)Mattermostの初期画面が表示されれば構築完了です。次の手順書は任意作業となります。
動かないときの調査コマンド
- 大抵はALBの設定だと思います。
http://ec2-52-194-187-249.ap-northeast-1.compute.amazonaws.com:8065/ をブラウザで開く。このDNSはインスタンスのDNS。
ALBのアドレス
http://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065/ https://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065/ curl http://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065
ログを見よう
sudo tail -f /opt/mattermost/logs/mattermost.log
インスタンス上で疎通確認するとき。
curl http://ec2-3-112-205-4.ap-northeast-1.compute.amazonaws.com:8065/https://toki.jagisama.com/ curl http://ec2-52-194-187-249.ap-northeast-1.compute.amazonaws.com:8065/
メモ
以下は検証中の手順です。
webhook
画面 | 設定項目 | 設定値 |
---|---|---|
プライマリソースのウェブフックイベント | コードの変更がこのレポジトリにプッシュされるたびに再構築する | チェックを入れる |
ビルドタイプ | 単一ビルド | |
ウェブフックシークレットキーの更新 | チェックを入れない | |
イベントタイプ | プッシュ ※プルリクエストの対応は今度 |
|
これらの条件でビルドを開始する | (デフォルトのままでOK) | |
これらの条件でビルドを開始しない | (デフォルトのままでOK) |
GitHubのwebhookを設定
- 目的は
git push
するとビルドが動くことです。 - 参考:AWS CodeBuildをGitHubリポジトリで動かしてHello, World! - Qiita
手動版ではS3にファイルがアップロードできていない。
権限設定が不足している。 AWS CodeBuild で AWS S3 にアップロードする方法 | 東京都渋谷区のシステム開発・アプリ開発とサーバー構築保守運用会社