[2017夏版] AWS Start-up ゼミ参考資料リンク集をマークダウンに起こしました

TL;DR

こんにちは。AWSリハビリ中のnntsuguです。

[AWS Start-up ゼミ] よくある課題を一気に解説!〜御社の技術レベルがアップする 2017 夏期講習〜

先日参加させていただいたAWS Stat-upゼミ、講師のSA塚田さんの資料がとても良かった。
AWS上でサービスを構築運用する上での勘所がユースケースベースで整理されていて、モヤモヤしていた部分がかなりスッキリししました。

資料内にある参考資料や動画へのLink、とても勉強になるのですが、

  • PDFやSlideShareだとスマホから参照しづらい
  • 未読管理をしやすくするため

マークアップに起こしました。

毎朝ジムで走りながら参考資料の動画を見て聞いています。とても捗ります。

参考資料は主にBlack Beltの資料&動画アーカイブ、AWS Summit/Dev Dayの資料で構成されています。

ユーザ動向を分析したい

CI/CDをちゃんとしたい

コンテナを使いたい

運用監視ちゃんとしたい

システム負荷下げたい

(モバイルアプリの)Growth Hackしたい

コスト下げたい

  • AWS Black Belt Online Seminar資料&動画

    • クラウドのためのアーキテクチャ設計-ベストプラクティス-(資料|動画)
    • Auto Scaling (資料 | 動画)
    • Amazon EC2 Spot Instances (資料 | 動画)
    • サーバーレスによるアーキテクチャパターンのご紹介 (資料 | 動画)
  • AWS Summit/Dev Day講演資料 (2016 | 2017)
    • AWS のコスト最適化入門 (2017)(資料 | 動画)
    • [インティメート・マージャー様] AWS Summit 2017 講演資料 Amazon ECS と SpotFleet を活用した低コストでスケーラブルなジョ
      ブワーカーシステム(資料 | 動画)
    • AWS Well-Architected フレームワークによるクラウド ベスト プラク
      ティス (2017) (資料 | 動画)

その他

IPOとBuy Out、デューデリジェンス

続きを読む

StorageGatewayを使ってS3をNFSマウント

EC2にS3をマウントしたい

S3をNFSマウントする方法はいくつかあるものの、どれも面倒だし公式じゃないし(?)不安定そう… :pensive:

と思っていたら、StorageGatewayでそのような機能が公式から提供されていました。
設定にあたり、いくつか迷った箇所があったためこちらにまとめます。

そもそもStorageGatewayとは

公式ドキュメントより

AWS Storage Gateway は、オンプレミスのソフトウェアアプライアンスをクラウドベースのストレージと接続し、お客様のオンプレミスの IT 環境とアマゾン ウェブ サービス (AWS) のストレージインフラストラクチャとの間にデータセキュリティ機能を備えたシームレスな統合を実現するサービスです。

* AWS Storage Gateway とは

なるほど…?:thinking:

<オンプレ または EC2> :left_right_arrow: <StorageGateway> :left_right_arrow: <S3>

的な感じでつなげてくれるサービスって感じでしょうか。
この <StorageGateway> の部分をEC2インスタンスで構築できるようです。

ファイルゲートウェイとは

上の <StorageGateway> の部分がファイルゲートウェイです。
StorageGatewayでは、 ファイルゲートウェイ ・ ボリュームゲートウェイ ・ 仮想テープゲートウェイ を作成することができ、ファイルゲートウェイはそのうちの一種類です。

ファイルゲートウェイの機能とは?:worried:
S3はネットワーク越しに存在しているので、そのままだとアップロードもダウンロードも時間がかかってしまいます。
そこで、間にファイルゲートウェイが入って使用したデータのローカルキャッシュを行い低レイテンシな接続を実現しているようです。

ファイルゲートウェイの要件

