Day7 オブジェクトストレージS3を使ってみる
S3について
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/Welcome.html
広範にわたるユースケースのデータを容量に関係なく、保存して保護することができます。Amazon S3 では使いやすい管理機能を使用するため、データを整理して、細かく調整されたアクセス制御を設定することで、特定のビジネスや組織、コンプライアンスの要件を満たすことができます。Amazon S3 は 99.999999999% (9 x 11) の耐久性を実現するように設計されています。
イレブン・ナインの耐久性
1. S3からcsvファイルを取得し、RDSを更新する
S3バケットを作りファイルをアップロードする
S3→バケットの作成
バケット名は全世界ユニーク
リージョン:アジア東京
オプションの設定:デフォルト
アクセス許可の設定:デフォルト
バケットを作成
適当にファイルをアップロード
2. PHPでS3からファイルを取得し、RDSデータを更新する
EC2でBatchサーバを作る
EC2→インスタンスの作成
public-1cにBatchサーバを作る
サブネット:public-1c
高度な詳細:
#!/bin/bash # ホスト名 sed -i 's/^HOSTNAME=[a-zA-Z0-9\.\-]*$/HOSTNAME=udemy-aws-14days-batch/g' /etc/sysconfig/network hostname 'udemy-aws-14days-batch' # タイムゾーン cp /usr/share/zoneinfo/Japan /etc/localtime sed -i 's|^ZONE=[a-zA-Z0-9\.\-\"]*$|ZONE="Asia/Tokyo"|g' /etc/sysconfig/clock # 言語設定 echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n # 必要なパッケージの導入 sudo yum update -y sudo yum install -y php70 php70-mbstring php70-pdo php70-mysqlnd sudo yum install -y mysql sudo yum install -y git
新しいセキュリティグループ:Batch-sg
ルール:デフォルト
- RDSの設定
BatchサーバからmysqlコマンドでRDSインスタンスにつなげるようにする
EC2→セキュリティグループ→DB-sg→インバウンド→編集
3306ポートのソースにBatch-sgを追加
IAMユーザ
認証情報→アクセスキーの作成
Batchサーバへ接続
ssh -i key-pair.pem ec2-user@ipv4
RDSサーバへmysqlコマンドで接続
mysql -h RDSエンドポイント -u root -p
BatchサーバへIAMユーザのアクセスキーの登録
aws configure
Access Key ID:
Secret Access Key:
Default region name: ap-northeast-1
Output Format: json
# AWS SDK for PHP curl -sS https://getcomposer.org/installer | php php composer.phar require aws/aws-sdk-php # GitHub から PHPコードを取得する git clone https://github.com/ketancho/udemy-aws-14days.git mkdir src cd src cp -r ../udemy-aws-14days/Day7/src-s3-sample/* .
php ListBuckets.php <?php require '../vendor/autoload.php'; use Aws\S3\S3Client; $s3 = new S3Client([ 'profile' => 'default', 'version' => 'latest', 'region' => 'ap-northeast-1' ]); # バケット一覧の表示 $result = $s3->listBuckets(); foreach ($result['Buckets'] as $bucket) { echo $bucket['Name'] . "\n"; }
S3のバケットが表示される
<?php require '../vendor/autoload.php'; use Aws\S3\S3Client; # TODO: バケット名を各自入力してください const BUCKET_NAME = 's3-sample'; const FILE_NAME = 'data.csv'; $s3 = new S3Client([ 'profile' => 'default', 'version' => 'latest', 'region' => 'ap-northeast-1' ]); # ファイルアップロード try { $result = $s3->putObject(array( 'Bucket' => BUCKET_NAME, 'Key' => FILE_NAME, 'Body' => fopen(FILE_NAME, 'r') )); } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
<?php require '../vendor/autoload.php'; use Aws\S3\S3Client; # TODO: バケット名を各自入力してください const BUCKET_NAME = 's3-sample'; const FILE_NAME = 'data.csv'; $s3 = new S3Client([ 'profile' => 'default', 'version' => 'latest', 'region' => 'ap-northeast-1' ]); try { // Get the object. $result = $s3->getObject([ 'Bucket' => BUCKET_NAME, 'Key' => FILE_NAME, 'SaveAs' => FILE_NAME ]); echo $result['Body']; } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; } try { # TODO: # xxx は RDS のホスト名に置き換えてください # zzz は RDS で設定したパスワードに置き換えてください $dbh = new PDO( 'mysql:host= ; dbname=simple_blog', "root", "password", array(PDO::MYSQL_ATTR_LOCAL_INFILE => true) ); $truncateQuery = "TRUNCATE posts;"; $sth = $dbh->exec($truncateQuery); $loadDataQuery = "LOAD DATA LOCAL INFILE './data.csv' INTO TABLE posts fields terminated by ',';"; $sth = $dbh->exec($loadDataQuery); $dbh = null; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; die(); }
RDSのDBが更新される
3. 静的ホスティング機能を利用する
S3バケットの作成 プロパティ→static website hosting このバケットを使用してウェブサイトをホストする
パブリックアクセス設定 新規のパブリックバケットポリシーをブロックするのチェックを外す
アクセス権限→バケットポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadForGetBucketObjects", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::(***bucket-nameに置き換える***)/*" } ] }
index.htmlのアップロード
S3のstatic website hostingのエンドポイント
http://S3バケット名.s3-website-ap-northeast-1.amazonaws.com/
で静的サイトが見れる