20201120のAWSに関する記事は17件です。

AWS Railsの再起動手順

この度Railsで開発中のアプリをAWSへ開発中アプリをデプロイしましたが、
今後本番環境のサーバー再起動を行う頻度は高いだろうと思い
備忘録としてUnicornの再起動手順をまとめていきたいと思います。

EC2インスタンスにログインしている前提で進めていきます。

まずは ps aux | grep unicorn コマンドでプロセスIDを確認します。

ターミナル
[ec2-user@ip-172-31-33-238 <対象リポジトリ>]$ ps aux | grep unicorn
ec2-user 26995 17.4 10.7 475732 108272 ?       Sl   13:55   0:01 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 26999  0.0 10.0 476748 101508 ?       Sl   13:55   0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 27002  0.0  0.0 119436   908 pts/0    S+   13:55   0:00 grep --color=auto unicorn

この時 unicorn_rails master と表示されているプロセスが Unicorn のプロセスとなっているので、今回の場合は 26995 がPIDとなります。

PIDが確認できたら killコマンドを使ってプロセスを止めます。

ターミナル
[ec2-user@ip-172-31-33-238 <対象リポジトリ>]$ kill 26995

ps aux | grep unicornコマンドで実際に止まっているのか確認します。

ターミナル
[ec2-user@ip-172-31-33-238 <対象リポジトリ>]$ ps aux | grep unicorn
ec2-user 27345  0.0  0.0 119436   964 pts/0    S+   14:27   0:00 grep --color=auto unicorn

上記のような表示になっていればプロセスは止まっています。

確認が取れたら下記コマンドを入力しUnicornを起動させます。