要件をもとに、ファイルゲートウェイが何をしているのか探っていきましょう。
* AWS Storage Gateway – 要件
ドキュメントを見ると、ファイルゲートウェイとして最低限必要なものは以下でしょうか。

  • m4.xlarge 以上のインスタンスタイプ
  • 追加で 150GB のキャッシュストレージ
  • 以下のポートについて許可
    • インバウンド : 80番ポート
      クライアントがHTTP経由(というかマネジメントコンソール?)でファイルゲートウェイをアクティベートするためのもの
    • インバウンド : 2049番ポート
      S3をマウントしたいEC2インスタンスからのアクセスを受け付けるもの
      (portmapper や mountd が必要な場合は適宜ドキュメントを参考に他のポートも許可してください)
    • アウトバウンド : 443番ポート
      StorageGatewayのエンドポイントと連携を取るもの。これについてはインターネットに出る必要がある。

箇条書きだとよくわからないので、図にしました。
こんな感じでしょうか。

storahe.png

通信経路などについては 公式のBlackBelt資料 などを参考にしました。

ファイルゲートウェイの作成

とりあえず、動くものを作りましょう。

  1. マネジメントコンソールより [Storage Gateway] を選択
  2. [ゲートウェイの作成] → [ファイルゲートウェイ] → [Amazon EC2] → [インスタンスの起動]
  3. インスタンスの作成
    3.1. 最低でも m4.xlarge が要件となっているため今回は m4.xlarge を選択
    3.2. 外部からアクセスするため 自動割り当てパブリックIP を有効化
    3.3. 追加で 150GB のキャッシュストレージが必要なため 150GB の新しいボリュームを追加
    3.4. 要件で説明したセキュリティグループを適切にアタッチ
    3.5. インスタンス立ち上げ
  4. [次へ] を押し [ゲートウェイに接続] の画面へ
    インスタンスが立ち上がるまで少々待ち、 3.2 でアタッチしたパブリックIPを入力
  5. 作成したゲートウェイを選択し、 [ファイル共有の作成] を選択
  6. マウントしたいS3バケット名を入力し、ファイル共有を作成
  7. 作成後、ステータスが 利用可能 となったら、画面に表示されているコマンドよりマウント
    (例)
$ mkdir /home/ec2-user/gateway
$ sudo mount -t nfs -o nolock 10.0.x.x:/<バケット名> /home/ec2-user/gateway

使ってみる

マウント

$ mkdir gateway
$ sudo mount -t nfs -o nolock 10.0.0.98:/<mybucket> /home/ec2-user/gateway

ファイルゲートウェイにファイルを保存

$ touch sg_test
$ cp sg_test ./gateway/
$ ls ./gateway/
sg_test

S3にファイルがあるか確認

$ aws s3 ls s3://<mybucket>
2017-08-16 23:25:45          0 sg_test

問題なくマウントできていますね :thumbsup:
ファイルゲートウェイに保存後、数十秒〜1分ほどでS3に同期されました。

おわり

かなり手軽にS3をNFSマウントすることができました。
検証したら複数クライアントから同時にマウントすることも可能だったのですが、整合性とれなくなっておかしなことになりかねないので非推奨かと思われます :expressionless:

続きを読む

VPC環境でのEC2インスタンスはプライベートIPアドレスは固定

EC2のプライベートアドレスが停止するたびに開放されるということを、聞いたことがあったので、固定の方法を調べた。
結果としてVPC環境で作っていればプライベートIPアドレスは変わらないうことがわかったので、固定する必要性があまりなくなって終了

Amazon EC2 インスタンスの IP アドレッシング

EC2-Classic で起動されるインスタンスでは、インスタンスが停止または終了したときにプライベート IPv4 アドレスが解放されます。停止したインスタンスを再開すると、インスタンスには新しいプライベート IPv4 アドレスが割り当てられます。

VPC で起動されたインスタンスの場合、インスタンスが停止後に再開されたときはプライベート IPv4 アドレスとネットワークインターフェイスの関連付けが維持され、インスタンスが終了されたときは解放されます。

続きを読む

CloudBerry Explorer for Amazon S3でAmazon S3にアクセスしてみた

S3とCloudBerry ExplorerでEC2 + Samba + Windowsエクスプローラに似た操作感をだす

