AWS独学メモ

頑張って学んでいきます。

サービス俯瞰

コンピューティング関連

サービス名 概要
EC2 仮想サーバー
EC2 Container Service Doker(アプリ実行環境構築ツール)運用サービス
EC2 Container Regstry Dokerイメージ保存・共有サービス。
Elastic Beanstalk .NET/PHP/Python/Ruby/Node.jsアプリを自動でAWSにデプロイ。
Lambda クライアントからのリクエスト発生時に任意プログラミング起動。イベント駆動型サービス。
Auto Scaling CPU使用率等、事前決定条件に応じ、EC2インスタンス増減
Elastic Load Balancing トラフィックに応じ、複数EC2インスタンスに負荷分散

ストレージ・コンテンツ配信

サービス名 概要
S3 ファイルサーバ。画像格納したり。
CloudFront コンテンツ配信ネットワーク。利用者から近い場所から効率よく配信
EBS EC2データを保持するストレージ。EC2のHDD,SSDのような役割。
Elastic File System EC2共有ファイルストレージ
Glacier 低価格ストレージ。仕様頻度低いけど長期保存のバックアップ用。
Import / Export Snowball ペタバイト級の大容量転送サービス。
Storage Gateway オンプレミスとAWSを接続

DB関連

サービス名 概要
RDS DB(MySQL/Oracle/SQL Server/PostgreSQL/Aurora)が利用できる
Database Migration Service 最小限停止時間でDBを移行。オンプレミスのDBサーバからの移行等に用いる
DynamoDB NoSQLデータベスサービス構築/運用。
ElastiCache クラウドでのメモり内キャッシュの管理サービス
Redshift ビッグデータを分析

ネットワーク

サービス名 概要
VPC プライベートネットワーク構築サービス。
Direct Connect オンプレミスのネットワークとAWSのVPCネットワークを直接接続。
Route 53 DNS(ドメイン名とIPアドレスを対応)

開発者用ツール

サービス名 概要
CodeCommit プライベートGit
CodeDeploy 開発アプリを実行環境に自動配置
CodePipeline 継続的デリバリ使用したアプリのリリース

開発ツール

サービス名 概要
CloudWatch AWSリソース監視サービス
CloudFormation テンプレート利用したリソースの作成と管理
CloudTrail ユーザアクティビティとAPI使用状況確認
Config リソースのイベントリ変更の追跡
OpsWorks Chef利用し操作の自動化
Service Catalog 標準化製品の作成と使用
Trusted Advisor パフォーマンスとせきゅりてぃの最適化

セキュリティ

サービス名 概要
IAM AWS認証
Directory Service Active Directoryのホスティングと管理
Inspector アプリのセキュリティ分析
CloudHSM 暗号鍵管理の専用ハードウェア
Key Management Service 暗号鍵作成と管理
WAF 攻撃から保護するファイアウォール

分析

サービス名 概要
EMR Hadoopフレームワーク
Data Pipeline オーケストレーションサービス
Kinesis リアルタイムストリーミングデータとの連携
Machine Learning 機械学習
QuickSight 高速ビジネスインテリジェンスサービス

モバイルサービス

サービス名 概要
Mobile Hub モバイルアプリの構築/テスト/監視
API Gateway RESTful APIの構築/管理
Cofnito ユーザID及びアプリデータの同期
Device Farm iOS/Android/FireOSアプリのテスト
Mobile Analytics アプリ分析の収集/表示/エクスポート
Mobile SDK モバイルソフトウェアの開発キット

アプリケーションサービス

サービス名 概要
AppStream ストリーミングサービス
CloudSearch マネージド型検索サービス
Elastic Transcorder メディアと動画変換
SES Eメール送受信
SNS プッシュ通知サービス
SQS メッセージキューサービス
SWF アプリ同士を連携ワークフローサービス

大企業向け

サービス名 概要
WorkSpaces クラウド上仮想デスクトップパソコンサービス
WorkMail セキュリティ保護、企業向けEメール及びカレンダー
WorkDocs ファイル共有サービス

S3について

用語

用語 意味
バケット データの入れ物
オブジェクト 格納ファイル

ステップ

  1. バケット作成
  2. オブジェクト格納

EC2について

用語

用語 意味
EC2 仮想サーバ。オンプレミスのWindowsサーバやUNIXサーバに相当。
インスタンス 1台の仮想サーバ
EBS(Elastic Block Store) サーバのHDDに相当する仮想ディスク
AMI(Amazon Machine Image) サーバにインストールするOSやミドルウェアやアプリのイメージ。新インスタンスを複数生成時、AMIを利用。
yum パッケージ管理システム
scp(secure copy) SSH機能を用いて、安全にファイル転送する

EC2にSSH接続した

参考ページ1
参考ページ2

ミドルウェアをインストール

