Amazon Linux 2に最新の安定版Apache 2.4.62をインストールする手順

## はじめに
Amazon Linux 2にapacheの最新バージョン2.4.62がインストール出来るか確認するために検証しました。
この記事は公式サイトを元に個人的に調査した結果をまとめたものです。



**注意事項 こちらの記事は2024年12月時点のものです 必ず公式サイトにて現在のapacheの最新バージョンをご確認ください**

apacheのバージョンを最新の安定版は、バージョン2.4.62です。
<公式サイト>
https://httpd.apache.org/download.cgi?utm_source=chatgpt.com

## 前提条件
amazon linux2のOSのEC2を作成する

## 手順

apacheのバージョンを最新の安定版は、バージョン2.4.62までインストール可能そうです。

※chatGPTから参照
|パラメータ名|意味  | |
|---|---|---|
|list  |利用可能なパッケージやインストール済みのパッケージの情報をリスト表示  | |
|available|現在インストールされていないが、リポジトリ内でインストール可能なパッケージを表示  ||
|httpd  |検索対象となるパッケージ名。ここではApache HTTP Server（httpd）パッケージに限定して検索します。 | |
|--showduplicates|同じパッケージ名であっても、異なるバージョンが複数存在する場合、それらすべてをリストに表示するオプション。| |


```
[root@ip-10-0-11-74 ~]# yum list available httpd --showduplicates
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
httpd.x86_64                                                    2.4.6-67.amzn2.6.1                                                     amzn2-core
httpd.x86_64                                                    2.4.33-2.amzn2.0.2                                                     amzn2-core
httpd.x86_64                                                    2.4.33-2.amzn2.0.3                                                     amzn2-core
httpd.x86_64                                                    2.4.33-2.amzn2.1.0                                                     amzn2-core
httpd.x86_64                                                    2.4.34-1.amzn2.1.0                                                     amzn2-core
httpd.x86_64                                                    2.4.34-1.amzn2.1.1                                                     amzn2-core
httpd.x86_64                                                    2.4.37-1.amzn2.0.1                                                     amzn2-core
httpd.x86_64                                                    2.4.39-1.amzn2.0.1                                                     amzn2-core
httpd.x86_64                                                    2.4.41-1.amzn2.0.1                                                     amzn2-core
httpd.x86_64                                                    2.4.43-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.46-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.46-2.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.48-2.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.51-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.52-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.53-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.54-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.55-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.56-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.57-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.58-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.59-1.amzn2                                                         amzn2-core
httpd.x86_64                                                    2.4.61-1.amzn2.0.1                                                     amzn2-core
httpd.x86_64                                                    2.4.62-1.amzn2.0.1                                                     amzn2-core
httpd.x86_64                                                    2.4.62-1.amzn2.0.2                                                     amzn2-core
```
httpd-2.4.62-1.をインストールしました。
```
# yum -y install httpd-2.4.62-1.amzn2.0.2
```
Apache/2.4.62のバージョンになりました。
```
[root@ip-10-0-11-74 ~]# httpd -version
Server version: Apache/2.4.62 ()
Server built:   Aug 13 2024 20:16:58
```

## Fargateでも試しました。
amazon linux2のEC2にAdministratorAccessの権限付与

aws cliをインストール
dockerをインストールする
```
# yum install docker
```
EC2の/rootフォルダ配下にapacheのバージョン2.4.62をインストールするdockerfileを定義
```
cd /root

# cat dockerfile
# Amazon Linux 2 ベースイメージを使用
FROM amazonlinux:2

# 特定バージョンの httpd をインストール
RUN yum -y install httpd-2.4.62-1.amzn2.0.2 && yum clean all

# 必要なポートを公開
EXPOSE 80

# Apache を前景モードで起動
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

### ECRにプライベートリポジトリにリポジトリを作成する

サービス >> ECR >> プライベートリポジトリをクリックする。
対象リポジトリをクリックして「プッシュコマンドを表示」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/32dc839e-dc66-25b8-5acd-57e3062286b9.png)

#### リポジトリに対してイメージを認証し、プッシュします。
※dockerfileを格納しているフォルダへ移動してから以下のプッシュコマンドを実行する。
```
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <AWSアカウント番号>.dkr.ecr.ap-northeast-1.amazonaws.com
```
**以下のコマンドを実行するにはdockerサービスを起動する必要があります。**
以下のコマンドを使用して、Docker イメージを構築します
```
docker build -t test-apache .