Amazon S3Amazon EC2 + Sambaを用いて業務でファイルサーバーの設置をすることになった。
windowsのエクスプローラからアクセスしたいとのことでEC2 + Sambaを採用することになったけど、個人的にはS3を利用したかったのでいろいろと調べてみてS3でも似たような操作感でファイルを保存する方法を見つけたので手順を残しておくことにした。

前提

  • AWSのアカウントも持っていること

環境

  • Windows10
  • Chrome

参考サイト

手順

  1. Amazon S3でバケットを作成する
  2. Amazon IAMでユーザー・グループを作成する
  3. CloudBerry Explorerをダウンロードする
  4. CloudBerry ExplorerからS3にアクセスする

おおまかにはこんな感じの手順で進めていきます。

1. Amazon S3でバケットを作成する

①まずはAWSのコンソールにログインをする。

②S3を選択する。

AWSコンソール1.png

③「バケットを作成する」を選択する。

  • バケット名:一意のものにしましょう
  • リージョン:東京
  • 既存のバケットから設定をコピー:とりあえず省略

バケット作成.png

あとは【次】を押していき最後に【バケットを作成】で作成したバケットがリストに追加される。

新規バケット.png

2. Amazon IAMでユーザー・グループを作成する

①AWSサービス一覧からIAMを選択する。

AWSコンソール2.png

②メニューの【グループ】をクリックし、【新しいグループの作成】をクリックする。

  • グループ名:任意
  • ポリシータイプ:とりあえずスルー

IAMグループ作成.png

最後に【グループの作成】をクリックするとメニュー【グループ】に新しく作成したグループが追加される。

IAMグループ作成2.png

③ユーザーをグループに追加する。グループ作成時と同様にメニューの【ユーザー】をクリックし、【ユーザーを追加】をクリックする。

  • ユーザー名:任意
  • 別のユーザーを追加で複数ユーザーを同時に作成できる

IAMユーザー追加.png

  • アクセスの種類:好み
  • パスワード:自動生成が楽でしょう
  • パスワードのリセットの必要性:好み

IAMユーザー追加2.png

アクセス権限の設定はなにもせず【次のステップ:確認】、最後に【ユーザーの作成】をクリックするとユーザーが作成されます。
アクセスキーIDシークレットアクセスキーは.csvでダウンロードしておきましょう。

キー.png

④もう一度メニューの【グループ】をクリックし、先ほど作成したグループをクリックする。

【グループにユーザーを追加】ボタンをクリックする。

ユーザー追加.png

追加したいユーザーにチェックをいれ【ユーザーの追加】をクリックする。

ユーザー追加2.png

ユーザーが追加される。

ユーザー追加3.png

⑤【アクセス許可】のタブをクリックし、【インラインポリシー】をクリックし表示された【ここをクリックしてください】をクリックする。

アクセス許可1.png

【Policy Generator】の【選択】をクリックする。

許可の設定1.png

  • 効果:許可
  • AWSサービス:Amazon S3
  • アクション:すべてのアクション
  • Amazon リソースネーム(ARN):arn:aws:s3:::バケット名

IP制限などを設けたい場合は条件の追加(オプション)をクリック

  • 条件:IpAddress
  • キー:aws:SourceIp
  • 値:許可するIPアドレス

【条件の追加】【ステートメントを追加】をクリックする。
アクセス許可の編集.png

【次のステップ】をクリックしてAWSの操作は完了

3. CloudBerry Explorerをダウンロードする

こちらのリンクからダウンロードする、インストールしましょう。
CloudBerry Lab

無償だと時折「寄付」をねだられるらしいが無償で使えます。

4. CloudBerry ExplorerからS3にアクセスする

①CloudBerry Dxplorerを開きいて、メニュー左の【ファイル(F)】をクリック、【Amazon S3アカウント】をクリックする。

berry1.png

②埋める。

  • 名前表示(N):任意の名前
  • Use Access and Secret keys
    • Access key:AWS IAMでユーザーを追加したときのアクセスキー
    • Seacret key:AWS IAMでユーザーを追加したときのシークレットキー

