- 投稿日:2020-11-20T23:36:29+09:00
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 26995ps 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を使ってブラウザにアクセスすると、正常に表示されているか確認ができます。
- 投稿日:2020-11-20T23:13:36+09:00
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インスタンスの「パブリックアクセス可能」を「あり」にする
参考:https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-connectivity-instance-subnet-vpc/
これでローカルから接続できるようになりました。
- 投稿日:2020-11-20T21:28:14+09:00
【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 認証情報」欄にある、
「認証情報を生成」を選択します。
(4)認証情報が生成されるので、「証明書のダウンロード」を選択すると認証情報が書かれた
csvファイルがダウンロードされます。1-2.CodeCommit リポジトリを作成
(1)サービス「CodeCommit」→「リポジトリを作成」を選択します。
(2)「リポジトリ名」を入力し(今回はgit_test)、「作成」を選択します。
(3)右上の「URLのクローン」タブ → 「HTTPSのクローン」を選択し、クローン用のURLをコピーして
テキストなどにメモしておきましょう。URLは「https://**/git_test(リポジトリ名)」になるはずです。
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_test2-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 masterCodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
3-1.windows端末でgit cloneする
(1)windows端末にGit for WindowsとTortoiseGitをインストールします。
インストールでは以下の記事を参考にさせて頂きました。
TortoiseGitの導入とGitLabへの接続方法
(2)適当な場所にgit用のディレクトリを作成します。
(3)作成したディレクトリをエクスプローラで開き、右クリック→「Git クローン(複製)」を選択します。
(4)以下のような画面が出てくるので、URLの欄にクローン用のURLを入力して「OK」を選択します。
(5)認証情報の入力を求められるので入力します。
(6)成功すると以下のようにディレクトリが作成されます。
3-2.windows端末でgit pushする
cloneしたディレクトリから適当なファイル(windows_test.txt)を作成してgit pushしてみましょう。
(1)適当なファイル(windows_test.txt)を作成します。
※この作業はEC2で作業した後に行っているので、ディレクトリにはEC2で作成したファイル(ec2_test.txt)もあります。
(2)エクスプローラ上で右クリック→「Git コミット(C)…」を選択します。
(3)以下の画面でメッセージを入れる & 作成したファイルにチェックをつけて、
右下の「コミット」を選択します。
(4)エクスプローラ上で右クリック→「TortoiseGit」→「プッシュ」を選択します。
(5)確認画面でそのまま「OK」を選択します。
(6)CodeCommitで確認すると想定通りファイルが作成されていることが確認できます。
まとめ
今回は2通りの方法を紹介しましたが、ファイルの編集や他のアプリケーションとの連携の
しやすさを考えるとEC2にgit cloneする方が良いのではないかと考えています。
- 投稿日:2020-11-20T21:01:11+09:00
AWS cliでECRにpushするときに再認証を求められる&loginが400 bad requestで弾かれる
エラー内容
docker push ********.dkr.ecr.region.amazonaws.com/****:TAGECRに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が返ってきます。
- 投稿日:2020-11-20T19:31:16+09:00
【画像付き】AWSでSSL化させる【丁寧に解説】
前提
- EC2にデプロイ済みであること
- ドメインを取得しElastic IPと紐付けていること。つまり
http://ドメイン名
でサイトにアクセスできるようになっていること。ドメインの取得方法は下記記事を参考にました!
そもそもSSL化ってなに?
簡単にいうと「セキュリティが強い、安全なサイトにすること」です。
詳しい説明は下記記事を参考にしてください。方法
- Certificate ManagerでSSLサーバー証明書を発行
- ロードバランサーにてSSLサーバー証明書とEC2インスタンスを紐付ける
- EC2インスタンスのポート開放
- 動作確認
この順番で行きたいと思います。
まずはゴールを御覧ください。最終形のイメージ
ポイントは2つ!
- 今回はサーバー証明書はCertificate Managerで取得して、ロードバランサー(ELB)に紐づける
- EC2とELBはHTTP通信。ELBとクライアントをHTTPS通信するよう設定する
では行ってみましょう!
1. Certificate ManagerでSSLサーバー証明書を発行
Certificate Manager
入力したドメイン名が出現します。
確認とリクエストをクリック
そうするとDNSの検証の準備が始まります。
状況が「検証保留中」と出ているはずです。
ドメインの名の横の「 ▼ 」をクリックすると名前、種類、値のレコードが出てきます。
この値をメモアプリに保存しましょう。
※DNS設定をファイルにエクスポートでも値は確認できます。
Route53
Route53に移ります。
指定したドメインのホストゾーンでレコードを作成をクリック。
エンドポイントを選択をクリック。
レコードタイプに応じたIPアドレスまたは別の値を選択
先程のメモをご用意ください。
レコード名に、「名前」を
ルーティング先に、「値」をコピペ。
レコードタイプは「CNAME」を選択し、シンプルなレコードを定義をクリック。
このようにタイプCNAMEのレコードができたら準備OKです。
Certificate Manager
再びCertificate Managerに戻り、以下のように「発行済み」になっていたらSSLサーバー証明書の発行が完了です。
ここまでよろしいでしょうか?
どんどん行きましょう!!2. ロードバランサーにてSSLサーバー証明書とEC2インスタンスを紐付ける
ロードバランサー
ロードバランサーの作成をクリック。
※筆者は既にロードバランサーを1個作ってあるため、下に表示されています。
Application Load Balancerの作成をクリック。
任意の名前を記入し、
リスナーの追加でHTTPSを追加。
アベイラビリティーゾーンでは2つ以上、サブネットを選択します。
その後次の手順をクリック
ACMから証明書を選択をするを選択、
証明書の名前は先程作成した証明書を選択してください。
その後次の手順をクリック。
EC2インスタンスが使っているセキュリティーグループを選択し、
その後次の手順をクリック。
ターゲットグループに任意の名前を付けます。
プロトコルはHTTP、ポートは80のデフォルト設定でOKです。
EC2インスタンスとELBはHTTP通信のためです。
その後次の手順をクリック。
任意のEC2インスタンスを選択肢し登録します。
その後次の手順をクリック。
お疲れさまです!
後もう少しです!Route53
Route53に戻り、先程作ったロードバランサーとドメインを紐付けます。
ルーティング先を先程作ったロードバランサーと紐付け、変更を保存をクリック。
3. EC2インスタンスのポート開放
EC2
以上で完了です!!!!
それではhttps://ドメイン名
で検索してみましょう!4. 動作確認
まとめ
ドメイン取得紐付け後の、ドメインのSSL化を解説しました。
自分はEC2とALBの間をHTTPS通信しようとして、かなりハマりました。
皆さんにはそうなって欲しくないためココに記しました。私自身もプログラミング初心者のため間違っていることが、ありましたらご指摘ください。
最後まで読んでいただき、ありがとうございました!
- 投稿日:2020-11-20T19:23:32+09:00
AWSのACM(Certificate Manager)でSSL証明書を取得してみた
はじめに
個人サイトのSSL化のためACMで証明書を取得してみた。
手順
以降の流れで取得しました。
AWSコンソールのCertificate Managerから[証明書リクエスト]を選択
ドメイン名を追加します。
証明書のリクエストの検証方法は基本DNSの検証で進めます。
※Eメールの検証を選ぶと、取得したドメインのpostmaster@やadmin@へ承認依頼メールが送信されます。今回このドメインのメールサーバは作っていないのでDNS検証を選びました。内容確認してリクエストします。
Route53を利用しているため「Route53でのレコードの作成」をクリックするだけでDNSレコード情報を追加できます。そうでない場合は、レジストラでのCNAME登録(①と②)が必要となります。
①CNAMEレコードの情報をファイルから確認します。
②お名前.com等のレジストラのでCNAMEを登録します。
[ドメイン一覧>DNSレコードの変更>次へ>DNSレコード設定を利用する>]
検証状態が成功、発行済みになれば完了です。
- 投稿日:2020-11-20T17:29:40+09:00
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を作成」をクリック
・サブネットの作成
VPC ID:作成したVPCを選択
サブネット名:SG-Subnet
アベイラビリティゾーン:任意の選択肢を選択
IPv4 CIDR ブロック:10.0.1.0/24
「サブネットの作成」クリック
・インターネットゲートウェイの作成
名前タグ:SG-IG
「インターネットゲートウェイの作成」をクリック
・インターネットゲートウェイをVPCにアタッチ
「アクション」をクリックし、「VPCにアタッチ」をクリック
使用可能なVPC:先ほど作成した「SG-VPC」を選択
「インターネットゲートウェイのアタッチ」をクリック
・ルートテーブルの作成
名前タグ:SG-RT
VPC:作ほど作成した「SG-VPC」を選択
「作成」をクリック
・ルートテーブルへのルートルールの追加
「SG-RT」を選択し、「ルート」タブをクリック
「ルートの編集をクリック
「ルートの追加」をクリック
送信先:0.0.0.0/0
ターゲット:先ほど作成したインターネットゲートウェイ「SG-IG」を選択
「ルートの保存」をクリック
「閉じる」をクリック
ルートテーブル「SG-RT」にルートルールが追加されました。
・ルートテーブルのサブネットへの関連付け
「サブネットの関連付け」タブをクリック
「サブネットの関連付けの編集」をクリック
先ほど作成したサブネット「SG-Subnet」を選択
「保存」をクリック
ルートテーブル「SG-RT」がサブネット「SG-Subnet」に関連付けられました。
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を選択
インスタンスタイプとして、最小要件を満たすm4.xlarge(4vCPU/16GBメモリ)を選択
「次のステップ:インスタンスの詳細の設定」をクリック
ネットワーク:先ほど作成した「SG-VPC」を選択
サブネット:作ほど作成した「SG-Subnet」を選択
自動割り当てパブリックIP:「有効」を選択
その他の項目はデフォルトのまま
「次のステップ:ストレージの追加」をクリック
「新しいボリュームの追加」をクリックしOCI Storage Gateway用のローカルストレージを追加
ボリュームタイプ:EBS
サイズ:600
終了時に削除:チェックをオン
「次のステップ:タグの追加」をクリック
今回は特にタグは追加せず、「次のステップ:セキュリティグループの設定」をクリック
セキュリティグループの割り当て:「新しいセキュリティグループを作成する」を選択
セキュリティグループ名:Security Group for OCI Storage Gateway
説明:任意
デフォルトのルール(ソース 0.0.0.0/0に対してSSHを許可)があることを確認
「確認と作成」をクリック
入力内容を確認し、「起動」をクリック
作成済みの既存のキーペアを選択して「インスタンスの作成」をクリック
インスタンスの作成が開始されました。
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% /dataDockerのインストールのため、リポジトリ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アクセスを許可するためのインバウンドルールを追加します。
「インバウンドルールを編集」をクリックします。
今回はマイIP(自宅のパブリックIPアドレス)からのすべてのトラフィックを許可しました。
ブラウザからOCI Storage Gatewayのコンソールにアクセスします。
https://<インスタンスのパブリックIPアドレス>:443初回アクセス時はパスワードの設定を求められます。
設定したパスワードでOCI Storage Gatewayのコンソールにログインします。
まだファイルシステムが作成されていないので、以下のような画面が表示されます。
「Create a File System」をクリックして、ファイルシステムを作成します。
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」をクリック
ファイルシステムが作成されました。
「Connect」をクリックして、作成したファイルシステムをObject Storageバケットに接続します。
作成したファイルシステム名「dest-oci-bucket」をクリックすると、ファイルシステムの詳細が表示されます。
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.txtOCIコンソールから、バケットdest_oci_bucketの内容を確認します。
/mnt_oに作成したファイルが、Object Storageバケット「dest-oci-bucket」内に作成されていることが確認できました。5. AWS Storage Gateway(ファイルゲートウェイ)の構築
AWSのコンソールで「サービス」から「Storage Gateway」に移動します。
「今すぐ始める」をクリックします。
「ファイルゲートウェイ」を選択し、「次へ」をクリック
「Amazon EC2」をクリックして、隣にある「インスタンスの起動」をクリックします。
「インスタンスを起動」をクリックすると、インスタンス作成のウィザードが別のタブで開きますが、こちらのタブは閉じずにそのままにしておきます。
インスタンスタイプを選択します。
今回はm4.xlargeを選択しました。
※あまり小さなインスタンスを選ぶとメモリ不足でStorage Gatewayが正しく動作しませんでした。
インスタンスタイプを選択したら、「次のステップ:インスタンスの詳細の設定」をクリック
ネットワーク:先ほど作成した「SG-VPC」を選択
サブネット:先ほど作成した「SG-Subnet」を選択
その他はデフォルトのまま
「次のステップ:ストレージの追加」をクリック
「新しいボリュームの追加」をクリック
Storage Gatewayで使用するボリュームを追加します。
「次のステップ:タグの追加」をクリック
「次のステップ:セキュリティグループの設定」をクリック
「ルールの追加」をクリックして、AWS Storage Gateway用のルールを追加します。
タイプ:HTTP ソース:マイIP 備考;For Activation(Storage Gatewayのアクティベーション用)
タイプ:NFS ソース:10.0.1.0/24(SG-SubnetのCIDR) 備考:For NFS(NFS共有用)
「確認と作成」をクリック
設定内容を確認し、「起動」をクリック
キーペアを選択し、「インスタンスの作成」をクリック
インスタンスの作成が開始されます。
インスタンスの概要の画面でパブリックIPv4アドレスを確認します。
Storage Gatewayのウィザードに戻り、「次へ」をクリック
エンドポイントタイプ:「パブリック」を選択
「次へ」をクリック
IPアドレス:先ほど確認したインスタンスのIPv4アドレス
「ゲートウェイに接続」をクリック
ゲートウェイのタイムゾーン :任意のタイムゾーン を選択
ゲートウェイ名:Storage Gateway
「ゲートウェイのアクティブ化」をクリック
「ローカルディスクの準備中」と表示されるので、しばらく待ちます。
ディスク情報が正しく表示されたら、「ログ記録を設定」をクリック
ゲートウェイのヘルスロググループ:「新しいロググループを作成」を選択
「保存して続行」をクリック
AWS Storage Gatewayが作成されました。
「ファイル共有の作成」をクリックします。
amazon S3バケット名:source-aws-bucket(データの移行元となるバケット名)
ファイル共有名:source-aws-bucket(作成するファイル共有の名前)
オブジェクトへのアクセス:ネットワークファイルシステム(NFS)を選択
ゲートウェイ:先ほど作成した「Service Gateway」を選択
その他はデフォルトのまま
「次へ」をクリック
新しいオブジェクトのストレージクラス:「S3 スタンダード」を選択
その他はデフォルトのまま
「次へ」をクリック
入力内容を確認して、「ファイル共有の作成」をクリック
ファイル共有source-aws-bucketが作成されました。
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.txtAWSのコンソールからバケットsource-aws-bucketの内容を確認します。
/mnt_aに作成したファイルが、S3バケット「source-aws-bucket」内に作成されていることが確認できました。7. S3バケットとObject Storageバケット間のファイルコピー
ファイルコピーテスト用のファイルをS3バケットにアップロードします。
「ファイルを追加」をクリックし、適当なファイルを選択してアップロードします。
今回は30個のPDFファイルをアップロードしました。
ファイルをアップロードしたら、キャッシュを更新しておきます。
AWSコンソールの「Storage Gateway」→「ファイル共有」を開きます。
「アクション」から「キャッシュの更新」をクリックし、キャッシュを更新します。
/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」の内容を確認します。
/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ユーザーガイド:ファイルゲートウェイの管理
- 投稿日:2020-11-20T16:25:15+09:00
アップデートで「AWS Network Firewall」という新しいサービスが登場
- 投稿日:2020-11-20T15:55:59+09:00
[TIPS]Amazon S3とは?
Amazon S3とは
AWS(Amazon Web Services)の中のサービスの1つ、Amazon Simple Storage Serviceのことを指します。Sが3つだからS3ですね。
名前の通りクラウド型のストレージ機能を提供するサービスとなります。ただ、単なるストレージとしての機能だけではなく、バージョン管理やイベント機能もあるみたいです。容量は無制限で、1GB使用する毎に料金が加算されていきます。つまりストレージにファイルを入れた分だけ課金されます。
記事執筆時点での料金は1GBあたり0.025ドル(東京リージョン、スタンダードストレージ)となっています。安い。ウェブのどこからでもデータ格納と取得が可能のようです。データは動画や画像ファイルなど殆どのデータを預けることが可能で、ファイルそのものへのセキュリティも担保されています。各地にある物理的なデータセンターに分散して保存をしているので、障害にも強いようです。
他のAWSサービスとの連携も容易にできるので、AWS触ってる人はS3もガンガン使うのだろうと思います。
S3の機能(さらっと確認程度)
バージョン管理
バージョニングを有効にしておくことで、オブジェクト毎のバージョンを残すことができます。誤った操作しても元に戻すことができるsvnみたいな使い方ができそうですね。
ライフサイクル
オブジェクト毎にライフサイクルを設定でき、「一定期間経ったら削除・低価格帯のストレージに移動」ということができるようです。Jenkinsとかで使ったら便利そう。
ログ記録
svnみたいな感じだと思うんですが、ログを残せるみたいです。
イベント
オブジェクトに操作が行われた場合にイベントを発火させる機能があるみたいです。ここで言うイベントは多分データ分析とかですかね。
アクセス権限
デフォルトでは全オブジェクトのアクセス権がプライベートになっており、所有者+管理者以外はアクセスできません。ここに認証したユーザーのみ操作を許可するなど、細かく設定することができます。
暗号化
オブジェクトをS3に保存すると、データを暗号化しておくことができます。 サーバーサイド、クライアントサイド、それぞれの暗号化に対応しているらしいです。
オブジェクトへのアクセスツール
WindowsならWinSCP、MacならCyberDuckが良さそう?
Unityでの活用方法
以下のスライドが参考になりそう
https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-2019aws-for-unity-developersゲーム内写真をアップロードしてサーバー側でサムネイル画像の作成が行われたり。
以下の記事も。
UnityからAmazon S3にファイルをアップロードし、公開状態にする
参考
- 投稿日:2020-11-20T15:03:55+09:00
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
と言われてこけてしまった。なぜ起こったのか?
CodeBuild実行時にECRを操作する権限がアタッチされていなかったから。
解決方法
手順_01
CodeBuild > ビルドプロジェクト > 該当プロジェクトの詳細を表示
からビルドの詳細 > 環境
でサービスロール
を確認サービスロールのリンクから
IAM Management Console
へ行く手順_02
ポリシーのアタッチ
からAmazonEC2ContainerRegistryPowerUser
をアタッチする手順_03
ビルドを再試行して実行できることを確認する
- 投稿日:2020-11-20T14:15:39+09:00
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 ./packagesLayer
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/"なしでできればいいんすけどね
- 投稿日:2020-11-20T11:21:08+09:00
[AWS] グローバルインフラストラクチャとネットワーク①「リージョンとアベイラビリティゾーン」
リージョンとアベイラビリティゾーン
リージョン
AWSがサービスを提供している拠点。
日本では東京リージョン、2021年には大阪リージョンをを立ち上げる予定。
アベイラビリティゾーン(AZ)
物理的、ソフトウェア的に自律しているデータセンター1の集合体。
AZの地理的・電源的独立による信頼性の向上
地理的独立
・落雷や洪水、大雨などの災害によるAZへの局所的な障害に対して別のAZが影響されないように配置されていること。その為AZ間は数十キロ程度離れて配置されている。
・各AZ間は高速なネットワーク回線で接続されているためAZ間のネットワーク遅延(レイテンシー)は2ミリ秒以下で安定している。電源的的独立
・1か所の停電によりAZ内のすべてのデータセンターが一斉にダウンすることがないように設計されている。
AZの地理的・電源的独立により、リージョン全体でみたときにAWSは障害への耐久性が高くなり信頼性が高いといえる。
マルチAZによる可用性の向上
複数のAZを利用してシステムを構築すること。耐障害性を高めシステムの可用性を高める。
通信やコンピューティングの設備を設置して運用することに特化した設備 ↩
- 投稿日:2020-11-20T11:04:57+09:00
AWSの主要なサーバレスサービス 4選!
はじめに
今回はAWSのサーバレスサービスを紹介します!
ここでいうサーバレスは、AWSがサーバーを管理し、利用者側はサーバ管理不要なコンピューティングサービスを指すことにします。
利用者はサーバー管理不要なので、毎週のように来る脆弱性対応やミドルウェアの設定・管理、スケーリングを考えた構成をしなくて済みます。
また、利用者はビジネスロジックに集中でき、使用した分だけ課金されるので、コスパの良いサービスを作ることができます。YouTube動画
動画で確認したい方はこちらをどうぞ
【YouTube動画】 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 CLIやServerlessなどがあり、ローカルで実験してデプロイすることもできます。
既存のフレームワークと同じように書きたい場合もRubyならRSpecが標準で使えるJetsなどがありますし、一度触ってみてはいかがでしょうか?
- 投稿日:2020-11-20T10:12:02+09:00
King Gnuの曲の歌詞でAmazon Comprehendの感情分析機能を試してみる
King Gnuの曲の歌詞でAmazon Comprehendの感情分析機能を試してみました。曲ごとにpositive順に並べています。ちなみに、ポジティブNo.1の三文小説とNo.2のThe holeは曲を聴く限りポジティブなものには聞こえません。
- 投稿日:2020-11-20T08:14:01+09:00
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.778intervalを用いて減算
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_add
、date_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')> 23TRUNC処理
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であることには注意が必要です。
この記事が開発や分析のご助力となれば幸いです。
- 投稿日:2020-11-20T02:14:56+09:00
【AWS】S3 のバケットに HTML ファイルをアップロードしてブラウザから表示する
目標
本記事の目標は S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることです。
図で表すと以下のようになります。【参考】
・静的ウェブサイトホスティング用に S3 バケットを設定する方法
・Amazon S3による静的Webサイトホスティング手順
- バケットの作成
- バケットの設定
- コンテンツのアップロード
- ブラウザからアクセス
1. バケットの作成
画像の赤枠を修正したりクリックしていくだけです。
基本すべてデフォルト設定で作成して、あとから設定を編集していきます。
※ 今回はバケット名を「test-bucket-suguru」に設定しました。適宜変更してください。
バケットの作成は以上です。
2. バケットの設定
以下の 3 つの設定をします。
- パブリックアクセスの設定
- パケットポリシーの設定
- 静的ウェブホスティングの有効化
2-1. パブリックアクセスの設定
「アクセス許可」から設定します。
パブリックアクセスの設定は以上です。
2-2. パケットポリシーの設定
「アクセス許可」から設定します。
設定内容は公式を参考にしてください。
公式を見ると以下のように設定するとのことでした。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<バケット名>/*" ] } ] }パケットポリシーの設定は以上です。
2-3. 静的ウェブホスティングの有効化
「プロパティ」から設定します。
デフォルトページを 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>3-2. アップロード
用意した以下の 3 つのファイルをアップロードします。
- index.html
- error.html
- image01.png
コンテンツのアップロードは以上になります。
4. ブラウザからアクセス
4-1. エンドポイントの確認
赤枠がエンドポイントの URL になります。
4-2. ブラウザからアクセス
確認したエンドポイントの URL をコピーしてブラウザからアクセスします。
デフォルトを index.html と設定したので、アクセスすると index.html が表示されます。
デフォルトページの URL の末尾に/error.html
をつけてアクセスするとエラーページが表示されます。
5. バケットの削除
最後にバケットの中身を空にして、さらにバケットそのものを削除しましょう。
今の状態だとアクセスが大量にきてしまうと無料枠を突破してしまう可能性があります。まとめ
目標であった S3 のバケットに HTML ファイルをアップロードしてそれをブラウザから表示してみることが達成できました。
- 投稿日:2020-11-20T00:02:29+09:00
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.専門用語を覚える
専門用語についてまったく知らないと、問題の要件を理解できないので覚える必要があります。
ちなみに、私にとってあまり馴染みがなかったのが以下でした。
移行戦略
DR
- パイロットライト
- RTO(目標復旧時間),RPO(目標復旧時点)
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/17a2a7355497565b0478AWS 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/013cfac2a85548766601CodeDeployによる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