[+] Building 21.2s (6/6) FINISHED                                                                                                 docker:default
 => [internal] load build definition from dockerfile                                                                                        0.0s
 => => transferring dockerfile: 200B                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/amazonlinux:2                                                                            1.7s
 => [internal] load .dockerignore                                                                                                           0.0s
 => => transferring context: 2B                                                                                                             0.0s
 => [1/2] FROM docker.io/library/amazonlinux:2@sha256:e43d43164208b96f2ddbe5652b606c944073b76292d73c2f5868312d25bc1e6c                      4.4s
 => => resolve docker.io/library/amazonlinux:2@sha256:e43d43164208b96f2ddbe5652b606c944073b76292d73c2f5868312d25bc1e6c                      0.0s
 => => sha256:e43d43164208b96f2ddbe5652b606c944073b76292d73c2f5868312d25bc1e6c 2.37kB / 2.37kB                                              0.0s
 => => sha256:59a60a81efa119dffb69d057fce03fa9b5581db48e4275d16a2bb77eaca938a1 1.02kB / 1.02kB                                              0.0s
 => => sha256:8c31145513eb307a0391a15836de7602f75a4fb394999f865400e903b13deb4f 556B / 556B                                                  0.0s
 => => sha256:899046e4a240e349763e42464f501b60a1bd429af9f38ccd927d9da2124b98de 62.68MB / 62.68MB                                            0.9s
 => => extracting sha256:899046e4a240e349763e42464f501b60a1bd429af9f38ccd927d9da2124b98de                                                   3.3s
 => [2/2] RUN  yum -y install httpd-2.4.62-1.amzn2.0.2                                                                                     12.0s
 => exporting to image                                                                                                                      2.9s
 => => exporting layers                                                                                                                     2.9s
 => => writing image sha256:76ea342bc6bcd950d323240e8747fd6452c63a1975189648d98e74bb4dd5665f                                                0.0s
 => => naming to docker.io/library/test-apache
```
構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
```
docker tag test-apache:latest <AWSアカウント番号>.dkr.ecr.ap-northeast-1.amazonaws.com/test-apache:1
```
以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします:
```
# docker push <AWSアカウント番号>.dkr.ecr.ap-northeast-1.amazonaws.com/test-apache:1
The push refers to repository [<AWSアカウント番号>.dkr.ecr.ap-northeast-1.amazonaws.com/test-apache]
7381873b1670: Pushed
3f307074c00f: Pushed
1: digest: sha256:70f8bd89102a88344b5e407e3add31347cef1eb3c9e5074761fc706bd92c3d79 size: 741
```
イメージタグ1でプッシュ出来ていることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/8e3fd655-a762-a20c-b73f-74bf2e1e83ed.png)


### タスク定義を作成する
|パラメータ名|意味  | |
|---|---|---|
|タスク定義ファミリー|test-task| |
|起動タイプ|AWS Fargate||
|OS |Linux/x86_64| |
|コンテナ|test-apache| |
|イメージURL|「AWSアカウント番号」.dkr.ecr.ap-northeast-1.amazonaws.com/test-apache:1| |

※ログ収集の使用はお金がかかるため今回はオフにしました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/7f8d810f-3493-b36d-3369-a3250bbb91fe.png)

### サービスを作成しました
|パラメータ名|意味  | |
|---|---|---|
|コンピューティングオプション|キャパシティープロバイダー戦略| |
|カスタムを使用 (アドバンスト)|FARGATE ウエイト1||
|プラットフォームバージョン |LATEST| |
|タスク定義|test-task リビジョン1| |
ローリングアップデートにチェックを入れた
ネットワーキングでVPC 　サブネット　セキュリティグループの設定を行う

**ローリングデプロイのため、
新しいリビジョンをデプロイ後、新しいコンテナが実行中になるまでは古いコンテナは停止しないことが分かりました。並行稼働します。そのため、タスクをデプロイして接続断が発生しないように見受けられます**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/4d21ebca-3903-f880-b865-c6adbf110a90.png)


**ECRのリポジトリを更新したら必ずタスク定義も更新する必要があります。**
ECRリポジトリを更新
タスク定義を更新　※ECRリポジトリを選択する。
サービスを更新 ※タスク定義のリポジトリを選択する

### ECSにログインしました。
ECS EXECの設定をしました。
以下のサイトが大変参考になりました。
https://blog.serverworks.co.jp/ecs-exec

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/32a965df-3448-c050-7f7a-ea6d8c5277f4.png)

以下のコマンドでECSに接続しました。
```
$ aws ecs execute-command --cluster test \
>     --task d775756b28274b57943289784f784c1c \　※タスクID
>     --container test-apache \　コンテナ名
>     --interactive \
>     --command "/bin/sh"
```
ECSにログイン後、httpdのバージョンを確認を行い2.4.62になっていることを確認しました。
```
sh-4.2# httpd -v
Server version: Apache/2.4.62 ()
Server built:   Aug 13 2024 20:16:58
sh-4.2#
sh-4.2#
```
### この検証でかかった費用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599002/2a412e05-1cc9-7602-85d7-855258dc8530.png)



## まとめ
Amazon Linux 2はEC2とFargate含めて最新の2.4.62までバージョンアップできることが分かりました。
Fargateのデフォルトはローリングアップデートで且つレプリカのため、新しいコンテナが実行中になるまでは古いコンテナは停止しないことが分かりました。並行稼働します。そのため、タスクをデプロイして接続断が発生しないように見受けられます