最後に【OK】をクリックし、【close】をクリックする。

berry2.png

③マイコンピュータを先ほど追加したアカウント名に変更し、ルートの個所に【バケット名】を入力してエンターを叩いてエラーがでなければ終了。

berry3.png

続きを読む

AWSのチュートリアル 〜Analyze Big Data with Hadoop編〜

AWSのチュートリアルの日本語メモ

はじめに

最近業務でAWS上に構築したHiveを利用するのですが、より理解を深めたいと思い、今回はAWSのチュートリアルを利用して、Hadoop + Hive環境を1から構築してみました。

チュートリアルの内容

Step1: Set Up Prerequisites for Your Sample Cluster

Sign Up for AWS

以前登録していたため、今回はスキップ

Create an Amazon S3 Bucket

S3とは、データを保存するサービス、詳しい内容はここ
以前に利用したことがあったのでここもスキップ

Create an Amazon EC2 Key Pair

EC2とは、Amazonが提供してくれているWEBサーバ、詳しくはここ
sshでログインするために、key pairを発行する必要がある。
今回はここのサイトを参考に、以前作成したkey-pairを利用。

  • EC2のコンソールページのネットワーク&セキュリティタブのキーペアをクリック
  • 上のキーペアのインポートをクリック
  • key-pairの名前とkey-pair.pubの中身をペーストして登録

Step2: Launch Your Sample Amazon EMR Cluster

Launch the Sample Cluster

EMRのクラスタを作成する。EMRとは、AWS上でHadoopを使用するためのサービス。
詳しくはここを参照

  • EMRのコンソールページに移動
  • クラスターの作成をクリック
  • EC2キーペアの部分で、先ほど登録したkey-pairを指定する
  • クラスターの作成をクリック

Step3: Prepare Your Sample Data and Script

ここでは提供されているサンプルログデータとサンプルhiveコードの説明

Sample Data Overview

サンプルのログデータは、s3://[region].elasticmapreduce.samplesに格納されているらしい。
ただし、[region]には自分が使用しているリージョン名が入る。

Sample Hive Script Overview

Hiveのサンプルコードはs3://[region].elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.qにある。
記録されているコードは以下の通り

Hive_CloudFront.q
-- Summary: This sample shows you how to analyze CloudFront logs stored in S3 using Hive

-- Create table using sample data in S3.  Note: you can replace this S3 path with your own.
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  DateObject Date,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  OS String,
  Browser String,
  BrowserVersion String
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "^(?!#)([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+[^(]+[(]([^;]+).*%20([^/]+)[/](.*)$"
) LOCATION '${INPUT}/cloudfront/data';

-- Total requests per operating system for a given time frame
INSERT OVERWRITE DIRECTORY '${OUTPUT}/os_requests/' SELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os;

CREATE EXTERNAL TABLE table-name ... LOCAL data-pathはdata-pathにあるファイルを新しく作成したテーブルtable-nameにinsertするコード。

INSERT DIRECTORY path SELECT ...は、s3上のpathにselect以下の結果を出力するコード。

Step4: Process Your Sample Data By Running a Hive Script

ここからは作成したEMR上でhiveのコードを実行していく。

Submit the Hive Script as a Step

  • EMRのコンソール画面を開く
  • クラスターリストの中から、先ほど起動したクラスターを指定する。
  • ステップの追加をクリックする。
  • ステップタイプをhive programにする
  • スクリプトs3の場所に、s3://[region].elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.qを指定する。
  • S3 の場所の入力に、s3://[region].elasticmapreduce.samplesを指定
  • 引数に-hiveconf hive.support.sql11.reserved.keywords=falseを記述(予約語と同じ列名を許可するためのオプション)
  • 追加をクリック

実行されたsqlはSELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY osで、2014-07-05から2014-08-05期間のosの種類を集計するというもの。

出力されたファイルは

Android 855
Linux 813
MacOS 852
OSX 799
Windows 883
iOS 794

Step5

