0
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?

AWSでCI/CDパイプラインを新卒1年目が構築してかなり手こずった話

0
Posted at

はじめに

実務でまだコードをサーバ上で動かすところまでは触れていないため、CI/CDパイプラインがどのように動くのかイメージがわかない状況であった。
PJ内でアプリのデプロイ自動化の仕組みが必要だねといった話が聞こえるようになったので、実際にイメージをつかむために作ってみた。
今回はAWSのCI/CDツールを利用した。

実際に構築に入る前に調べて得た情報はこんな感じであった。
CI/CDパイプライン

アプリに変更を加えた際に、自動でテストを実行し、最終的にサーバ上で動作する状態にまで持っていく自動化の仕組みである。

ビルド

サーバ上でコードを動かせるように、依存関係を解決し実行環境を整える工程である。

デプロイ

ビルド済みの成果物をサーバ上に配置し、実際に動作させる工程である。

前提

・GitHub上にソースコードがある

使用リソース

・AWS CodePipeline
・AWS CodeBuild
・AWS CodeDeploy
・Amazon EC2(t2.micro)

手順
1. 前提条件を満たす

GitHubにソースコードをコミットした。
ChatGPTにRubyでアプリケーションを書いてもらい、以下をコミットした。

・Gemfile
・app.rb
・views

2. サーバを立てる

EC2インスタンスを作成した。

3. CodePipelineを設定

CodePipelineへ移動し、GitHubリポジトリを選択できることを確認した。

4. CodeBuildを設定

buildspec.yml(ビルドの流れを記載するファイル)の作成が必要であった。

以下を示したものである。

・どのランタイムを使用するか
・どのコマンドを実行するか
・成果物として何を次の工程に渡すか

5. CodeDeployを設定

appspec.yml(デプロイの流れを記載するファイル)の作成が必要であった。

以下を示したものである。

・どこにファイルを配置するか
・配置後に何を実行するか

6. デプロイスクリプトの作成

実際にデプロイで行う処理をスクリプトで示す必要があるようだった。

7. CodePipelineの実行

アプリに変更を加えたら、自動で変更を反映してくれそうであった。

ざっと概要を理解したので、実際に手を動かしてみた。

詰まったポイント

CodeBuildの設定段階でうまく動作せず詰まった。

原因は、buildspec.ymlをGitHubのルートディレクトリに配置していなかったことである。

それ以外にも以下の点で困ったため、これから初めてCI/CDを構築する人の参考になればと思い記載する。

・GitHubとAWSの連携ができない
 → GitHubでAWS連携アプリ「AWS Connector for GitHub」の設定が必要であった

・IAMポリシーでどのリソースへのアクセスを許可すればよいのか分からない
 → 基本的に各サービスの設定時に必要なものは作成してくれた。作成前にそこまで複雑に考える必要はなかった。

かなり長時間詰まったが、手順を修正しながら構築を続け実装できたので最終的な構築手順を記しておく

最終的な構築手順

使用リソースは以下である。

・AWS CodePipeline
・AWS CodeBuild
・AWS CodeDeploy
・Amazon EC2(t2.micro)
Amazon S3(artifactとして必要)

① EC2側の準備

1.EC2インスタンス作成

2.Ruby環境構築

3.アプリ配置ディレクトリ作成

4.CodeDeployエージェントインストール

5.EC2にIAMポリシーを付与
 ・AmazonEC2RoleforAWSCodeDeploy

② buildspec.yml作成(CodeBuild用)
ファイルに書くのは以下の内容
version
buildspecの記法バージョン

phases
ビルド処理の実行フェーズ

commands
そのフェーズで実行するコマンド

artifacts
ビルド成果物の出力対象

③ appspec.yml作成(CodeDeploy用)
ファイルに書くのは以下の内容
version
AppSpecファイルの仕様バージョン

files
どのファイルをどこに配置するか

hooks
デプロイの各タイミングで実行する処理

④ デプロイスクリプト修正

実際にデプロイ時に実行する処理はここで記述した。
ローカルで動作確認を行い、実行権限も付与した。

⑤ CodeDeploy設定

1.アプリケーション作成

2.デプロイグループ作成

3.EC2タグ指定

4.デプロイタイプ指定

⑥ CodeBuild作成

1.GitHubをソースに指定

2.IAMロール作成

3.artifacts出力先設定

⑦ CodePipeline作成

1.ソースステージ作成
 GitHub接続
 mainブランチ指定

2.ビルドステージ作成
 CodeBuild指定

3.デプロイステージ作成
 CodeDeploy指定

結果

Codepipelineが正常動作するようになった。
image.png

実際に構築してみたことで、CI/CDツールがどのような流れで動作しているのか理解が深まった。
構築して非常に良い経験になったと感じている。

0
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
0
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?