ジャギ様のAWSチャレンジ

awsに関したことを書きます。

Mattermost構築の流れ(手動編)Part8 S3、ASM、CodeBulid

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はパスワードとか機密性の高いデータを保存する場所です。

パラメータを作成

  • AWSコンソール画面の検索窓に「AWS Systems Manager」と入力し、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したリポジトリcommitpushをしてください。

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を設定

手動版ではS3にファイルがアップロードできていない。

権限設定が不足している。 AWS CodeBuild で AWS S3 にアップロードする方法 | 東京都渋谷区のシステム開発・アプリ開発とサーバー構築保守運用会社