yum更新
$ sudo yum -y update
httpdインストール
$ sudo yum  install -y httpd
httpd起動
$ sudo service httpd start
httpd自動起動を確認
$ sudo chkconfig --list httpd
httpd自動起動を設定
$ sudo chkconfig  httpd on
$ sudo chkconfig  httpd off

scp(コンテンツをアップロードする)

【現在ここで躓き中!】
→ 突破!!

参考ページ1

HTTPコンテンツをコピー

HTTPコンテンツのコピー

$ sudo cp /home/ec2-user/index.html /var/www/html/

【現在ここで躓き中!】index.htmlへアクセスできない

続きを読む

Route 53でローカルDNSを構築する

概要

Route 53を使ってローカルDNSを構築します。
この記事では最終的に作成されたRDSのエンドポイントに任意の名前で接続出来るようにします。

前提条件

この記事の内容を実践する為に必要な前提条件です。

  • 利用可能なVPCが存在する事
  • RDSのインスタンスが作成されている事

Privet Hosted Zoneを作成する

マネジメントコンソール → Route 53 → Hosted zones → Create Hosted Zone より作成を行います。

ドメイン名は認可で構いません。
この記事では test.local という名前で作成します。

Type: “Private Hosted Zone for Amazon VPC” を選択
Domain Name: test.local
Comment: 任意のコメント
VPC ID: 予め準備してあるVPCを指定します

private-domain-1.png

Privet Hosted ZoneにCNAMEレコードを追加する

CNAMEレコードとは既存のドメインに対して別名を付ける為のものです。

こちらの記事 に詳しく解説してくれている方がいますので、参考にすると良いかもしれません。
※この記事の中ではAレコードの解説も載っています。

AWSに割り振られたFQDNに対して、以下のように別名を付けます。

元のFQDN 与える別名 役割
dev-account-db.cluster-aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com account-db-master.test.local 書き込み用DB
dev-account-db-ap-northeast-1c.aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com account-db-master.test.local 読み取り用DB

「Create Record Set」よりレコードを作成します。

Name: “account-db-master” を入力
Type: “CNAME – Canonical name” を選択
Alias: “No”を選択
TTL: デフォルトのまま(300)
Value: 対象のRDSのエンドポイント dev-account-db.cluster-aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com を入力

private-domain-2-1.png

同じ要領で account-db-master.test.local のほうも作成します。

DHCPオプションセットを作成する

接続元のサーバ(EC2)からDNSサーバを参照するように設定が必要です。
ローカルDNSのIPは 公式ドキュメント にあるように、

VPC ネットワークの範囲に 2 をプラスした値です。例えば、10.0.0.0/16 ネットワークの DNS サーバーの位置は 10.0.0.2 となります。

となっています。
本件で扱うVPCは 192.0.0.0/16 なので 192.0.0.2 がローカルDNSのIPアドレスになります。

/etc/resolv.conf に情報を書き込む事で名前解決が可能になりますが、DHCPオプションを設定する方法が便利なのでこちらを利用します。

マネジメントコンソール → VPC → DHCPオプションセット → DHCPオプションセットの作成 より開始します。

情報は以下の通りに入力して下さい。

ネームタグ: dev
ドメイン名: “ap-northeast-1.compute.internal test.local”
ドメイン・ネームサーバ: “AmazonProvidedDNS”

