概要
AWS上でPHP7.1が動いているEC2を保有しています。
先日、PHP7.1のサポートがとっくに切れていることを知りまして、バージョンを上げなきゃなと思った次第です。
https://www.php.net/supported-versions.php
現在の管理
AWSはterraformで管理されていて、EC2内部はansibleで管理しています。
- name: Install PHP
yum: name={{ item }} state=present enablerepo=epel
with_items:
- php71
- php71-fpm
- php71-mysqlnd
- php71-mbstring
- php71-gd
- php71-bcmath
- php71-devel
当初の発想
適当にphp71のところをphp74にすれば行けるかなと思ったのですが、そもそもepelにはPHP7.3までしか用意がないようでした。
$ yum list | grep php73.x86_64
php73.x86_64 7.3.17-1.25.amzn1 amzn-updates
$ yum list | grep php74.x86_64
$
PHP7.3でもいいかなとも思ったんですが、PHP7.3も結局今年中にはActive Supportが切れるようなのでPHP7.4にこだわることにしました。
PHP7.4にする方法を考えた
ぐぐると、remiリポジトリを使う方法が結構出てくるのですが、AmazonはExtra Libraryを使う方法を公式で用意しているみたいです。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html#extras-library
remiリポジトリにはよくお世話になっていますが、remiリポジトリはRemi Colletさんが管理しているやつなので、今回はAmazon公式で採用している方法を取ることにします。
https://twitter.com/RemiCollet
(remiリポジトリには本当にお世話になっています。ありがとうございます。本人に届くことは無いと思いますが)
amazon-linux-extrasを使えるようにする
では早速、公式ドキュメントどおりに amazon-linux-extras list
を打って一覧を確認することにします。
$ amazon-linux-extras list
-bash: amazon-linux-extras: コマンドが見つかりません
なるほど。
ドキュメントに (Amazon Linux 2)
と書いてあるということは、 Amazon Linux 2
でしか使えないコマンドであるということですね。(某環境大臣風)
$ uname -a
Linux ip-10-0-1-144 4.14.171-105.231.amzn1.x86_64 #1 SMP Thu Feb 27 23:49:15 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
amzn1ってなってますね…
amiを管理しているterraformを書き換えます。
これを
data "aws_ami" "amazon_linux" {
...
filter {
name = "name"
values = ["amzn-ami-hvm-*"]
}
...
}
こんな感じ
data "aws_ami" "amazon_linux" {
...
filter {
name = "name"
values = ["amzn2-ami-hvm-*"]
}
...
}
terraform planを打つと、forces new resource
と出て、EC2は作り直しになるようでした。
もしかすると私の環境だけかもしれないですが…
EC2なんてansibleとデプロイツールがあれば怖くないということで、バンバン作り直していくことにしました。(なおこの後本番環境に直で置いていた設定ファイルを保存していなかったことで大変後悔することになりますが、それは別の機会で…)
作り直した結果、amazon-linux-extrasコマンドが使えるようになりました。
$ amazon-linux-extras list | grep php7.4
42 php7.4=latest enabled [ =stable ]
というわけで、ansibleも書き換えていきます。
- name: Enable PHP7.4
shell: "amazon-linux-extras enable php7.4"
changed_when: False
- name: Install PHP
yum: name={{ item }} state=present enablerepo=amzn2extra-php7.4
with_items:
- php
- php-fpm
- php-mysqlnd
- php-mbstring
- php-gd
- php-bcmath
- php-devel
こんなwarningも出ちゃいましたが、調べたらとりあえず問題はなさそうだったので、先に進みます。次回の記事で解消します。
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying
`name: "{{ item }}"`, please use `name: ['php', 'php-fpm', 'php-mysqlnd', 'php-mbstring', 'php-gd', 'php-bcmath', 'php-devel']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
PHP7.4になった
こうして無事にPHP7.4になりました。
[ec2-user@ip-172-31-57-63 ~]$ php -v
PHP 7.4.5 (cli) (built: Apr 23 2020 00:10:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
今後
ここ数年、家庭の事情等であんまりアウトプットする機会もなかったんですが、今後は定期的に学んだことをアウトプットしていきます。