0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

S3バケットを作成してEC2と接続する【備忘録】

Posted at

#はじめに
 前記事(EC2サーバー構築の概要【備忘録】)で作成したEC2インスタンスと、AWSストレージサービスであるS3をPHPで接続した時に調べたことの備忘録。
 AWSアカウントを作成し、EC2インスタンスのセットアップが完了していることが前提です。
 具体的な概要・用語についての記事であり、具体的な手順については割愛しています。

#目次

  • 全体の流れ
  • 項目別の詳細
  • yumとrpm
  • 参考文献

#全体の流れ
####S3セットアップ

  1. S3バケット作成
  2. IAMロール作成
  3. EC2インスタンスにIAMロールを割り当て
  4. エンドポイントの作成

####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を使ってみた

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?