- 0.1. 文系未経験から2か月ほどでAWS認定ソリューションアーキテクトを取得したときの勉強法
- 0.2. AWS データベースサービス RDSについて
- 0.3. AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜
- 0.4. AWS関係の Workshop・ハンズオンの羅列
- 0.5. ALB使用時、ApacheのアクセスログにクライアントIPを記録する
- 0.6. AWS Lambdaでデフォルトでは用意されていないコマンドを呼ぶ
- 0.7. S3 + CloudFront + Route 53 の構成を CloudFormation にインポートする
- 0.8. Node.js製Lambdaの速度劣化箇所をX-RAYを使って特定する
- 0.9. Serverless Framework で AWS Lambda と API Gateway をデプロイする
- 0.10. 疑似的にNATゲートウェイを停止・起動する
- 0.11. AWS 認定ソリューションアーキテクトに合格した
- 0.12. CloudWatchでのEC2空き容量アラートがめんどくさい
- 0.13. CloudFormationでVPCNetworkを作る
- 0.14. AWS Session Managerでinstance idをいちいち調べるのがだるい
- 0.15. SageMakerで作成したExperimentsを消す
- 0.16. AWS キャッシュ活用 ElastiCache
- 0.17. で指定したファイルをAxiosを使ってS3の署名付きURLへファイルをアップロードする
- 0.18. iPadからEC2にSSH接続してみた
- 0.19. AWSのSSH接続で少しつまづいた所 .pemファイルあたり
- 1. 1.「.pem」の拡張子ファイルの扱い
文系未経験から2か月ほどでAWS認定ソリューションアーキテクトを取得したときの勉強法
#はじめに
クラウドに興味を持ったため、一つの目標としてAWSの資格を取得しようと思い勉強しました。
勉強期間としては、だいたい去年の4月~6月くらいです。
自分用の備忘録と資格取得に少しでも役に立てればと思いまとめておこうと思いました。※試験内容について、3月23日から変更があるそうです。そちらの点はご注意ください。
#資格取得を思い立ったときの知識
– パソコンには触れていましたが(ゲームなど)、IT知識はほぼゼロ
– AWSに関する知識ももちろんなし
– クラウドに関してはiCloudなどで聞いたことはあった#試験について
勉強法の前に軽く試験について記載しておきます。
試験ガイド、サンプル問題、試験の時間などについては以下のサイトにあります。
[AWS 認定ソリューションアーキテクト – アソシエイト](https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/)受験料金は15.000円+税と決して安くはないので、
しっかりと対策して1回で取得できるようにしま
AWS データベースサービス RDSについて
#AWSのデータベース
大きく分けて2つあります。
**RDB(リレーショナルデータベース)**と**Nosql**に分ける事ができる。#RDS
様々なデータベースソフトウェアに対応したフルマネージドなリレーショナルデータベース
#AWSのデータベース構築
EC2インスタンスの中で構築する、専用DBサービスを利用するかの2種類
AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜## 概要
– [AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜](https://qiita.com/ozaki25/items/883aec0ab4398aa4abbe)の続編です
– 今回はLambdaからDynamoDBにアクセスしてデータを保存したり取得したりしてみます
– テーブルから全件取得、1件取得、1件登録の3つの関数を作成します## DynamoDBとは
– AWSが提供するマネージドなデータベースサービスです
– RDBとは異なりkey-value形式なドキュメントデータベースです## LambdaからDynamoDBにアクセスしてみる
### DynamoDBの設定
– まずはDynamoDBを使うためにServerlesFrameworkの設定をします
#### DynamoDBのテーブル定義の設定
– DynamoDBはデータベースなのでテーブルの作成からはじめます
– これまでと同じようにこれもServerlessFrameworkの機能で行うことができます
– 今回はHelloテーブルを作ってみます
–
AWS関係の Workshop・ハンズオンの羅列
雑ですが、いつでもできるWorkshopやハンズオンを羅列してみた
網羅してるわけではないので、他にもたくさんあると思います# AWS ハンズオン資料
https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-onAWS Hands-on for Beginners 〜スケーラブルウェブサイト構築編〜
AWS Hands-on for Beginners 〜Serverless 編〜
AWS Hands-on 〜Amazon Personalize/Forecast〜# 独立したページがあるもの
|Name|URL|
| :— | :— |
|AWS Well-Architected Security Labs|https://wellarchitectedlabs.com/Security/|
|Security Workshops(en)|https://awssecworkshops.com/|
|Security Workshops(jp)|https://awssecworks
ALB使用時、ApacheのアクセスログにクライアントIPを記録する
# ALB使用時、ApacheのアクセスログにクライアントIPを記録する
EC2(Apache)の前段に、ALBを配置する構成はよくあると思いますが、
デフォルトの状態だと、ApacheのAccessログに、ALBのローカルIPが記述されてしまいます。
本来のアクセス元の情報を、Accessログに記録する場合のApache設定方法を記載します。# 設定方法(Apache)
httpd.conf のログ出力設定を変更します。
ログフォーマット設定に「”%{X-Forwarded-For}i」を追記することで、
本来のアクセス元のIP(ClientIP)を記録させることが出来ます。“`
httpd.conf (Befor)
LogFormat “%h %l %u %t \”%r\” %>s %b %D \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common“`
“`
h
AWS Lambdaでデフォルトでは用意されていないコマンドを呼ぶ
# やったこと
AWS LambdaでPythonからgsコマンドを呼んでPDFを結合しました。
# 経緯
業務でPDFの結合を行う必要があって、PythonのPyPDF2を使って結合をする実装になっていました。
しかし、このPyPDF2さんはPDFのファイル構造がPDFのbasicなファイル構造(つまりheaderがあって、bodyがあって、Cross-reference Tableがあって、Trailerがあるみたいなもの)を前提としていて、Cross-reference TableがないとかTrailerがないPDFファイルを結合しようとするとエラーになってしまっていました。
つか、PDFのファイル構造が多少おかしくなってても表示できるようになってるほうがおかしいだろ、やめてくれ
って思ったりもしましたが、ブラウザで表示できてるのに、結合できないのはなんとかしたいということで、なんとかすることに。。。# 環境
AWS Lambda Python3.7# 解決
「ghostscriptをPythonから呼び出すのはどうですか?手元ではいけましたよ」
と聞いたのでさっそ
S3 + CloudFront + Route 53 の構成を CloudFormation にインポートする
**S3 + CloudFront + Route 53の構成**で静的ウェブサイトの配信を行っている。
レポジトリには静的ファイルだけを置いて、AWSリソースはだいぶ昔に手作業で構築したものが動き続けている。以下の記事などにおいてこの構成に太鼓判が押されているとおり、事実として非常に安定して稼働してくれている。
[ AWSにおける静的コンテンツ配信パターンカタログ(アンチパターン含む) | Developers.IO ](https://dev.classmethod.jp/cloud/aws/static-contents-delivery-patterns/)
しかし久しぶりに触ろうとしてみると、おおよその見取り図は頭に入っているとはいえ、細かい設定についてかなりうろ覚えになっている。動いているのだから問題はないはずなのだが、わからないのに動き続けているというのはどうも気持ちが悪い。
とはいえいくら頭で覚えようとしてもどうせ数ヶ月後には忘れているだろうし、それならばいったん手を動かして書き起こしてしまおうと、**既存の S3 + CloudFront + Route 53
Node.js製Lambdaの速度劣化箇所をX-RAYを使って特定する
# はじめに
「[お気に入りのテレビ番組の有無を答えてくれるAlexaスキルを作ってみた](https://qiita.com/masaminh/items/1153f34891b1c04b4ee1)」でNode.js製のLambdaを作ったのですが、
>ただ、スキルを呼び出した後、返答が返ってくるまで少しタイムラグがあるのが気になりますね
…
>いずれにしてもX-RAYを仕掛けて、番組表取得で遅くなっているのか、その後の処理で遅くなっているのかなどを見極めたいと思っています。ということで、X-RAYを使って、速度が遅くなっている箇所を特定したいと思います。
# コンソールからの設定
まず最初にコードには手を入れず、LambdaのコンソールからX-RAYの設定をしてみます。
Lambdaのコンソールにて、対象関数の「AWS X-RAY」の箇所のチェックボックスをONにします。
Serverless Framework で AWS Lambda と API Gateway をデプロイする[Serverless Meetup Tokyo #16 (オンライン開催)](https://serverless.connpass.com/event/165352/) を拝見していて、ちょうど今、AWS への各種リソースのデプロイの自動化が課題だったので、よい機会と思い Serverless Framework を使ってみた。
尚、Serlverless Framwork については知っていたが、offline-start しか使ったことがなかった程度の人間です。## やったこと
弊社では Webシステムを、
* フロントエンド: SPA(Angular)
* バックエンド:
* REST っぽいAPI: Lambda + API Gateway
* DB: PostgreSQL 他で組むことが増えてきていて、プロジェクトの取っ掛かり時の環境構築を手動でやっているのがダルくなってきた。
今回は、「REST っぽいAPI: Lambda + API Gateway」のところを Serverless Framework で自動化してみた。## 手順
疑似的にNATゲートウェイを停止・起動する
# VS 使ってないNATゲートウェイの課金
NATゲートウェイは思いのほか使用料金が高く、夜間の開発環境など使用していない時は止めたい。
ただ現在において停止機能は存在しておらず、停止イコール削除となる。
停止という点ではNATインスタンスを立てて停止すれば良い話だが、それでは単純に面倒。せっかくのマネージドサービスは使いたい。
ならば、使用していないときにNATゲートウェイを削除し、使いたいときに必要な情報をもって再作成するスクリプトを作成すればいい。# やりたいことを図にしてみる
![gomi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558188/0b0f391e-afea-597b-dd03-da856764aea1.png)
UMLの書き方は正式に勉強していないので許してほしい。# 停止(削除)スクリプト
“`Python
import boto3client = boto3.client(‘ec2’)
natGateWayList = []
routeTableL
AWS 認定ソリューションアーキテクトに合格した
# 受験動機
– ありがちですがAWS summitに参加した時に「有資格者ラウンジ」というスペースがあるのを知って、資格取得すればあそこに入ってドヤ顔出来る!と思った
– 転職後自社サービス基盤としてAWSをそれなりに触っているので、以前よりはAWSサービスに対して知識が増えている事と、サービス連携での視野を広げておきたかった
– エンジニア的なキャリアプランとして、今後状況がどう転んでも資格取得は有利になると思った
– 年収アップの裏付けになるといいな([稼げるIT資格はどれ?](https://itjinzai-lab.jp/article/detail/1553))# 使用した教材について(個人レビュー風)
1. 合格対策 AWS認定ソリューションアーキテクト – アソシエイト
– 昔MSP会社に在籍してた時(2016)に購入。旧試験をターゲットとしているので扱っているサービスもやや少なく、サンプル問題の内容も易しめ。AWS入門用としてならいいかも
2. 徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書
– クラウドプラクティシ
CloudWatchでのEC2空き容量アラートがめんどくさい
#序章
空き容量をCloudWatchに通知・アラート設定する方法は世に出回っているけど、これインスタンス変えたらメトリックスも変わっちゃうからインスタンスが変わるたびにアラート設定が消える?(**気がする。**)#ということで今回は、お手製のシェルスクリプトでディスク使用率が大きくなったらSNS経由でメールを送って優勝していくことにするわね。
とっくん26歳風#シェルのコード
EC2のどこかにシェルを潜影蛇手!“`bash
#!/bin/sh
threshold=95 #アラートを出す使用率閾値(パーセント)
sns_topic_arn=”arn:aws:sns:*****************” #SNSトピックARN
avail=`df -h|egrep ‘/$’|sed -e ‘s/[ \t][ \t]*/ /g’ |cut -d ‘ ‘ -f 5|sed -e ‘s/%//g’|bc` #ルートデバイスのディスク使用率の数字の部分だけ数値として取得#使用率
CloudFormationでVPCNetworkを作る
# この記事
以前、VPC作ってEC2にひとまずWebサーバ用意するまで、という記事を書きましたが
https://qiita.com/shinon_uk/items/04e86115c7dd96018ec1こういった基本的なVPC+PublicSubnet+Routetable…のセットをCFnで作るものを
ずっと記事連携させたかったので書きます。対象は、いつもマネジメントコンソールで個別に構築してるけど
AWSのDevOpsとかインフラ自動化とか、手を伸ばしてみようかなーという方になると思います。
コードを短くしたいので、EC2+SecuriyGroupは別回にして、構築作業はGUIから行います。#やること
今回は「あとはEC2を立てるだけ」の状態にしたいので
以下最低限のリソースをCloudFormationで作成します。・VPC
・Subnet(Public + Private)
・RouteTable(Route含む)
・InternetGateway#知る
###CloudFormationとは
どんなAWSサービスでも、大体Blackbel
AWS Session Managerでinstance idをいちいち調べるのがだるい
aws ssm start-session は大変に便利なんだけど instance idをいちいち調べるのがだるい
サーバの名前からpecoで選んで繋げるようにする“`bash
#!/bin/bash# 必要なら aws ec2 commandでリストアップする 基本重いからベタ書き
target_server_name=$(peco –prompt “Select server to start-session >” << EOS server-a server-b server-c EOS ) if [ -z "${target_server_name}" ]; then exit fi instance_id=$(aws ec2 describe-instances --filter "Name=tag:Name,Values=${target_server_name}" --query "Reservations[].Instances[?State.Name == 'running'].InstanceId[]" --output text) aws
SageMakerで作成したExperimentsを消す
# はじめに
AWSのSagemakerが公開されてからExperimentsを作成したり、
Autopilotを試してみたりしているのではないでしょうか。ただ、色々試してみてゴミのExperimentsが徐々に溜まってきたのではないでしょうか?
そろそろ使わなくなったExperimentsを消そう!私はそう思った訳です。# Studioからは消せない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226827/d4cdca86-a7a7-c7ef-acea-e4e84e361f2f.png)
GUIで消せれば良いのにどうやら消す方法はなさそうです。(2020/3/4現在)
# APIで消す
色々調べてたらAPIを使えば消せそうです。
以下を実行!“`Python
import boto3EXPERIMENT_NAME = ‘
‘ client = boto3.client(‘sagemaker’)
client.delete_ex
AWS キャッシュ活用 ElastiCache
#ElastiCacheとは
AWSが提供するインメモリー型データベースサービス。
ElastiCacheはAZサービスでVPCのサブネットグループに配置する。
ElastiCacheのユースケースとしては、RDSへのクエリ結果をキャッシングしてRDSへのアクセス負荷を軽減することにより、DBの読み書きの性能向上させる。
##キャッシュ とは
一度利用したデータなどを、その後また使う場合に高速にアクセスできるような形で保存しておくこと。Webブラウザは、一度閲覧したページやそのページで使われている画像をキャッシュとしてハードディスクに保存している。同じページをあとから見る場合や、一度表示した画像やCSSファイル、JavaScriptファイルが他のページでも使われている場合には、改めてサーバーと通信してデータを取得するのではなく、ハードディスクから読み込むことで、表示を高速化している。
###インメモリキャッシュ?
「インメモリ・キャッシュ」とは**メモリ**を活用して高速にキャッシュへのアクセスを可能にしたデータベースの仕組みで指定したファイルをAxiosを使ってS3の署名付きURLへファイルをアップロードする
## 概要
``で指定したファイルをAxiosを使ってS3の署名付きURLへファイルをアップロードする。
## 実装
“`javascript
var a = $(‘input[type=”file”]’)
var reader = new FileReader()
reader.readAsArrayBuffer(a.files[0])// アップロード用の署名付きURL
var url = ‘https://test-pre-signed-url-bucket.s3.amazonaws.com/put/update?…略…’
axios({
method: ‘PUT’,
url: url,
headers: {
‘Content-Type’: ‘image/*’, // アップロードしたいファイルに合わせる
},
data: reader.result // reader.readAsArrayBuffer(a.files[0]) した結果が取得できる
})
iPadからEC2にSSH接続してみた
![IMG_3521.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456939/1428ded8-fdc1-9b98-f3fe-9ef7cf820b70.jpeg)
初投稿です!!!
iPadからSSH接続出来ると聞いて、とりあえずやってみるかーってノリで挑戦したら出来て
可能性を感じたので、書いていきたいと思います。
使ったのはAmazonLightsailですがEC2と大差ないので目をつぶってください(
# 使用したもの
iPadPro(2018)
Textastic Code Editor 9
# 詰まった部分
AWSのSSH接続で少しつまづいた所 .pemファイルあたり現在、ポートフォリオにAWSを導入するため『Amazon Web Services 基礎からのネットワー&サーバー構築』で勉強中。その3章で少しつまづいた所の記録。
詳細
EC2でインスタンス作成後、MacのターミナルからSSHを使いインターネット側からインスタンスに接続する。
__つまずきポイント__
1. 「.pem」の拡張子ファイルの扱い。
2. キーペアファイルが見つからない状態1.「.pem」の拡張子ファイルの扱い
躓くまでの流れ
1. インスタンス作成時に「.pem」と言う拡張子を持つキーペアファイルをダウンロード。
2. ダウンロードしたので、とりあえず開いてみようとする。すると画像1が表示される。
3. 躍起になって開こうと調べる。うまく見つからない。
4. 落ち着いて、教科書見直す。すると、そもそもそんな必要がなかった。結論
キーペアファイルは後の、SSHでの接続に必要なファイルであり、現状開く必要はない。備考
__pemファイルって何?__
調べて
AWS S3概要
## S3とは
– Simple Storage Serviceを略してS3と呼ぶ
– 容量が無制限なFTPサーバーのようなイメージ## 機能
– バージョニング:オブジェクトごとに世代管理してくれる
– ログ記録:オブジェクトに対するログを残す
– 静的Webサイトホスティング:S3をWebサーバーのように使い、静的なサイトを公開することができる
– イベント:オブジェクトの操作をトリガーに、様々な処理を行うことができる
– アクセス権限:認証されたユーザーのみ操作を許可するなど、細かくアクセス権限を設定できる
– 暗号化:オブジェクトを暗号化しておける## 使い方
– バケットを作成する
– バケット名は、Amazon S3 内の既存バケット名の中で一意である必要がある
– バケットの制約:https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
– オプションの設定
– バージョニング:https://qiita.com/kooohei/items/87