#はじめに
前記事(EC2サーバー構築の概要【備忘録】)で作成したEC2インスタンスと、AWSストレージサービスであるS3をPHPで接続した時に調べたことの備忘録。
AWSアカウントを作成し、EC2インスタンスのセットアップが完了していることが前提です。
具体的な概要・用語についての記事であり、具体的な手順については割愛しています。
#目次
- 全体の流れ
- 項目別の詳細
- yumとrpm
- 参考文献
#全体の流れ
####S3セットアップ
- S3バケット作成
- IAMロール作成
- EC2インスタンスにIAMロールを割り当て
- エンドポイントの作成
####AWS SDK for PHP でS3に接続
5. PHPのバージョンアップ
6. Composerインストール
7. AWS SDK for PHPをインストール
#項目別の詳細
####S3バケット作成
手順通りやればいいので割愛。
####IAMロール作成・IAMロールを割り当て
IAM(Identity and Access Management)とは、AWSサービスへのアクセスを安全に行うためのAWSサービス。その機能の一つに、「限定されたアクセス権限を持つロールやユーザーの作成」がある。仮にアクセス情報が漏洩した場合、これらのIAMロール・IAMユーザーを認証に用いていれば、アクセス権限が限定されているため、被害を最小限に抑えられるという利点がある。
また、IAMユーザーとIAMロールの違いは使用方法の違いにある。
IAMユーザーは「アクセス権限を限定されたユーザー」という体でアクセスキーとシークレットキーを設定ファイルなどに記述して認証させるが、IAMロールはAWSコンソールからEC2インスタンスへの割り当て設定をすることで、いちいちキーを記述したりせず自動的に認証をさせることができる。
今回は、EC2とS3の接続にはこのIAMロールを用いた。
####エンドポイントの作成
IAMの件と同様、最大限「セキュアな通信」というものを実現させるために作られたシステム。
AWSサービスの中で、EC2はVPC(仮想空間的なもの)内にあり、S3はVPC外にある。EC2がVPC外のサービスと通信をするためにはプライベートネットワークからインターネットへの接続を仲介させる必要があるが、エンドポイントを設定すると、その役割をエンドポイントが担ってくれる。これにより通信の際にインターネットを挟まずに済むため、「セキュアな通信」が可能となる。
####PHPのバージョンアップ
AWSサービスとの接続にはAWS SDK for PHPを用いるが、これはPHP5.4に対応していない。しかしながら、yum install phpでPHPを入れると5.4が入ってしまう。
この問題には「パッケージリポジトリ」と「yum」の概念が関係している。
「yum install パッケージ 」は、「登録されたパッケージリポジトリ(色々なパッケージが入ってるフォルダ)から指定されたパッケージをインストールする」という指示を出す。そしてEC2にデフォルトで登録されているAmazon LinuxのパッケージリポジトリにはPHPは5.4しか入っていないため、このような不具合が起きる。
そこで、PHP7.4が入っている外部リポジトリ「remi」を登録し、そこからインストールする。
sudo amazon-linux-extras install epel //amazon linuxリポジトリにepelを追加し、yumでインストールできるようにする
//epel-release:remiを入れるために必要なパッケージ
sudo yum install epel-release //epel-releaseをインストール
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm //rpmコマンドでremiをインストール
sudo yum install -y php74 php74-php php74-php-fpm //PHP7.4をインストール
sudo ln -s /usr/bin/php74 /usr/bin/php //php74のシンボリックリンクを作成する(phpコマンドを使えるようにする)
備考:-UvhはオプションU(アップグレード),v(詳細情報),h(進行状況の表示)のまとめ書き。
####Composerをインストール
AWS SDK for PHPはComposerからインストールするので、まずはComposerを入れる。
今回はcurlコマンド(ファイルを転送するコマンド。引数にURLを指定することでファイルをダウンロードできる。-sSでエラーメッセージ以外の進捗状況を非表示にする)を用いる。
curl -sS https://getcomposer.org/installer | php //Composerをインストール
####AWS SDK for PHPをインストール
php composer.phar require aws/aws-sdk-php //AWS SDK for PHPをインストール
#yumとrpm
個人的に気になった部分なので調べた。
rpm(Redhat Package Manager):Red Hat系のLinuxで用いられるパッケージマネージャ。以前はパッケージを入れる際に用いられていたが、依存関係を考慮するのが厄介になってきたため、リポジトリ内の依存関係にあるパッケージをすべてインストールするyumが作られた。現在はリポジトリ単位のパッケージ(remiなど)を入れる際に使われる。
yumはrpmを基に作られているため、併用しても依存関係は崩れない。
#参考文献
LaravelでAWS S3へ画像をアップロードする
[AWS] VPCエンドポイント経由でEC2からS3へファイル転送
Amazon S3 におけるエンドポイント
IAM ロール
リポジトリ・yum・rpmについて
AWS SDK For PHPを使ってみた