入力した情報について説明します。

  • ネームタグ
    任意の分かりやすい名前をつけて下さい。
    私は環境を表す”dev”を付けました。

  • ドメイン名
    2つのドメイン名を半角スペース繋ぎで記載します。
    1つ目のドメインはリージョン固有のドメイン(今回は東京リージョンなので ap-northeast-1.compute.internal
    2つ目のドメインは今回作成したローカルドメイン test.local です。

  • ドメインネームサーバ
    “AmazonProvidedDNS”を指定することでresolv.confのnameserverにRoute 53での名前解決用IPが記載されます。

private-domain-3.png

このあたりの詳しい説明は 公式ドキュメント にも記載があります。

VPCにDHCPオプションセットを設定する

マネジメントコンソール → VPC → アクション より DHCPオプションセットを設定します。
それぞれの項目を下記のように設定します。

private-domain-4.png

private-domain-5.png

private-domain-6.png

動作確認

接続元のEC2インスタンスにログインを行い以下のコマンドを実行します。

DHCP設定を再取得(rootで実行)
dhclient eth0

※インスタンスの再起動を行う事でもDHCP設定の再取得は出来ます。

DNS設定前のnslookupの結果
nslookup account-db-master.test.local
Server:     192.0.0.2
Address:    192.0.0.2#53

** server can't find account-db-master.test.local: NXDOMAIN
DNS設定後のnslookupの結果
nslookup account-db-master.test.local

Server:     192.0.0.2
Address:    192.0.0.2#53

Non-authoritative answer:
account-db-master.test.local    canonical name = dev-account-db.cluster-aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com.
dev-account-db.cluster-aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com    canonical name = dev-account-db.aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com.
Name:   dev-account-db.aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com
Address: 192.0.20.68

設定した名前で名前解決が出来ている事が確認出来ます。

念のため設定したホスト名でmysql接続が出来る事を確認します。

設定したドメイン名で接続
mysql -u test_user -h account-db-master.test.local -p

接続の確認が出来ました。

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5885
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

別名をつけただけなので、もちろん元々のFQDNでも接続が可能です。

元々のFQDNでも接続出来る事を確認
mysql -u test_user -h dev-account-db.cluster-aaaaabbbbcc1.ap-northeast-1.rds.amazonaws.com -p

同じように接続が出来ました。

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5884
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

別名を付ける事によるメリット

この設定を行う事で下記のようなメリットが考えられます。

  1. 任意の名前を付けられる事でAWSから提供される長いFQDNを覚えなくても良くなります
  2. 例えばDBサーバを丸ごと入れ替えたとしても変更するのはRoute 53のCNAMEレコードのみなので移行が簡単になる

特に2のメリットは大きいと考えます。
Route 53なら簡単に設定が可能なので設定しておく事をオススメします。

この記事の内容は以上になります。
最後まで読んで頂きありがとうございました。

続きを読む

【レポート】AWS Summit Tokyo 2017:Oracle Database から Aurora & Redshift に移行するための実践ガイド #AWSSummit

2017年05月30日(火)〜2017年06月02日(金)の計4日間に渡り、グランドプリンスホテル新高輪 品川プリンスホテル アネックスタワーで行われている『AWS Summit Tokyo 2017』。 当エントリでは […] 続きを読む

aws周りのメモ3

インスタンスの起動と停止など

【Tips】AWS CLIを使ってAmazon EC2を起動・停止するワンライナーまとめ | Developers.IO
http://dev.classmethod.jp/cloud/aws/awscli-tips-ec2-start-stop/

起動

INSTANCE_ID=<instance_id>
# 起動
aws ec2 start-instances --instance-ids ${INSTANCE_ID}
# 起動確認
aws ec2 describe-instance-status --instance-ids ${INSTANCE_ID} | jq '.InstanceStatuses[] | {InstanceId, InstanceState: .InstanceState.Name, SystemStatus: .SystemStatus.Status, InstanceStatus: .InstanceStatus.Status}'
# 起動と待機
aws ec2 start-instances --instance-ids ${INSTANCE_ID} && aws ec2 wait instance-running --instance-ids ${INSTANCE_ID}
# 全起動
aws ec2 start-instances --instance-ids $(aws ec2 describe-instances | jq -r '[.Reservations[].Instances[] | select(.State.Name == "stopped") | .InstanceId] | join(" ")')

停止

# 停止
aws ec2 stop-instances --instance-ids ${INSTANCE_ID}
# 停止確認
aws ec2 describe-instances --instance-ids ${INSTANCE_ID} | jq '.Reservations[].Instances[] | {InstanceId, InstanceState: .State.Name}'
# 停止と待機
aws ec2 stop-instances --instance-ids ${INSTANCE_ID} && aws ec2 wait instance-stopped --instance-ids ${INSTANCE_ID}
# 全停止
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances | jq -r '[.Reservations[].Instances[] | select(.State.Name == "running") | .InstanceId] | join(" ")')
# 自分以外を全停止
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances | jq -r --arg myid $(curl http://169.254.169.254/latest/meta-data/instance-id 2> /dev/null) '[.Reservations[].Instances[] | select(.InstanceId != $myid) | select(.State.Name == "running") | .InstanceId] | join(" ")')

AWS CLIにalias機能が追加されました | Developers.IO
http://dev.classmethod.jp/cloud/aws/aws-cli-alias/

~/.aws/cli/aliasに特定の書式でファイルを作成することで利用できるようです。GitHub上のサンプルファイル内には7つの例が記載されています。

https://github.com/awslabs/awscli-aliases

公式

brew upgrade aws-cli

RDSの削除と復帰

AWS CLIを利用したRDSの起動停止スクリプト(検証環境用2017年1月版) | Developers.IO
http://dev.classmethod.jp/cloud/aws/rds-oracle-aurora-start-stop-by-aws-cli/

追記:削除じゃなくて停止ができるようになった(なる?)らしい。

請求まわりがまだよくわからない

【AWS超初心者】 AWSの請求をいろいろと調べたメモ。 – /var/www/yatta47.log
http://yatta47.hateblo.jp/entry/2016/09/14/201121

続きを読む

【レポート】AWS Summit Tokyo 2017:ゲオを支える DB 基盤の歴史と未来 ~Oracle から Amazon Aurora へ~ #AWSSummit

2017年05月30日(火)〜2017年06月02日(金)の計4日間に渡り、グランドプリンスホテル新高輪 品川プリンスホテル アネックスタワーで行われている『AWS Summit Tokyo 2017』。 当エントリでは […] 続きを読む