ターミナル
[ec2-user@ip-172-31-23-189 <対象リポジトリ>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

以上で再起動は完了しました。

EC2インスタンスに紐付けたElasticIPを使ってブラウザにアクセスすると、正常に表示されているか確認ができます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS RDSにローカルから接続できない

エラー内容

データの検証のため、RDSにローカルのwindowsから接続しようと試みました。

mysql -u root -p -P 3306 -h <RDS>

すると・・・

ERROR 2003 (HY000): Can't connect to MySQL server on '<RDS>' (10060)

ncも試してみる。

nc <RDS>
nc: can't connect to remote host (<RDS IP>)

ncもダメ・・・

解決方法

RDSインスタンスの「パブリックアクセス可能」を「あり」にする
e124141.PNG

参考:https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-connectivity-instance-subnet-vpc/

これでローカルから接続できるようになりました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】CodeCommitにEC2とwindows端末の両方からgit pushしてみた

はじめに

最近、gitを使い始めたのですが作業環境によってgit pushのやり方が異なったのでまとめていきます。
今回は以下の2通りを紹介します。
(1)EC2からCodeCommitにgit clone → git pushを実施する
(2)windows端末からCodeCommitにgit clone → git pushを実施する

1-1.認証情報の作成

(1)サービス「IAM」→ アクセス管理の中ある「ユーザー」を選択します。
(2)CodeCommitへの認証情報を作成したいユーザを選択します。
  ※作成されていない場合は作成してください。
(3)「認証情報」タブの「AWS CodeCommit の HTTPS Git 認証情報」欄にある、
  「認証情報を生成」を選択します。
認証画面.PNG
(4)認証情報が生成されるので、「証明書のダウンロード」を選択すると認証情報が書かれた
  csvファイルがダウンロードされます。

1-2.CodeCommit リポジトリを作成

(1)サービス「CodeCommit」→「リポジトリを作成」を選択します。
(2)「リポジトリ名」を入力し(今回はgit_test)、「作成」を選択します。
(3)右上の「URLのクローン」タブ → 「HTTPSのクローン」を選択し、クローン用のURLをコピーして
  テキストなどにメモしておきましょう。URLは「https://**/git_test(リポジトリ名)」になるはずです。
tab.PNG

2-1.EC2でgit cloneする

(1)gitをインストールし、ディレクトリを作成します。
(2)git用のディレクトリでgit cloneをします。

sudo yum install git
mkdir git
cd git
git clone https://**/git_test(リポジトリ名)

(3)インストールしたcsvファイルに書いてある認証情報(UsernameとPassword)を入力すると以下のように
  cloneされていることが確認できます。
 ※Passwordはコピペしても見えません

[ec2-user@ip-<ip-addr> git]$ ll
total 0
drwxrwxr-x 5 ec2-user ec2-user 187 Nov 30 11:52 git_test

2-2.EC2でgit pushする

cloneしたディレクトリから適当なファイル(ec2_test.txt)を作成してgit pushしてみましょう。
git pushの際は認証情報を入力してください。

cd git_test  # cloneしたディレクトリに移動
echo "test" > ec2_test.txt  # 適当なファイルを作成
git add .
git commit -m "ec2_commit"
git push origin master

CodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
git_result1.PNG

3-1.windows端末でgit cloneする

(1)windows端末にGit for WindowsとTortoiseGitをインストールします。
 インストールでは以下の記事を参考にさせて頂きました。
TortoiseGitの導入とGitLabへの接続方法
(2)適当な場所にgit用のディレクトリを作成します。
(3)作成したディレクトリをエクスプローラで開き、右クリック→「Git クローン(複製)」を選択します。
git_clone.PNG
(4)以下のような画面が出てくるので、URLの欄にクローン用のURLを入力して「OK」を選択します。
git_clone_2.PNG
(5)認証情報の入力を求められるので入力します。
(6)成功すると以下のようにディレクトリが作成されます。
result.PNG

3-2.windows端末でgit pushする

cloneしたディレクトリから適当なファイル(windows_test.txt)を作成してgit pushしてみましょう。
(1)適当なファイル(windows_test.txt)を作成します。
  ※この作業はEC2で作業した後に行っているので、ディレクトリにはEC2で作成したファイル(ec2_test.txt)もあります。
result_2.PNG
(2)エクスプローラ上で右クリック→「Git コミット(C)…」を選択します。
(3)以下の画面でメッセージを入れる & 作成したファイルにチェックをつけて、
  右下の「コミット」を選択します。
tor_git.PNG
(4)エクスプローラ上で右クリック→「TortoiseGit」→「プッシュ」を選択します。
(5)確認画面でそのまま「OK」を選択します。
(6)CodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
git_result2.PNG

まとめ

今回は2通りの方法を紹介しましたが、ファイルの編集や他のアプリケーションとの連携の
しやすさを考えるとEC2にgit cloneする方が良いのではないかと考えています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS cliでECRにpushするときに再認証を求められる&loginが400 bad requestで弾かれる

エラー内容

docker push ********.dkr.ecr.region.amazonaws.com/****:TAG

ECRにpushしようとすると

denied: Your authorization token has expired. Reauthenticate and try again.

トークンが期限切れと言われた。再度ログインします。

ログインする

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin https://<id>.dkr.ecr.<region>.amazonaws.com

ちょっとハマってしまったポイントがあります。

  • get-login-passwordには明示的にregionが必要
  • get-login-passwordとdocker loginのregionが一致していなければいけない

さもないと400 bad requestが返ってきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【画像付き】AWSでSSL化させる【丁寧に解説】

前提

  • EC2にデプロイ済みであること
  • ドメインを取得しElastic IPと紐付けていること。つまりhttp://ドメイン名でサイトにアクセスできるようになっていること。

ドメインの取得方法は下記記事を参考にました!

【ドメイン取得】お名前.comとawsでドメイン取得

そもそもSSL化ってなに?

簡単にいうと「セキュリティが強い、安全なサイトにすること」です。
詳しい説明は下記記事を参考にしてください。

SSLって何?意味や仕組みをわかりやすく解説!

方法

  1. Certificate ManagerでSSLサーバー証明書を発行
  2. ロードバランサーにてSSLサーバー証明書とEC2インスタンスを紐付ける
  3. EC2インスタンスのポート開放
  4. 動作確認

この順番で行きたいと思います。
まずはゴールを御覧ください。

最終形のイメージ

スクリーンショット 2020-11-17 18.54.09.png

 引用 AWSでWebサイトをHTTPS化 全パターンを整理してみました

ポイントは2つ!

  • 今回はサーバー証明書はCertificate Managerで取得して、ロードバランサー(ELB)に紐づける
  • EC2とELBはHTTP通信。ELBとクライアントをHTTPS通信するよう設定する

では行ってみましょう!

1. Certificate ManagerでSSLサーバー証明書を発行

Certificate Manager

まず検索バーでCertificate Managerを検索
スクリーンショット 2020-11-18 19.04.42.png

今すぐ始めるを選択
スクリーンショット 2020-11-18 19.06.47.png

証明書のリクエストを選択
スクリーンショット 2020-11-18 19.07.32.png

取得したドメイン名を入力します。例:〇〇.com など
スクリーンショット 2020-11-18 19.09.56.png

DNSの検証を選択し次へをクリック
スクリーンショット 2020-11-18 19.10.44.png

何も入力せずに確認を選択
スクリーンショット 2020-11-18 19.11.08.png

入力したドメイン名が出現します。
確認とリクエストをクリック
スクリーンショット 2020-11-18 19.11.40.png

そうするとDNSの検証の準備が始まります。
状況が「検証保留中」と出ているはずです。
ドメインの名の横の「 ▼ 」をクリックすると名前、種類、値のレコードが出てきます。
この値をメモアプリに保存しましょう。
DNS設定をファイルにエクスポートでも値は確認できます。
スクリーンショット 2020-11-18 19.19.49.png

Route53

Route53に移ります。
指定したドメインのホストゾーンでレコードを作成をクリック。
スクリーンショット 2020-11-18 19.24.29.png

シンプルルーティングを選択し、次へをクリック。
スクリーンショット 2020-11-18 19.27.15.png

シンプルなレコードを定義をクリック。
スクリーンショット 2020-11-18 19.27.44.png

エンドポイントを選択をクリック。
レコードタイプに応じたIPアドレスまたは別の値を選択
スクリーンショット 2020-11-18 19.29.11.png

先程のメモをご用意ください。
レコード名に、「名前」
ルーティング先に、「値」をコピペ。
レコードタイプは「CNAME」を選択し、シンプルなレコードを定義をクリック。
スクリーンショット 2020-11-18 19.30.48.png

このようにタイプCNAMEのレコードができたら準備OKです。
スクリーンショット 2020-11-18 19.36.02.png

Certificate Manager

再びCertificate Managerに戻り、以下のように「発行済み」になっていたらSSLサーバー証明書の発行が完了です。
スクリーンショット 2020-11-18 19.20.59.png

ここまでよろしいでしょうか?
どんどん行きましょう!!

2. ロードバランサーにてSSLサーバー証明書とEC2インスタンスを紐付ける

ロードバランサー

EC2のページからロードバランサーをクリック。
スクリーンショット 2020-11-20 18.37.54.png

ロードバランサーの作成をクリック。
※筆者は既にロードバランサーを1個作ってあるため、下に表示されています。
スクリーンショット 2020-11-20 18.38.53.png

Application Load Balancerの作成をクリック。
スクリーンショット 2020-11-20 18.39.49.png

任意の名前を記入し、
リスナーの追加でHTTPSを追加。
アベイラビリティーゾーンでは2つ以上、サブネットを選択します。
その後次の手順をクリック
スクリーンショット 2020-11-20 18.41.18.png

ACMから証明書を選択をするを選択、
証明書の名前は先程作成した証明書を選択してください。
その後次の手順をクリック。
スクリーンショット 2020-11-20 18.44.04.png

EC2インスタンスが使っているセキュリティーグループを選択し、
その後次の手順をクリック。
スクリーンショット 2020-11-20 18.45.31.png

ターゲットグループに任意の名前を付けます。
プロトコルはHTTP、ポートは80のデフォルト設定でOKです。
EC2インスタンスとELBはHTTP通信のためです。
その後次の手順をクリック。
スクリーンショット 2020-11-20 18.46.42.png

任意のEC2インスタンスを選択肢し登録します。
その後次の手順をクリック。
スクリーンショット 2020-11-20 18.47.54.png

確認画面です。
作成をクリック。
スクリーンショット 2020-11-20 18.49.39.png

下記の通りになればバランサー制作完了です!
スクリーンショット 2020-11-20 18.52.28.png

お疲れさまです!
後もう少しです!

Route53

Route53に戻り、先程作ったロードバランサーとドメインを紐付けます。

タイプAのレコードを選択して編集をクリック。
スクリーンショット 2020-11-20 19.13.16.png

ルーティング先を先程作ったロードバランサーと紐付け、変更を保存をクリック。
スクリーンショット 2020-11-20 19.12.44.png

3. EC2インスタンスのポート開放

EC2

EC2インスタンスのポートを下記のように開放します。
スクリーンショット 2020-11-20 18.55.17.png

以上で完了です!!!!
それではhttps://ドメイン名で検索してみましょう!

4. 動作確認

下記のように鍵マークが付けば完了です!!
スクリーンショット 2020-11-20 18.56.33.png

まとめ

ドメイン取得紐付け後の、ドメインのSSL化を解説しました。

自分はEC2とALBの間をHTTPS通信しようとして、かなりハマりました。
皆さんにはそうなって欲しくないためココに記しました。

私自身もプログラミング初心者のため間違っていることが、ありましたらご指摘ください。
最後まで読んでいただき、ありがとうございました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSのACM(Certificate Manager)でSSL証明書を取得してみた

はじめに

個人サイトのSSL化のためACMで証明書を取得してみた。

手順

以降の流れで取得しました。

AWSコンソールのCertificate Managerから[証明書リクエスト]を選択

AWS_Certificate_Manager1.png
AWS_Certificate_Manager2.png

ドメイン名を追加します。

AWS_Certificate_Manager3.png

証明書のリクエストの検証方法は基本DNSの検証で進めます。

AWS_Certificate_Manager4.png
※Eメールの検証を選ぶと、取得したドメインのpostmaster@やadmin@へ承認依頼メールが送信されます。今回このドメインのメールサーバは作っていないのでDNS検証を選びました。

AWS_Certificate_Manager5.png

内容確認してリクエストします。

AWS_Certificate_Manager6.png

Route53を利用しているため「Route53でのレコードの作成」をクリックするだけでDNSレコード情報を追加できます。そうでない場合は、レジストラでのCNAME登録(①と②)が必要となります。
AWS_Certificate_Managerで証明書の発行___在宅で子育てしながら働くママ・パパを応援するメディア【はたママ】.png

①CNAMEレコードの情報をファイルから確認します。

AWSでSSL証明書を発行する手順.png

②お名前.com等のレジストラのでCNAMEを登録します。

[ドメイン一覧>DNSレコードの変更>次へ>DNSレコード設定を利用する>]
ドメインNavi.png

検証状態が成功、発行済みになれば完了です。

AWS_Certificate_Manager.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS Storage GatewayとOCI Storage Gatewayを利用してS3のデータをOCI Object Storageにファイルコピーで移行してみた

はじめに

AWS S3内のデータをOCIのObject Storageにファイルコピーで移行する方法として、こちらの記事ではgoofysを利用する方法を紹介しました。

goofysはオープンソースなのでサポートが心配、という方向けに、今回はOracleから提供されているOCI Storage Gateway(Object StorageバケットをNFSで共有できるゲートウェイ)、AWSから提供されているAWS Storage Gateway(S3バケットをNFSで共有できるゲートウェイ)を利用してAWS S3からOCI Object Storageにファイルコピーでデータを移行する方法を試してみました。

事前準備

<OCI側>
・Object Storageへのアクセスに使用するユーザのAPIキーの登録を済ませておきます。
 - フィンガープリント
 - 秘密鍵
 - パスフレーズ(キーペアの作成時に設定した場合)

<AWS側>
・SSHログイン用のキーペアの作成を作成しておきます。

<Oracle Cloud Infrastructure Storage Gatewayのインストーラのダウンロード>
こちらからOracle Cloud Infrastructure Storage Gatewayのインストーラを手元のPCにダウンロードしておきます。

1. VPCの構成

・VPCの作成
 名前:SG-VPC
 IPv4 CIDR ブロック:10.0.0.0/16
 IPv6 CIDR ブロック:「IPv6 CIDR ブロックなし」を選択(デフォルト)
 テナンシー:「デフォルト」を選択
 「VPCを作成」をクリック
スクリーンショット 2020-11-20 10.47.03.png
・サブネットの作成
 VPC ID:作成したVPCを選択
 サブネット名:SG-Subnet
 アベイラビリティゾーン:任意の選択肢を選択
 IPv4 CIDR ブロック:10.0.1.0/24
 「サブネットの作成」クリック
スクリーンショット 2020-11-20 10.49.42.png
スクリーンショット 2020-11-20 10.50.48.png
・インターネットゲートウェイの作成
 名前タグ:SG-IG
 「インターネットゲートウェイの作成」をクリック
スクリーンショット 2020-11-20 10.54.32.png
・インターネットゲートウェイをVPCにアタッチ
 「アクション」をクリックし、「VPCにアタッチ」をクリック
スクリーンショット 2020-11-20 10.56.13.png
 使用可能なVPC:先ほど作成した「SG-VPC」を選択
 「インターネットゲートウェイのアタッチ」をクリック
スクリーンショット 2020-11-20 10.56.40.png
・ルートテーブルの作成
 名前タグ:SG-RT
 VPC:作ほど作成した「SG-VPC」を選択
 「作成」をクリック
スクリーンショット 2020-11-20 10.58.44.png
・ルートテーブルへのルートルールの追加
「SG-RT」を選択し、「ルート」タブをクリック
「ルートの編集をクリック
スクリーンショット 2020-11-20 11.01.53.png
 「ルートの追加」をクリック
スクリーンショット 2020-11-20 11.02.10.png
 送信先:0.0.0.0/0
 ターゲット:先ほど作成したインターネットゲートウェイ「SG-IG」を選択
 「ルートの保存」をクリック
スクリーンショット 2020-11-20 11.02.38.png
「閉じる」をクリック
スクリーンショット 2020-11-20 11.02.51.png
ルートテーブル「SG-RT」にルートルールが追加されました。
スクリーンショット 2020-11-20 11.03.06.png
・ルートテーブルのサブネットへの関連付け
 「サブネットの関連付け」タブをクリック
 「サブネットの関連付けの編集」をクリック
スクリーンショット 2020-11-20 11.03.20.png
 先ほど作成したサブネット「SG-Subnet」を選択
 「保存」をクリック
スクリーンショット 2020-11-20 11.03.54.png
 ルートテーブル「SG-RT」がサブネット「SG-Subnet」に関連付けられました。
スクリーンショット 2020-11-20 11.04.11.png

2. OCI Storage Gateway用のEC2インスタンスの作成

OCI Storage Gatewayのインストール要件は、こちらに記載があります。
以下、一部抜粋。
<ハードウェアの推奨事項および要件>
 2つのデュアルコアCPU以上、4コアCPUを推奨
 メモリーの最小要件:
  ストレージ・ゲートウェイのどのファイル・システムでも16GBが必須
  ファイル数が5000万個までのファイル・システムでは32GB
  ファイル数が1億個までのファイル・システムでは64GB
 推奨されるローカル・ストレージのディスク・サイズは600GB
  ファイル・システム・キャッシュ 500GB
  メタデータ・ストレージ 80GB
  ログ・ストレージ 20GB
<ソフトウェア要件>
 Oracle Linux 7およびUEKリリース4以降
 Docker 1.12.6以上
 NFSv4

*OCI Storage GatewayはDockerコンテナ上で動作します。

今回は検証目的のため、深く考えずにコミュニティAMIからOracle Linux 7.8を選択
スクリーンショット 2020-11-19 20.37.47.png
インスタンスタイプとして、最小要件を満たすm4.xlarge(4vCPU/16GBメモリ)を選択
「次のステップ:インスタンスの詳細の設定」をクリック
スクリーンショット 2020-11-19 20.39.37.png
 ネットワーク:先ほど作成した「SG-VPC」を選択
 サブネット:作ほど作成した「SG-Subnet」を選択
 自動割り当てパブリックIP:「有効」を選択
 その他の項目はデフォルトのまま
 「次のステップ:ストレージの追加」をクリック
スクリーンショット 2020-11-19 20.39.58.png
「新しいボリュームの追加」をクリックしOCI Storage Gateway用のローカルストレージを追加
 ボリュームタイプ:EBS
 サイズ:600
 終了時に削除:チェックをオン
 「次のステップ:タグの追加」をクリック
スクリーンショット 2020-11-19 20.41.20.png
今回は特にタグは追加せず、「次のステップ:セキュリティグループの設定」をクリック
スクリーンショット 2020-11-19 20.41.37.png
 セキュリティグループの割り当て:「新しいセキュリティグループを作成する」を選択
 セキュリティグループ名:Security Group for OCI Storage Gateway
 説明:任意
 デフォルトのルール(ソース 0.0.0.0/0に対してSSHを許可)があることを確認
 「確認と作成」をクリック
スクリーンショット 2020-11-19 20.42.49.png
入力内容を確認し、「起動」をクリック
スクリーンショット 2020-11-19 20.43.07.png
作成済みの既存のキーペアを選択して「インスタンスの作成」をクリック
スクリーンショット 2020-11-19 20.44.09.png
インスタンスの作成が開始されました。
スクリーンショット 2020-11-19 20.44.33.png

3. OCI Storage Gatewayの構築

作成したインスタンスにSSHクライアントからec2-userとしてログインします。

マウントポイント/dataを作成します。

[ec2-user@ip-10-0-1-92 ~]$ sudo mkdir /data

アタッチしたストレージ(/dev/xvdb)をフォーマットして/dataにマウントします。

[ec2-user@ip-10-0-1-92 ~]$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   30G  0 disk 
└─xvda1 202:1    0   30G  0 part /
xvdb    202:16   0  600G  0 disk 
[ec2-user@ip-10-0-1-92 ~]$ sudo mkfs -t xfs /dev/xvdb
meta-data=/dev/xvdb              isize=256    agcount=4, agsize=39321600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0
data     =                       bsize=4096   blocks=157286400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=76800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[ec2-user@ip-10-0-1-92 ~]$ sudo mount /dev/xvdb /data
[ec2-user@ip-10-0-1-92 ~]$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         8057896       0   8057896   0% /dev
tmpfs            8074556       0   8074556   0% /dev/shm
tmpfs            8074556   16820   8057736   1% /run
tmpfs            8074556       0   8074556   0% /sys/fs/cgroup
/dev/xvda1      31445996 2278576  29167420   8% /
tmpfs            1614912       0   1614912   0% /run/user/1000
/dev/xvdb      628838400   32976 628805424   1% /data

Dockerのインストールのため、リポジトリol7_addonsを有効にします。

[ec2-user@ip-10-0-1-92 ocisg-1.3]$ sudo vi /etc/yum.repos.d/oracle-linux-ol7.repo
/etc/yum.repos.d/oracle-linux-ol7.repo
[ol7_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1 <- ここをenabled=0からenabled=1に変更

PCにダウンロードしておいたOCI Storage Gatewayのインストーラ(ocisg-1.3.tar.gz)を、作成したインスタンスの/tmpにSCP等でアップロードします。

ocisg-1.3.tar.gzを解凍し、インストールスクリプトを実行してOCI Storage Gatewayをインストールします。

[ec2-user@ip-10-0-1-92 ~]$ cd /tmp
[ec2-user@ip-10-0-1-92 tmp]$ sudo tar xvzf ocisg-1.3.tar.gz
[ec2-user@ip-10-0-1-92 tmp]$ cd ocisg-1.3/
[ec2-user@ip-10-0-1-92 ocisg-1.3]$ sudo ./ocisg-install.sh
*Dockerをインストールするか聞かれるのでyと入力
Docker does not appear to be installed. Do you want to install docker engine with yum? [y/N] y
<中略>
Installed:
  docker-engine.x86_64 0:19.03.11.ol-6.el7                                        

Dependency Installed:
  container-selinux.noarch 2:2.107-3.el7                                          
  containerd.x86_64 0:1.2.14-1.0.1.el7                                            
  criu.x86_64 0:3.12-2.el7                                                        
  docker-cli.x86_64 0:19.03.11.ol-6.el7                                           
  libnet.x86_64 0:1.1.6-7.el7                                                     
  libnl3.x86_64 0:3.2.28-4.el7                                                    
  protobuf-c.x86_64 0:1.0.2-3.el7                                                 
  runc.x86_64 0:1.0.0-19.rc5.git4bb1fe4.0.4.el7                                   

Complete!
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Setting the devicemapper storage driver ...

*NFSサーバをインストールするか聞かれるのでyと入力
NFS server does not appear to be installed. Do you want to install NFS with yum? [y/N] y
<中略>
Installed:
  nfs-utils.x86_64 1:1.3.0-0.68.0.1.el7                                           

Dependency Installed:
  gssproxy.x86_64 0:0.7.0-29.el7             keyutils.x86_64 0:1.5.8-3.el7        
  libbasicobjects.x86_64 0:0.1.1-32.el7      libcollection.x86_64 0:0.7.0-32.el7  
  libevent.x86_64 0:2.0.21-4.el7             libini_config.x86_64 0:1.3.1-32.el7  
  libnfsidmap.x86_64 0:0.25-19.el7           libpath_utils.x86_64 0:0.2.1-32.el7  
  libref_array.x86_64 0:0.1.5-32.el7         libtirpc.x86_64 0:0.2.4-0.16.el7     
  libverto-libevent.x86_64 0:0.2.5-4.el7     quota.x86_64 1:4.01-19.el7           
  quota-nls.noarch 1:4.01-19.el7             rpcbind.x86_64 0:0.2.0-49.el7        
  systemd-sysv.x86_64 0:219-78.0.1.el7_9.2   tcp_wrappers.x86_64 0:7.6-77.el7     

Dependency Updated:
  libgudev1.x86_64 0:219-78.0.1.el7_9.2      systemd.x86_64 0:219-78.0.1.el7_9.2  
  systemd-libs.x86_64 0:219-78.0.1.el7_9.2  

Complete!
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

*devicemapperの警告が出ますが、無視します。
*************************************
Imported temporary env vars from ec2-user to this install session
*************************************
Checking that docker is installed and using the correct version
Found docker version Docker version 19.03.11-ol, build 1f5403e
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.

*************************************
Checking host prerequisites
*************************************

Detected linux operating system
Checking kernel version
Found kernel version 4.14.35-1902.300.11.el7uek.x86_64
Checking NFS version
Found NFS version 4

*************************************
All prerequisites have been met
*************************************


*************************************
Begin installation
*************************************
*インストール先を聞かれるので、何も入力せずにエンター
Enter the install location press enter for default (/opt/ocisg/) : 
Installing to destination /opt/ocisg/
Copied install scripts
Copied OCISG image
Starting configuration script

*ファイルシステムキャッシュのパスを聞かれるので、/data/cacheと入力してエンター
Enter the path for OCISG file system cache : /data/cache
Warning: path /data/cache does not exist, creating.

*メタデータの保存先を聞かれるので、/data/metadataと入力してエンター
Enter the path for OCISG metadata storage : /data/metadata
Warning: path /data/metadata does not exist, creating.

================================================================================
WARNING:
Cache and metadata storage are on the SAME volume.
It is recommended to have a SEPARATE volume for metadata storage.
Recommended MINIMUM space for metadata storage is 80 GB.
================================================================================
*キャッシュとメタデータの保存先が同じ同じボリュームとの警告が出ますが、今回は検証目的で問題ないため、yと入力してエンター
Would you like to proceed anyway ('Y' to proceed, 'N' to stop installation) (y/N) ? y

*ログの保存先を聞かれるので、/data/logと入力してエンター
Enter the path for OCISG log storage : /data/log
Warning: path /data/log does not exist, creating.

================================================================================
WARNING:
Cache, Metadata, and log storage are on the SAME volume.
It is recommended to have a SEPARATE volume for log storage.
Recommended MINIMUM space for log storage is 20 GB.
================================================================================
*キャッシュとメタデータ、ログの保存先が同じボリュームとの警告が出ますが、今回は検証目的で問題ないため、yと入力してエンター
Would you like to proceed anyway ('Y' to proceed, 'N' to stop installation) (y/N) ? y
Writing configuration
Importing image
0a8af4fbe73a: Loading layer  1.024kB/1.024kB
fc9b318feb73: Loading layer  235.2MB/235.2MB
<中略>
ff3adf1ac705: Loading layer  1.024kB/1.024kB
Creating OCISG Volume with args -v /cloudsync/:/cloudsync/:shared -v /data/cache:/usr/share/oracle/ -v /data/metadata:/usr/share/oracle/system/ -v /data/log:/var/log/gateway 
Applying configuration file to container
Starting OCISG [ocisg:1.3]
Setting up config file port with nfs
Setting up config file port with rest
Management Console: https://ip-10-0-1-92.ap-northeast-1.compute.internal:443
If you have already configured an OCISG FileSystem via the Management Console,
you can access the NFS share using the following port.

NFS Port: 32769

Example: mount -t nfs -o vers=4,port=32769 ip-10-0-1-92.ap-northeast-1.compute.internal:/<OCISG FileSystem name> /local_mount_point
[ec2-user@ip-10-0-1-92 ocisg-1.3]$ 

OCI Storage Gatewayのインストールが完了しました。
管理コンソールにアクセスするためのURL、NFSポート、NFSマウントのサンプルコマンドをメモしておきます。

OCI Storage Gatewayの管理コンソールにアクセスするためにセキュリティグループを編集します。
「Security Group for OCI Storage Gateway」にHTTPSアクセスを許可するためのインバウンドルールを追加します。
「インバウンドルールを編集」をクリックします。
スクリーンショット 2020-11-19 21.15.10.png
今回はマイIP(自宅のパブリックIPアドレス)からのすべてのトラフィックを許可しました。
スクリーンショット 2020-11-19 21.15.59.png

ブラウザからOCI Storage Gatewayのコンソールにアクセスします。
https://<インスタンスのパブリックIPアドレス>:443

初回アクセス時はパスワードの設定を求められます。
スクリーンショット 2020-11-19 21.17.47.png
設定したパスワードでOCI Storage Gatewayのコンソールにログインします。
スクリーンショット 2020-11-19 21.18.07.png
まだファイルシステムが作成されていないので、以下のような画面が表示されます。
「Create a File System」をクリックして、ファイルシステムを作成します。
スクリーンショット 2020-11-19 21.18.28.png
File System Name:dest-oci-bucket
※こちらで指定した名前のバケットが存在しない場合、この名前で新規にバケットが作成されます。
SELECT the Object Storage tier in which you want to store data:「Standard」を選択
Object Storage API Endpoint:こちらを参照して利用するリージョンのObject Storageのエンドポイントを入力
Compartment OCID:作成するバケットのコンパートメントのOCID
Tenant OCID:テナントのOCID
User OCID:Object Storageのアクセスに使用するユーザのOCID
Public Key's Finger Print:APIキーに登録した公開鍵のフィンガープリント
Private Key:APIキーに登録した公開鍵に対応した秘密鍵の内容
Passphrase:秘密鍵のパスフレース(鍵の作成時に設定した場合のみ)
「Save」をクリック
スクリーンショット 2020-11-19 21.30.31.png
ファイルシステムが作成されました。
「Connect」をクリックして、作成したファイルシステムをObject Storageバケットに接続します。
スクリーンショット 2020-11-19 21.31.06.png
作成したファイルシステム名「dest-oci-bucket」をクリックすると、ファイルシステムの詳細が表示されます。
スクリーンショット 2020-11-19 21.32.09.png

4. OCI Storage Gatewayから共有されているObject StorageバケットをNFSでマウント

OCI Storage Gatewayから共有されているNFSをマウントするためのマウントポイント/mnt_oを作成します。

[ec2-user@ip-10-0-1-92 ~]$ sudo mkdir /mnt_o

/mnt_oにOCI Storage Gatewayから共有されているdest-oci-bucketをNFSでマウントします。

[ec2-user@ip-10-0-1-92 ~]$ sudo mount -t nfs -o vers=4,port=32769 localhost:/dest-oci-bucket /mnt_o

/mnt_oに移動し、ファイルを作成します。

[ec2-user@ip-10-0-1-92 ~]$ cd /mnt_o
[ec2-user@ip-10-0-1-92 mnt_o]$ touch aaa.txt
[ec2-user@ip-10-0-1-92 mnt_o]$ ls
aaa.txt

OCIコンソールから、バケットdest_oci_bucketの内容を確認します。
スクリーンショット 2020-11-19 21.35.14.png
/mnt_oに作成したファイルが、Object Storageバケット「dest-oci-bucket」内に作成されていることが確認できました。

5. AWS Storage Gateway(ファイルゲートウェイ)の構築

AWSのコンソールで「サービス」から「Storage Gateway」に移動します。
「今すぐ始める」をクリックします。
スクリーンショット 2020-11-19 20.15.09.png
「ファイルゲートウェイ」を選択し、「次へ」をクリック
スクリーンショット 2020-11-19 20.15.25.png
「Amazon EC2」をクリックして、隣にある「インスタンスの起動」をクリックします。
「インスタンスを起動」をクリックすると、インスタンス作成のウィザードが別のタブで開きますが、こちらのタブは閉じずにそのままにしておきます。
スクリーンショット 2020-11-19 20.16.02.png
インスタンスタイプを選択します。
今回はm4.xlargeを選択しました。
※あまり小さなインスタンスを選ぶとメモリ不足でStorage Gatewayが正しく動作しませんでした。
インスタンスタイプを選択したら、「次のステップ:インスタンスの詳細の設定」をクリック
スクリーンショット 2020-11-19 20.16.43.png
ネットワーク:先ほど作成した「SG-VPC」を選択
サブネット:先ほど作成した「SG-Subnet」を選択
その他はデフォルトのまま
「次のステップ:ストレージの追加」をクリック
スクリーンショット 2020-11-19 20.17.07.png
「新しいボリュームの追加」をクリック
スクリーンショット 2020-11-19 20.17.22.png
Storage Gatewayで使用するボリュームを追加します。
「次のステップ:タグの追加」をクリック
スクリーンショット 2020-11-19 20.17.41.png
「次のステップ:セキュリティグループの設定」をクリック
スクリーンショット 2020-11-19 20.17.56.png
「ルールの追加」をクリックして、AWS Storage Gateway用のルールを追加します。
スクリーンショット 2020-11-19 20.18.11.png
タイプ:HTTP ソース:マイIP 備考;For Activation(Storage Gatewayのアクティベーション用)
タイプ:NFS ソース:10.0.1.0/24(SG-SubnetのCIDR) 備考:For NFS(NFS共有用)
「確認と作成」をクリック
スクリーンショット 2020-11-19 20.20.53.png
設定内容を確認し、「起動」をクリック
スクリーンショット 2020-11-19 20.21.09.png
キーペアを選択し、「インスタンスの作成」をクリック
スクリーンショット 2020-11-19 20.21.37.png
インスタンスの作成が開始されます。
スクリーンショット 2020-11-19 20.21.50.png
インスタンスの概要の画面でパブリックIPv4アドレスを確認します。
スクリーンショット 2020-11-19 20.22.39.png
Storage Gatewayのウィザードに戻り、「次へ」をクリック
スクリーンショット 2020-11-19 20.23.07.png
エンドポイントタイプ:「パブリック」を選択
「次へ」をクリック
スクリーンショット 2020-11-19 20.23.19.png
IPアドレス:先ほど確認したインスタンスのIPv4アドレス
「ゲートウェイに接続」をクリック
スクリーンショット 2020-11-19 20.23.34.png
ゲートウェイのタイムゾーン :任意のタイムゾーン を選択
ゲートウェイ名:Storage Gateway
「ゲートウェイのアクティブ化」をクリック
スクリーンショット 2020-11-19 20.24.35.png
「ローカルディスクの準備中」と表示されるので、しばらく待ちます。
スクリーンショット 2020-11-19 20.24.54.png
ディスク情報が正しく表示されたら、「ログ記録を設定」をクリック
スクリーンショット 2020-11-19 20.25.41.png
ゲートウェイのヘルスロググループ:「新しいロググループを作成」を選択
「保存して続行」をクリック
スクリーンショット 2020-11-19 20.26.06.png
AWS Storage Gatewayが作成されました。
「ファイル共有の作成」をクリックします。
スクリーンショット 2020-11-19 20.26.23.png
 amazon S3バケット名:source-aws-bucket(データの移行元となるバケット名)
 ファイル共有名:source-aws-bucket(作成するファイル共有の名前)
 オブジェクトへのアクセス:ネットワークファイルシステム(NFS)を選択
 ゲートウェイ:先ほど作成した「Service Gateway」を選択
 その他はデフォルトのまま
 「次へ」をクリック
スクリーンショット 2020-11-19 20.32.18.png

スクリーンショット 2020-11-19 20.32.32.png
新しいオブジェクトのストレージクラス:「S3 スタンダード」を選択
その他はデフォルトのまま
「次へ」をクリック

スクリーンショット 2020-11-19 20.33.05.png
入力内容を確認して、「ファイル共有の作成」をクリック
スクリーンショット 2020-11-19 20.34.05.png
スクリーンショット 2020-11-19 20.34.19.png
ファイル共有source-aws-bucketが作成されました。
スクリーンショット 2020-11-19 20.34.39.png

6. AWS Storage Gatewayから共有されているS3バケットをNFSでマウント

OCI Storage GatewayをインストールしたインスタンスにSSHクライアントからec2-userでログインします。

今回はOCI Storage Gatewayをインストールしたインスタンスに、AWS Storage Gateway、OCI Storage Gateway両方のNFS共有をマウントします。

AWS Storage Gatewayから共有されているNFSをマウントするためのマウントポイント/mnt_aを作成します。

[ec2-user@ip-10-0-1-92 mnt_o]$ sudo mkdir /mnt_a

/mnt_aにAWS Storage Gatewayから共有されているsource-aws-bucketをNFSでマウントします。

[ec2-user@ip-10-0-1-92 mnt_o]$ sudo mount -t nfs -o nolock,hard 10.0.1.188:/source-aws-bucket /mnt_a

/mnt_aに移動し、ファイルを作成します。

[ec2-user@ip-10-0-1-92 mnt_o]$ cd /mnt_a
[ec2-user@ip-10-0-1-92 mnt_a]$ touch aaa.txt
[ec2-user@ip-10-0-1-92 mnt_a]$ ls
aaa.txt

AWSのコンソールからバケットsource-aws-bucketの内容を確認します。
スクリーンショット 2020-11-19 21.44.23.png
/mnt_aに作成したファイルが、S3バケット「source-aws-bucket」内に作成されていることが確認できました。

7. S3バケットとObject Storageバケット間のファイルコピー

ファイルコピーテスト用のファイルをS3バケットにアップロードします。

「ファイルを追加」をクリックし、適当なファイルを選択してアップロードします。
スクリーンショット 2020-11-19 21.46.46.png
今回は30個のPDFファイルをアップロードしました。
スクリーンショット 2020-11-19 21.48.20.png
ファイルをアップロードしたら、キャッシュを更新しておきます。
AWSコンソールの「Storage Gateway」→「ファイル共有」を開きます。
スクリーンショット 2020-11-19 21.54.30.png
「アクション」から「キャッシュの更新」をクリックし、キャッシュを更新します。
スクリーンショット 2020-11-19 21.54.41.png
/mnt_aの内容を確認します。

[ec2-user@ip-10-0-1-92 mnt_a]$ ls -l
total 63990
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 10.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 11.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 12.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 13.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 14.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 15.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 16.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 17.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 18.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 19.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 1.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 20.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 21.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 22.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 23.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 24.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 25.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 26.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 27.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 28.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 29.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 2.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 30.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 3.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 4.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 5.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 6.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 7.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 8.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 9.pdf
[ec2-user@ip-10-0-1-92 mnt_a]$ 

S3バケット「source-aws-bucket」の内容が表示されました。

cpコマンドで/mnt_aの内容を/mnt_oにコピーしてみます。

[ec2-user@ip-10-0-1-92 mnt_a]$ cp /mnt_a/* /mnt_o

/mnt_oの内容を確認します。

[ec2-user@ip-10-0-1-92 mnt_a]$ cd /mnt_o
[ec2-user@ip-10-0-1-92 mnt_o]$ ls -l
total 0
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 10.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 11.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 12.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 13.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 14.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 15.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 16.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 17.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 18.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 19.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 1.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 20.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 21.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 22.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 23.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 24.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 25.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 26.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 27.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 28.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 29.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 2.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 30.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 3.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 4.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 5.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 6.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 7.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 8.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 9.pdf
[ec2-user@ip-10-0-1-92 mnt_o]$ 

/mnt_aの内容が/mnt_oにコピーされました。

OCIコンソールからObject Storageバケット「dest-oci-bucket」の内容を確認します。
スクリーンショット 2020-11-19 21.57.37.png
スクリーンショット 2020-11-19 21.57.48.png
/mnt_oの内容がdest-oci-bucketに反映されていることが確認できました。

以上で、無事にS3バケット「source-aws-bucket」からObject Storageバケット「dest-oci-bucket」に直接データをコピーしてデータ移行できました。めでたし、めでたし。

まとめ

OCI Storage Gateway、AWS Storage Gatewayを利用することで、中間ストレージにファイルを一度ダウンロードして再度アップロードすることなく、AWS S3からOCI Object Storageに直接データを移行することができました。

先に紹介したgoofysを利用する方法や、こちらの方法であれば、中間ストレージのコストやデータをダウンロード/アップロードする手間が不要になりますので、AWS S3からOCI Object Storageへのデータ移行もだいぶ楽になりますね。

参考文献

Oracle Cloud Infrastructure ドキュメント:ストレージ・ゲートウェイ
AWS Storage Gatewayユーザーガイド:ファイルゲートウェイの管理

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

アップデートで「AWS Network Firewall」という新しいサービスが登場

はじめに

2020/11/17のアップデートで「AWS Network Firewall」という新しいサービスが登場しました。本記事ではこのサービスの特徴について調べ、使い所を検討してみます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[TIPS]Amazon S3とは?

Amazon S3とは

AWS(Amazon Web Services)の中のサービスの1つ、Amazon Simple Storage Serviceのことを指します。Sが3つだからS3ですね。
名前の通りクラウド型のストレージ機能を提供するサービスとなります。ただ、単なるストレージとしての機能だけではなく、バージョン管理やイベント機能もあるみたいです。

容量は無制限で、1GB使用する毎に料金が加算されていきます。つまりストレージにファイルを入れた分だけ課金されます。
記事執筆時点での料金は1GBあたり0.025ドル(東京リージョン、スタンダードストレージ)となっています。安い。

image.png (201.2 kB)

ウェブのどこからでもデータ格納と取得が可能のようです。データは動画や画像ファイルなど殆どのデータを預けることが可能で、ファイルそのものへのセキュリティも担保されています。各地にある物理的なデータセンターに分散して保存をしているので、障害にも強いようです。

他のAWSサービスとの連携も容易にできるので、AWS触ってる人はS3もガンガン使うのだろうと思います。

S3の機能(さらっと確認程度)

バージョン管理

バージョニングを有効にしておくことで、オブジェクト毎のバージョンを残すことができます。誤った操作しても元に戻すことができるsvnみたいな使い方ができそうですね。

ライフサイクル

オブジェクト毎にライフサイクルを設定でき、「一定期間経ったら削除・低価格帯のストレージに移動」ということができるようです。Jenkinsとかで使ったら便利そう。

ログ記録

svnみたいな感じだと思うんですが、ログを残せるみたいです。

イベント

オブジェクトに操作が行われた場合にイベントを発火させる機能があるみたいです。ここで言うイベントは多分データ分析とかですかね。

アクセス権限

デフォルトでは全オブジェクトのアクセス権がプライベートになっており、所有者+管理者以外はアクセスできません。ここに認証したユーザーのみ操作を許可するなど、細かく設定することができます。

暗号化

オブジェクトをS3に保存すると、データを暗号化しておくことができます。 サーバーサイド、クライアントサイド、それぞれの暗号化に対応しているらしいです。

オブジェクトへのアクセスツール

WindowsならWinSCP、MacならCyberDuckが良さそう?

Unityでの活用方法

以下のスライドが参考になりそう
https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-2019aws-for-unity-developers

ゲーム内写真をアップロードしてサーバー側でサムネイル画像の作成が行われたり。

image.png

image.png

以下の記事も。

UnityからAmazon S3にファイルをアップロードし、公開状態にする

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CodeBuild実行時に$(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)で発生したエラーの解決方法

問題点

AWS CodeBuild実行時に

Running command $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)

時に、An error occurred (AccessDeniedException) when calling the GetAuthorizationTokenと言われてこけてしまった。

実行結果
スクリーンショット 2020-11-20 14.49.01.png

なぜ起こったのか?

CodeBuild実行時にECRを操作する権限がアタッチされていなかったから。

解決方法

手順_01

CodeBuild > ビルドプロジェクト > 該当プロジェクトの詳細を表示からビルドの詳細 > 環境サービスロールを確認

サービスロールのリンクからIAM Management Consoleへ行く

手順_02

ポリシーのアタッチからAmazonEC2ContainerRegistryPowerUserをアタッチする

手順_03

ビルドを再試行して実行できることを確認する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS lambda layer で仮想環境を構築したった

Background

Python3.6 以降でvenvを使ってpipしたパッケージを保存していたのですが、AWS上で出来ないかと調べているとlayerという手頃な機能があったので使ってみた。

venv

作業PC上ではこれでOK

python -m venv [仮想環境名]

./[仮想環境名]/bin/activate
([仮想環境名]) pip install [パッケージ名]

パッケージ用のzip作成

AWS lambda を使ってWebスクレイピングしたった-Development (Webスクレイピング)と同様にAWS上にuploadするためにzipファイルを作ります。

mkdir packages
cd packages
pip install [パッケージ] -t ./
pip install [パッケージ] -t ./
......
zip -r ./myDeploymentPackage.zip ./packages

Layer

pip環境を作成するにはLayerを作成します。

Development (error)

ここでAWS lambda を使ってWebスクレイピングしたった-Development (Webスクレイピング)でbeautifulsoupを使ったコードを書いてみます。

import json
import requests
from bs4 import BeautifulSoup

def lambda_handler(event, context):
    # TODO implement

    response = requests.get('https://mainichi.jp/editorial/')
    soup = BeautifulSoup(response.text)
    pages = soup.find("ul", class_="list-typeD")
    articles = pages.find_all("article")
    links = [ "https:" + a.a.get("href") for a in articles]

    return {
        'statusCode': 200,
        'links' : links
    }

とすると、

{
  "errorMessage": "Unable to import module 'lambda_function'"
}

importエラーが出てしまいます。

Lambda@Pythonのレイヤーを使う際の基本的な注意点(レイヤーに上げたファイルがimport出来ない人向け)-注意点
を見ると、zipファイルは /opt/ 配下に解凍されるみたいです。

この場合だと、/opt/packages/に作業用PCにpipでインストールしたパッケージがあるので、

import sys
sys.path.append('/opt/packages')

にして事前にパスを通しておく必要があります。

Development (modified)

import sys
sys.path.append('/opt/packages')
import json
import requests
from bs4 import BeautifulSoup


def lambda_handler(event, context):
    # TODO implement

    response = requests.get('https://mainichi.jp/editorial/')
    soup = BeautifulSoup(response.text)
    pages = soup.find("ul", class_="list-typeD")
    articles = pages.find_all("article")
    links = [ "https:" + a.a.get("href") for a in articles]

    return {
        'statusCode': 200,
        'links' : links
    }
{
  "statusCode": 200,
  "links": [
    "https://mainichi.jp/articles/20201120/ddm/005/070/067000c",
    "https://mainichi.jp/articles/20201120/ddm/005/070/065000c",
    "https://mainichi.jp/articles/20201119/ddm/005/070/119000c",
    "https://mainichi.jp/articles/20201119/ddm/005/070/118000c",
    "https://mainichi.jp/articles/20201118/ddm/005/070/115000c",
    "https://mainichi.jp/articles/20201118/ddm/005/070/114000c",
    "https://mainichi.jp/articles/20201117/ddm/005/070/114000c",
    "https://mainichi.jp/articles/20201117/ddm/005/070/113000c",
    "https://mainichi.jp/articles/20201116/ddm/005/070/043000c"
  ]
}

Post Scripting

zipで圧縮するときに"/packages/"なしでできればいいんすけどね:expressionless:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[AWS] グローバルインフラストラクチャとネットワーク①「リージョンとアベイラビリティゾーン」

リージョンとアベイラビリティゾーン


リージョン

AWSがサービスを提供している拠点。
日本では東京リージョン、2021年には大阪リージョンをを立ち上げる予定。


アベイラビリティゾーン(AZ)

物理的、ソフトウェア的に自律しているデータセンター1の集合体。

AZの地理的・電源的独立による信頼性の向上

地理的独立

・落雷や洪水、大雨などの災害によるAZへの局所的な障害に対して別のAZが影響されないように配置されていること。その為AZ間は数十キロ程度離れて配置されている。
・各AZ間は高速なネットワーク回線で接続されているためAZ間のネットワーク遅延(レイテンシー)は2ミリ秒以下で安定している。

電源的的独立

・1か所の停電によりAZ内のすべてのデータセンターが一斉にダウンすることがないように設計されている。
 

AZの地理的・電源的独立により、リージョン全体でみたときにAWSは障害への耐久性が高くなり信頼性が高いといえる。

マルチAZによる可用性の向上

複数のAZを利用してシステムを構築すること。耐障害性を高めシステムの可用性を高める。


  1. 通信やコンピューティングの設備を設置して運用することに特化した設備 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSの主要なサーバレスサービス 4選!

はじめに

今回はAWSのサーバレスサービスを紹介します!

ここでいうサーバレスは、AWSがサーバーを管理し、利用者側はサーバ管理不要なコンピューティングサービスを指すことにします。

利用者はサーバー管理不要なので、毎週のように来る脆弱性対応やミドルウェアの設定・管理、スケーリングを考えた構成をしなくて済みます。
また、利用者はビジネスロジックに集中でき、使用した分だけ課金されるので、コスパの良いサービスを作ることができます。

YouTube動画

動画で確認したい方はこちらをどうぞ
【YouTube動画】 AWSの主要なサーバレスサービス4選
AWSの主要なサーバレスサービス4選

AWS Lambda

LambdaはAPI呼び出し時やイベント発生時にLambda関数を実行できるサービスです。
Lambda関数はNode.jsやRuby, Pythonなどで書かれたコードを実行するために利用します。

S3やSQSと連携して、データを処理したり、スケジューリングにより定期実行したりできます。

Amazon API Gateway

API Gatewayは様々なサービスと連携して、REST APIやWebSocket APIを作成し、管理できるサービスです。

LambdaやDBと連携すると、CRUDのアプリも作れます。

AWS Step Functions

AWS上の様々なサービスを連携させて、ワークフローを作れるサービスです。

Lambda1の処理が終わったら、Lambda2に情報を渡したいといった場面で威力を発揮します。
このサービスを使わない場合は、Lambda1にLambda2の情報を入れておく必要があります。
Lambda関数の実行順やエラー時の対処をLambda関数外で制御でき、Lambda間を疎結合にできます。

AWS AppSync

GraphQLのAPIを簡単に作れるサービスです。

GUIでクエリ文を書いて実行できます。
ビジネスロジックはVTLという言語で記述します。

おわりに

今回はAWSのサーバレスサービスについて紹介しました!

サーバレスを簡単に扱うためのサーバレスフレームワークもいくつか候補があります。
例えば、AWS SAM CLIServerlessなどがあり、ローカルで実験してデプロイすることもできます。
既存のフレームワークと同じように書きたい場合もRubyならRSpecが標準で使えるJetsなどがありますし、一度触ってみてはいかがでしょうか?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

King Gnuの曲の歌詞でAmazon Comprehendの感情分析機能を試してみる

King Gnuの曲の歌詞でAmazon Comprehendの感情分析機能を試してみました。曲ごとにpositive順に並べています。ちなみに、ポジティブNo.1の三文小説とNo.2のThe holeは曲を聴く限りポジティブなものには聞こえません。

image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS Athenaでのタイムスタンプの扱い方 まとめ

はじめに

AWS AthenaはPresto SQLに準拠しているため数々の時刻関数を使用することができます。

今回は私がよく使うものを紹介していきたいと思います。

参照元

タイムゾーンの設定

SELECT timestamp '2020-11-20 01:00 UTC' AT TIME ZONE 'Asia/Tokyo'
> 2020-11-20 10:00:00.000 Asia/Tokyo

現在時刻を取得

2020/11/20 6:40 (JST)に実行した結果になります。

SELECT current_timestamp
> 2020-11-19 21:40:27.184 UTC

タイムゾーンを指定して現在時刻を取得する

SELECT current_timestamp AT TIME ZONE 'Asia/Tokyo'
> 2020-11-20 06:40:36.182 Asia/Tokyo

文字列型からタイムスタンプ型へ変換する

SELECT date_parse('2020-11-20 16', '%Y-%m-%d %H') 
> 2020-11-20 16:00:00.000

フォーマット表

※よく使うものを抜粋

format 意味
%Y 4桁の年
%y 2桁の年
%m 月 [numeric 01~12]
%W 曜日名 [Sunday, Monday, ....]
%w 曜日 [numeric 0~6 0が日曜日]
%d 日 [01~31]
%e 日 [1~31]
%H 時間 [00~23]
%h 時間 [01~12]
%p AM or PM
%i 分 [numeric 00~59]
%s 秒 [numeric 00~59]
%f 秒の小数部分(0~999999999)

タイムスタンプ型から文字列型へ変換する

SELECT date_format(timestamp '2020-11-20 01:00 UTC', '%Y/%m/%d')
> 2020/11/20

フォーマットについては文字列からタイムスタンプ型へ変換する際のフォーマットと同じになります。

演算処理

intervalを用いて加算

SELECT timestamp '2020-11-20 01:00' + interval '1' month
> 2020-11-20 16:00:00.778

intervalを用いて減算

SELECT timestamp '2020-11-20 01:00' - interval '3' hour
> 2020-11-19 22:00:00.000

date_add を用いて演算

SELECT date_add('hour', 3, timestamp '2020-11-20 01:00 UTC')
> 2020-11-20 04:00:00.000 UTC

date_diff を用いてタイムスタンプの差分を計算する

出力は指定した単位となる

SELECT date_diff('day', timestamp '2020-11-17 20:00 UTC', timestamp '2020-11-20 01:00 UTC')
> 2

date_adddate_diff で使える単位はこちら

  • millisecond
  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year

unixtimeからタイムスタンプ型へ変換する

SELECT from_unixtime(1605793223)
> 2020-11-19 13:40:23.000

タイムゾーンを指定する場合

SELECT from_unixtime(1605793223, 'Asia/Tokyo')
> 2020-11-19 22:40:23.000 Asia/Tokyo

タイムスタンプ型からunixtimeへ変換する

SELECT to_unixtime(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 1.605793223E9

タイムスタンプの一部を抜き取る

年を抜き取る場合

SELECT year(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 2020

月を抜き取る場合

SELECT month(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 11

日を抜き取る場合

SELECT day_of_month(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 19

曜日を抜き取る場合

SELECT day_of_week(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 4

※ 1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日、7:日曜日

時間を抜き取る場合

SELECT hour(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 22

分を抜き取る場合

SELECT minute(timestamp '2020-11-19 22:04:23 Asia/Tokyo')
> 4

秒を抜き取る場合

SELECT second(timestamp '2020-11-19 22:40:23 Asia/Tokyo')
> 23

TRUNC処理

date_trunc関数を用います。

引数はdate_trunc(単位, timestamp)です。

単位 関数 出力
second date_trunc('second', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-22 22:40:23.000 Asia/Tokyo
minute date_trunc('minute', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-22 22:40:00.000 Asia/Tokyo
hour date_trunc('hour', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-22 22:00:00.000 Asia/Tokyo
day date_trunc('day', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-22 00:00:00.000 Asia/Tokyo
week date_trunc('week', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-16 00:00:00.000 Asia/Tokyo
month date_trunc('month', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-11-01 00:00:00.000 Asia/Tokyo
quarter date_trunc('quarter', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-10-01 00:00:00.000 Asia/Tokyo
year date_trunc('year', timestamp '2020-11-22 22:40:23.34 Asia/Tokyo') 2020-01-01 00:00:00.000 Asia/Tokyo

最後に

AthenaのデフォルトのタイムゾーンはUTCであることには注意が必要です。

この記事が開発や分析のご助力となれば幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】S3 のバケットに HTML ファイルをアップロードしてブラウザから表示する

目標

本記事の目標は S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることです。
図で表すと以下のようになります。

png.png

【参考】
静的ウェブサイトホスティング用に S3 バケットを設定する方法
Amazon S3による静的Webサイトホスティング

手順

  1. バケットの作成
  2. バケットの設定
  3. コンテンツのアップロード
  4. ブラウザからアクセス

1. バケットの作成

画像の赤枠を修正したりクリックしていくだけです。
基本すべてデフォルト設定で作成して、あとから設定を編集していきます。

1.png
※ 今回はバケット名を「test-bucket-suguru」に設定しました。適宜変更してください。
2.png
3.png
4.png

バケットの作成は以上です。

2. バケットの設定

以下の 3 つの設定をします。

  • パブリックアクセスの設定
  • パケットポリシーの設定
  • 静的ウェブホスティングの有効化

2-1. パブリックアクセスの設定

「アクセス許可」から設定します。

5.png
6.png

パブリックアクセスの設定は以上です。

2-2. パケットポリシーの設定

「アクセス許可」から設定します。

6-5.png
7.png

設定内容は公式を参考にしてください。
公式を見ると以下のように設定するとのことでした。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<バケット名>/*"
            ]
        }
    ]
}

パケットポリシーの設定は以上です。

2-3. 静的ウェブホスティングの有効化

「プロパティ」から設定します。

8.png
9.png
10.png
11.png

デフォルトページを index.html、エラーページを error.html と設定しました。
これらのファイルを次の手順でアップロードします。

静的ウェブホスティングの有効化は以上になります。

3. コンテンツのアップロード

デフォルトページを index.html、エラーページを error.html と設定したのでそれらのファイルをアップロードします。

3-1. ファイルの用意

アップロードするファイルを用意します。
今回は検証なので内容はなんでもいいです。

HTML から画像ファイルが参照されることも確認したかったので、index.html には image01.png という画像ファイルを参照するようにしました。

index.html
<p>index desu</p>
<img src="image01.png">
error.html
<p>error desu</p>

・image01.png ↓
image01.png

3-2. アップロード

用意した以下の 3 つのファイルをアップロードします。

  • index.html
  • error.html
  • image01.png

12.png
13.png
14.png
15.png

コンテンツのアップロードは以上になります。

4. ブラウザからアクセス

4-1. エンドポイントの確認

16.png
17.png

赤枠がエンドポイントの URL になります。

4-2. ブラウザからアクセス

確認したエンドポイントの URL をコピーしてブラウザからアクセスします。

デフォルトを index.html と設定したので、アクセスすると index.html が表示されます。
18.png
デフォルトページの URL の末尾に /error.html をつけてアクセスするとエラーページが表示されます。
19.png

5. バケットの削除

最後にバケットの中身を空にして、さらにバケットそのものを削除しましょう。
今の状態だとアクセスが大量にきてしまうと無料枠を突破してしまう可能性があります。

まとめ

目標であった S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることが達成できました。

png.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS認定ソリューションアーキテクト-プロフェッショナル受験を終えて(2020.11)

はじめに

2020/11/14に念願のAWS認定ソリューションアーキテクト-プロフェッショナル(以下SAP)に合格しました。
受験体験記や勉強法に関する記事も多いですが、私自身、今回の受験を通していくつかの気づきを得ましたので、これから受験する方の参考になればと思い、まとめることにしました。

筆者について

前提として、受験時の筆者について書いておきます。SAP試験は出題範囲が広く、AWS以外のインフラ知識も必要となるため、その人のバックグラウンドによって当然勉強すべきポイントも違ってくると思うからです。

キャリア

  • Web系事業会社のインフラエンジニア
  • AWS歴は5年程度
  • AWS認定ソリューションアーキテクト-アソシエイト(以下SAA)は取得済み
  • 自社Webサービス基盤としてAWSを毎日業務利用
    • 利用サービス: EC2,RDS,S3,Route53,Lambda,ElastiCache,API Gateway,ECS,CodeDeploy,IAMなど、Webサービスで利用する一般的なもの
  • オンプレ経験あり
  • サーバはLinux中心だがWindowsサーバ経験もあり
  • ネットワーク知識はCCNPレベル

準備期間

1.5ヶ月程度

受験回数

1回

私の勉強方法

まとめると下記です。

  • 対策本での問題演習を通して自分の苦手項目を洗い出す
  • 上記について、Web上のリソースを活用して補強

Web上では、よくAWSが提供するホワイトペーパーや、各サービスのBlackbeltを読みまくるという勉強方法が散見されます。もちろん公式情報がもっとも正確だし大切だとは思いますが、SAPは出題範囲が広いため、読むべき量が膨大になります。
私は公式情報の参照は最低限にとどめ、他の情報も積極的に活用しました。

また、情報をインプットするだけだと理解した気になるので、あくまでも問題演習を中心にした方が効率的だと思います。

対策本でひたすら問題演習

これまでSAP試験については対策本がなかったのですが、ついに登場しました。
『AWS認定ソリューションアーキテクト-プロフェッショナル ~試験特性から導き出した演習問題と詳細解説』です。

これは私にとってまさに救世主のような本でした。
私自身、資格試験の勉強は参考書をやりこむという昔ながらのスタイルだったので、参考書の存在しないSAPの受験については、膨大すぎるWeb上のリソースを前に、二の足を踏んでいたのです。

この本の存在を知って、SAP試験に改めてチャレンジしようという気になりました。
この本の素晴らしさについてはクラスメソッドさんによる書評をどうぞ。

1.まず1周

何はともあれ愚直に冒頭から通読していきます。
本書では、第2章で出題範囲のAWSサービスについて網羅的に説明されているので、ここで各サービスについて復習しておきます。

まったく内容を知らないサービスがあったら、最低限どんなサービスなのか答えられる程度には理解しておきましょう。

その後、各出題分野ごとの問題演習になりますので、問題を解いて解説を熟読します。間違えた問題はもちろん、正解した問題でも、不正解の選択肢についてどこが間違っているのかを確認しておきます。

2.専門用語を覚える

専門用語についてまったく知らないと、問題の要件を理解できないので覚える必要があります。
ちなみに、私にとってあまり馴染みがなかったのが以下でした。

3.模擬試験問題を時間を計って一気にやる

ここまで読み進めたら、最終章の模擬試験を一気に解きます。
SAP試験は75問というボリュームに慣れておくことが特に重要だと思います。それぞれの問題文も長いのですが、スキマ時間に数問ずつ解いていると、本番で一気に75問解答するときの負荷について想像できません(思ったより疲れる)。
最低1度は本番さながらに75問を解答し通すのがいいと感じました。

試験時間は180分あるので、時間が足りなくなることはないと思います。時間を計ることで75問を解くのに何分ぐらいかかるのか、1問あたりどれぐらいのペースで解けばいいかの感覚がつかめます。そんなに慌てて解答する必要がないことが分かるでしょう。

4.模擬試験問題で間違えた問題を復習

解説を読み、関連情報も検索して理解を深めましょう。

5.時間をおいて模擬試験問題に再チャレンジ

ある程度時間をおいてから模擬試験問題に再チャレンジします。もう時間を計る必要はありません。スキマ時間で数問ずつ解答してもいいでしょう。

ここで再度間違えた問題や、1回目は正解だったのに2回目は間違いだった問題は、理解が浅い部分として要チェックです。

6.苦手分野について理解を深める

ホワイトペーパーなどの公式情報にこだわらず、Web上の豊富なリソースを活用しましょう。
私の場合、クラスメソッドさんのブログが一番役に立ちました。

7. 上記5,6を繰り返し

本書はサンプル問題も豊富なので、あれこれ手を出すより繰り返しやりこむ方がいいと思います。

馴染み深いサービスについてもアップデートを中心にキャッチアップしておく

EC2やS3など、普段の業務で馴染みのあるサービスについては当然理解度は深いのですが、すべての機能を業務で活用しているとは限りません。代表的なサービスのアップデート情報や、あまり利用したことのない機能についてはキャッチアップしておきましょう。

私の場合、下記などでした。

  • VPC
    • IPアドレス範囲の拡張
    • Egress-Onlyインターネットゲートウェイ
  • S3
    • 各ストレージクラスの特徴、コスト
  • EC2
    • Dedicated Hosts,Dedicated Instanceの違い
    • プレイスメントグループ
  • Route53
    • Route53 Resolver

AWS以外のインフラ知識も必要

特にネットワークの基礎知識は必須だと思います。ルーティングなどの基本は押さえておきましょう。
オンプレの経験があれば活かせるでしょう。

AWS公式の模擬試験について

Web上では必須という意見が大半ですが、私のように対策本中心で勉強するなら、個人的には必須とは思いません。
私の場合、以前取得したSAAの特典の無料クーポンがあったので受験しましたが、本番まで時間がなかったので復習に十分な時間が取れず、活用できませんでした。

受験する場合、解答しつつ問題と選択肢を保存しておき、あとで復習できるようにしましょう。
結果は分野ごとの正答率しか出ないので、あまり参考にならないのですが。。。

試験当日のポイント

試験開始までの流れについては理解しておく

テストセンターでの受験が初めての場合、事前に調べておきましょう。用意すべき身分証明書など。
https://app.getpocket.com/read/2811015490

問題や選択肢が怪しい日本語だったら英語の原文を確認する

AWS試験について、日本語訳が怪しいというのはよく言われますが(typoもあります)、個人的にはIAMに関する問題については英語の原文も合わせて確認した方がいいと思います(確認できるボタンがある)。
Role役割と訳されていた場合、そのユーザの職務上の役割なのかIAMロールのことなのか分かりづらいケースがありました。

消去法で選択肢を絞り込む

AWSの試験なので、基本的にAWSのサービスを活用するのがベストプラクティスのはずです。サードパーティのソリューションなどの選択肢は除外できる場合がほとんどだと思います。

複数選択の問題

複数の選択肢を選ぶ必要がある問題については、類似の選択肢をグルーピングできる場合、それらから一つずつ正しい選択肢を選ぶようにすればいいはずです(選択すべき数にもよりますが)。

見直しは必ずやる

ちょっとでも選択に迷う問題は見直しフラグをつけておいて後で見直しましょう。
私の場合、どんどん解いていくと30分以上余りましたので、その時間を使って見直しをしました。選択肢を選びなおして正解になったケースもあったと思います。

受験してみての所感

  • 業務でのAWS利用経験がないとつらい
    • すべてのサービスについて利用経験がある必要はないですし、無理だと思いますが、AWSの利用経験がまったくないと、問題で問われているアーキテクチャをイメージしづらいと思います。また、トラブルシューティング的な問題もあるので、AWS経験は必須と言えます。
  • AWS以外のインフラ知識は必要
    • 特にネットワークの知識は必要だと感じました。ルーティングやVPNなど。Direct Connectなどの問題に絡んできます。
  • ホワイトペーパー読むより問題演習が重要
    • 知識のインプットより、長い問題文などの出題パターンに慣れておく方が重要だと感じました。
  • 主要サービスのアップデートはキャッチアップしておく
    • 最新のアップデートは出題されないと思いますが、改めて主要サービスのBlackbeltなどを確認しておきましょう。ここでもクラスメソッドさんのアップデート系の記事が参考になります。

参考にしたリソース

AWS公式トレーニング

https://www.aws.training/Details/eLearning?id=42403
無料なので、レベル感を掴むためにもやっておいたほうがいいです。

AWS エバンジェリストシリーズ AWSの基礎を学ぼう(connpass)

https://awsbasics.connpass.com/
AWSの方が、45分で各サービスの概要を解説しているセミナーです。受験に関係なく大変参考になります。

ブログなど

AWS Organizations

https://dev.classmethod.jp/articles/organizations-gettingstarted/
https://blog.serverworks.co.jp/tech/2020/02/29/organizations_cloudtrail/

S3

https://dev.classmethod.jp/articles/introduction-to-new-s3-storage-class-standard-ia/

EC2

https://dev.classmethod.jp/articles/ec2-spot-block/
https://dev.classmethod.jp/articles/ec2-placement-group-strategy/

AutoScaling

https://stay-ko.be/aws/solutionarchitect-pro-aws-autoscaling
http://blog.father.gedow.net/2019/02/05/aws-auto-scaling-2019/

Amazon DynamoDB

https://dev.classmethod.jp/articles/amazon-dynamodb-auto-scaling/

AWS Snowファミリー

https://aws.amazon.com/jp/snow/

VPC

https://dev.classmethod.jp/articles/vpc-endpoint-gateway-type/
https://dev.classmethod.jp/articles/expanding-vpc-cidr/
https://dev.classmethod.jp/articles/use-both-eigw-and-igw-on-vpc/
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/egress-only-internet-gateway.html
http://yamaneko927.hatenablog.com/entry/2019/11/14/194338
https://aws.amazon.com/jp/blogs/news/new-vpc-traffic-mirroring/

AWS Direct Connect

https://dev.classmethod.jp/articles/direct-connect-gateway/
https://blog.serverworks.co.jp/tech/2018/12/11/concepts-of-direct-connect/
https://qiita.com/fjisdahgaiuerua/items/17a2a7355497565b0478

AWS Service Catalog

https://dev.classmethod.jp/articles/aws-service-catalog/

AWS CloudFormation

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/best-practices.html

Amazon ElastiCache

https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/mem-ug/SelectEngine.html

AD連携

https://aws.amazon.com/jp/premiumsupport/knowledge-center/enable-active-directory-console-access/

Amazon API Gateway

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html
https://qiita.com/nh321/items/013cfac2a85548766601

CodeDeployによるLambdaデプロイ

https://docs.aws.amazon.com/ja_jp/codestar/latest/userguide/how-to-modify-serverless-project.html

Amazon RDS on VMware

https://www.acrovision.jp/service/aws/?p=2301

AWS Config

https://dev.classmethod.jp/articles/automate-aws-config-remediation-action/
https://dev.classmethod.jp/articles/aws-config-start/

AWS CloudTrail

https://dev.classmethod.jp/articles/cloudtrail-insights-unusual-activity-alert/
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/creating-trail-organization.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む