AWS

AWS S3 + CodePipeline + CodeBuild + CodeDeploy+ EC2

AWS

S3にzipで固めたソースファイルから1台のEC2にデプロイするって構成です。

 

① S3バケットの作成

 

  • バケット名:bf-deploy-bucket
  • バージョニングを有効化する

 

② IAMロールの作成

 

CodeDeploy-Manage-EC2-Role

 

CodeDeployからEC2やAutoScalingを参照・操作する為のロール

  • 「IAM → ロール → ロールの作成 → CodeDeploy → ユースケースの選択(CodeDeploy) → 次(アクセス権限) → 次(確認) → ロールの作成」

 

EC2-Manage-S3-Role

S3から情報取得するロールの作成

  • 「IAM → ロール → ロールの作成 → EC2 → 次(アクセス権限) → AmazonS3ReadOnlyAccessを選択 → 次(確認) → ロールの作成」

EC2にロールをアタッチ

  • 「ec2管理 → インスタンス選択 → アクション → インスタンスの設定 → IAMロールの割当て/置換」からアタッチ

 

タグを設定しておく

  • キー:Deploy
  • 値:bf

 

③ EC2でCodeDeploy-Agentをインストール

 

 

 

 

 

 

④ アップロードするソースファイルを設計する

 

こういう形とした。

 

appspec.yml

 

⑤ CodeDeploy デプロイグループの作成

 

●アプリケーション作成

 

  • CodeDeploy の Console画面にて、デプロイ → アプリケーション →
  • →デプロイのプラットフォームをEC2設定
  • →アプリケーションの作成

 

●デプロイグループ作成

  • デプロイグループ名:bf-DeployA
  • サービスロール:arn:aws:iam::925948485307:role/CodeDeploy-Manage-EC2-Role
  • デプロイタイプ:インプレース

 

●環境設定

Amazon EC2 インスタンス

タグ設定

キー:Deploy
値:bf

 

  • デプロイ設定:CodeDeployDefault.OneAtATime
  • ロードバランサー:ロードバランシングを有効にするのチェックをはずす

 

⑥パイプラインの作成

 

  • パイプライン名:bf-TEST-PipeLine
  • サービスロール:新規で作成

 

  • ソースプロバイダー:Amazon S3
  • バケット:bf-deploy-bucket
  • S3オブジェクトキー:master.zip
  • 検出オプションを変更する:Amazou CloudWatch Events(推奨)

 

  • ビルドステージを追加する:ビルドステージをスキップ
  • デプロイプロバイダー: AWS CodeDeploy
  • アプリケーション名:bf-TEST-App
  • デプロイグループ:bf-DeployA

 

⑦S3にアップロードしてデプロイ

この構成でmaster.zipをbf-deploy-bucketバケットにアップロードすると、CloudWatch Eventが発火して、CodePipelineが走って、CodeDeploy、そしてEC2の/var/www/html/appにデプロイされる。

 

エラー対応

 

EC2のログから確認することができる

 

IAMロールの読み込みの問題

CodeDeployエージェントがEC2のIAMロールを読み込んでいない

CodeDeployエージェントをインストールしてから、IAMロールを取り付けた場合は権限をエージェントが読みこめていない。

読み込ませる。

 

ソースの構成がおかしい

この構成なら、

 

appspec.yml

こうなる。

 

本番とCodeDeployのリビジョンとの不整合

不整合が起こってますよ〜!っていう具体的な通知などはない。

本番のソースやログファイルなどが変化してしまって、CodeDeployのリビジョンとの整合性エラーでデプロイに失敗するようになる。

対応

  • CodeDeployのリビジョン管理からログや画像などのディレクトリを除外しておく
    設定として気をつける。
  • CodeDeploy, CodePipelineを削除して作り直して再デプロイ
    これが早い。

不整合が起こるとappspec.ymlなどが正しくてもひたすらエラーになるので詰まったら、5分もかからないのでCodeDeploy, CodePipelineを再作成してみるのがおすすめです。

 

 

appspec.yml hook対応版

 

 

 

 

appspec.yml

 

scripts/stopApache.sh

 

scripts/startApache.sh

 

 

ELBを利用した場合のデプロイが遅い!

ELBの設定を確認する

デプロイ待機時間 ≒ Interval × Healthy Threshold

  • Interval: 20sec, Healthy Threshold:10sec
    →200秒ぐらい
  • Interval: 5sec, Healthy Threshold:5sec
    →25秒ぐらい

 

 

@see

hook

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)