最後はシャットダウンするための処理、これを忘れると永遠に課金され続ける・・・

To terminate your Amazon EMR cluster

  • EMRのコンソール画面を開く
  • コンソールリストから起動中のコンソールを選択
  • 上の削除ボタンを押す

最後に

今回はAWSのチュートリアルページの内容をそのまま実行しました。

自分でhqlファイルを書いて、s3上にアップロードして実行すると自分のしたい処理が出来たり、sshでemrのマスタノードに入り、hiveを実行することでインタラクティブに操作することもできます。

時間のある時に、AWSの勉強を続けていきたいと思います。

続きを読む

EC2(Linux) awslogs/ssm-agent 自動起動設定

通常の制御だからか需要が無いからか、公式ドキュメント上での自動起動設定制御の記載は確認できませんでした。
ディストリビューション、バージョンによって違いがあるのでまとめておきます。

環境

  • Amazon Linux AMI 2017.03
  • CentOS release 6.9
  • CentOS Linux release 7.3.1611
  • Ubuntu 14.04.5 LTS
  • Ubuntu 16.04.2 LTS

awslogs

操作 AmazonLinux CentOS6 CentOS7 Ubuntu14 Ubuntu16
インストール yum setup.py setup.py setup.py setup.py
起動/停止 service service systemctl(service) service systemctl(service)
自動起動 chkconfig chkconfig systemctl(chkconfig) sysv-rc-conf(update-rc.d) (*1) systemctl(sysv-rc-conf/update-rc.d) (*1)
  • (*1) sysv-rc-conf は環境によっては要インストール

cron.d と logrotate.d

インストール時に毎分の起動チェックとログローテートの cron が格納されます。
必要に応じて以下のファイルの退避(削除)も行います。
尚、yum でインストール(AmazonLinux)した場合、awslogs_log_rotate は作成されません。

/etc/cron.d/awslogs
/etc/cron.d/awslogs_log_rotate
/etc/logrotate.d/awslogs

AGENT_ETC_DIR

awslogs.conf 等の設定ファイル格納場所です。
yum でインストール(AmazonLinux)した場合と setup.py(AmazonLinux以外)とで格納場所が異なります。

インストール ディレクトリ
yum /etc/awslogs/
setup.py /var/awslogs/etc/

amazon-ssm-agent

操作 AmazonLinux CentOS6 CentOS7 Ubuntu14 Ubuntu16
インストール yum(rpm) yum(rpm) yum(rpm) apt(deb) apt(deb)
起動/停止 initctl (*1) initctl (*1) systemctl(service) initctl(service) (*1) systemctl(service)
自動起動 (upstart) (*2) (upstart) (*2) systemctl (upstart) systemctl
  • (*1) initctl は省略可
  • (*2) upstart はファイル退避/コメントアウト/manual記入等で無効化

    • /etc/init/amazon-ssm-agent.conf

続きを読む

【メモ】Amazon EC2で既存のインスタンスに利用されているKeyPairを確認する

やりたかったこと

AWSのアカウントを運用していると増えるKeyPair・・・

そのうち、利用してないKeyPairも増えてきて、「この秘密鍵、必要なん?」ってなると思います。

で、棚卸ししました。

そのときに利用したコマンドをメモしておきます。

EC2インスタンスで利用されているKeyPairを調べる

以下のコマンドを利用しました。配列が出力されます。

aws ec2 describe-instances --query "Reservations[].Instances[].KeyName" | jq -r unique

現状のjmespathでは配列の重複排除はできないようです。

https://stackoverflow.com/questions/37022753/how-can-i-get-unique-values-in-array-in-a-jmespath-query

KeyPairの一覧を調べる

以下のコマンドを利用しました。配列が出力されます。

aws ec2 describe-key-pairs --query "KeyPairs[].KeyName"

不要なKeyPairを削除する

例えば、「現在利用されていないKeyPairは不要である」として対処します。

上記の要件はあくまでも一例です。組織・プロジェクトなどによっては必要な場合も当然あり得ますので、個別に判断してください。

続きを読む