AWS関連のことを調べてみた2020年09月12日

AWS関連のことを調べてみた2020年09月12日
目次

LambdaとAmazon ConnectでRDS障害時のSlack通知と電話連絡を行う

# 概要
* RDSで障害が起きた時にSlackに通知すると同時に電話も掛けて欲しかったのでLambdaとConnectを使って実装しました。
* 単純に電話を掛けるだけではなく、複数人に電話をして1人目が対応可能だったら他の人には電話せずということも実現したかったのでそれも実装しました。
* 実際に実装してみて気になる細かい点(後述)はありますが、それは徐々に改善していこうと思っています。

# 処理の流れ
* RDSのイベントでトリガー
* SNSが受け取ってSlack通知用Lambda(Lambda1)と電話連絡用Lambda(Lambda2)を呼び出す
* Slack通知用LambdaはRDSイベントの内容(どのRDSでどんな障害なのか)をSlackに通知
* 電話連絡用LambdaはConnectを呼び出して電話を掛ける
* 誰が対応可能なのか判定も行ってSlackへ通知

![rds-event-flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868

元記事を表示

これまで書いてきた記事を整理した

記事の本数が50本を超えたので、これまで書いてきた記事をカテゴライズして整理した。
1つの記事が複数のカテゴリに入るので、同じ記事が2度登場したりするが、気にしないでいただきたい。

# AWSサービス系
## ECS
– [AWSのアカウント作った直後の状態からECS+FargateでTomcatのDockerコンテナを起動する](https://qiita.com/neruneruo/items/82c9daf90d5782f150d2)
– [AWSでSpringBootベースのWebアプリを起動してみる(Docker on EC2編/ECS+Fargate編)](https://qiita.com/neruneruo/items/ff6747a4129a5b52e6c6)
– [CloudFormationテンプレートを1からしっかり理解しながらECS on Fargateなアプリを自動構築する(前編)](https://qiita.com/neruneruo/items/06b073f3846803f415e5)
– [CloudFormationテンプレートを1からしっかり

元記事を表示

AWSクラウドプラクティショナーに合格したのでやって良かったこと&本番トラブルを振り返ってみる

先日オンライン自宅受験でAWSクラウドプラクティショナーに合格しました。直前1週間はかなり焦って無我夢中で対策していたので、一旦落ち着いて振り返ってみたいと思います。
だらだらと書いていますが、受験を考えている方のご参考になれば幸いです。
ちなみに結果は895/1000で、合格ラインの700点と比べると比較的余裕がありました。

経歴

  • AWSはEC2やVPC、S3などほんの少しだけ触っていました。業務での利用はなし。
  • 基本情報技術者(FE)だけ取得済み
  • 仕事の一環でクラウド全般やAWSの基礎講座を何回か受けていました。

勉強時間

30~40時間程度。試験のために本腰を入れたのは約1週間前からで、おそらく20時間くらい。
試験関係なく、AWSの勉強自体を始めていたのは2か月前くらいだったと思います。

やったこと(◎必須、〇やってよかった、△プラスアルファ)

◎ 公式の試験ガイドを確認する
◎ 公式のサンプル問題(10問)
◎ 各サービスの紹介ページをみて概要を確認する

元記事を表示

AWS AmplifyでS3のBucket名を取得する [メモ]

## はじめに
基本は自分のための備忘録だが、誰かの参考になれば幸い。
なお、クイックハックです。正式なやり方ではないと思うのでご注意を。

## 動機
AWSのAmplifyを使ってモバイルアプリを作ることになったが、使いやすい半面、小回りがきかなそうで困ってる。

### すごいざっくりのAmplify概要
Amplifyは、CLIから簡単にバックエンドを構築できて、そのバックエンドへのアクセス方法をライブラリが隠蔽するので、開発者はその詳細を知らなくてもアクセス出来るというところがメリット。

また、Dev -> Prodの2Stageで開発するときに、アプリで使うバックエンドを下記のコマンドでDev用、Prod用に切り替えることが出来る。当然、開発者はバックエンドの詳細を知らなくてもよい。

“`
$ amplify env checkout
“`

### 困ってること
詳細が隠蔽されているので、バックエンドのリソース名が取れない(ようにみえる)。
例えば、バケット名を表示したいと思っても、のバケット名を取得する方法がない(ようにみえる)。

~~具体的に

元記事を表示

AWS EC2 AmazonLinux2に導入したMailCatcherでLaravelのメールの受け取りを行う

# 目的

– AWS EC2 AmazonLinux2インスタンスに導入したMailCatcherにてLaravelから送られてきたメールを受け取る方法をまとめる

# 前提条件

– AWS EC2 AmazonLinux2インスタンスにLaravelの動作環境が構築されていること。

# 前提情報

– 下記の方法で構築したLaravel環境にMailCatcherを導入し作業を行う。
– [AWS EC2 AmazonLinux2だけでLaravelのアプリをデプロイする](https://qiita.com/miriwo/items/b39d1ac6289c54cc2cfd)

# 読後感

– AWSのインスタンス内に構築したLaravelアプリから送信されたメールを同じインスタンス内に導入されたMailCatcherで受け取ることができる。

# 概要

1. MailCatcherの導入
1. .envファイルの記載
1. 確認

# 詳細

1. MailCatcherの導入
1. 下記の方法でAWS EC2 AmazonLinux2にMailCatc

元記事を表示

AWS日記18 (Step Functions)

# はじめに
今回は AWS Step Functions を試します。
画像を自動的に変換・サイズ変更するページを作成します。
[Lambda関数・SAMテンプレート]
(https://github.com/tanaka-takurou/serverless-application-step-functions-page-go)

# 準備
[AWS SAM の準備をします](https://qiita.com/tanaka_takurou/items/cae7c19fc3aaf0031abb)

[AWS SAMの資料]
[AWS Step Functions](https://aws.amazon.com/jp/step-functions/)
[Create a Step Functions State Machine Using AWS SAM](https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/tutorial-state-machine-using-sam.html)

# AWS SAM テンプレ

元記事を表示

Amazon API GatewayでサクッとCORS対応する

# はじめに
Amazon API GatewayとS3の静的Webサイトホスティングを組み合わせると、サーバレスで何でもできるようになるのだけど、当然のことながらオリジンが変わってしまうので、CORSの設定が必要。
マネコンからは一発でCORSの設定を入れることができるものの、IaCと組み合わせてると、マネコンからの変更は色々と不都合があるので、ここはTerraform一撃でCORSの設定を入れられるようにしてしまおう。

CORSって何?という人は[クラメソ先生](https://dev.classmethod.jp/articles/about-cors/)に教えてもらおう!

# 簡単なリクエスト編(GETメソッド)
GETについては、レスポンスのheadersでCORSを許容することを示せば良い。

具体的には、“`Access-Control-Allow-Headers“`、“`Access-Control-Allow-Origin“`、“`Access-Control-Allow-Methods“`を返す。

以下はPython+API Gatewayの統合レ

元記事を表示

AWSを使ってアプリケーションを公開する手順(6)Nginxを導入する

#はじめに
AWSを使ってアプリケーションを公開する手順を記載していく。
この記事ではWebサーバであるNginxを導入する。

#Nginxをインストールする
##Nginxとは
NginxとはWebサーバの一種である。
ユーザのリクエストに対して静的なコンテンツの取り出し処理を行い、動的なコンテンツの生成をアプリケーションサーバに依頼する。

##「.ssh」ディレクトリに移動する
以下のコマンドを実行し、「.ssh」ディレクトリに移動する。

“`
cd ~/.ssh/
“`

##ssh接続
以下のコマンドを実行し、EC2インスタンスにsshでアクセスする。
(ダウンロードしたpemファイル名が「xxx.pem」、ElasticIPが123.456.789の場合)

“`
ssh -i xxx.pem ec2-user@123.456.789
“`

##Nginxのインストール
以下のコマンドを実行し、Nginxをインストールする。

“`
sudo yum -y install nginx
“`

#Nginxの設定ファイルを編集する
以下のコマンドを実行しvi

元記事を表示

《コロナに負けず!!》29歳で営業職からジョブチェンジ。未経験で受託開発企業から内定を頂けました。

## はじめに
昨年「エンジニアになるぞ!」と決意をし、
今年の3月に前職を退職(最終出社)、
3月下旬からプログラミングスクールに通いました。

現在、29歳(今年で30歳!)です。
新卒からずっと営業職で、プログラミングは未経験。

そんな自分でも、webエンジニアのスタートラインに
立つ事が出来ました。

自分なりに戦略を立てて行った就活でもありましたので、
就職活動中の方の参考にして頂ければ幸いです。

## 目次
・工夫して就活を行おうとした背景
・就活の結果
・学習開始〜内定までの流れ
・今回の転職活動でのポイント
・ポートフォリオについてのポイント
・学習方法について(おまけ)
・最後に

## 工夫して就活を行おうとした背景
(興味ない方は読み飛ばして下さい!笑)

スクールに入った時点の私は転職に関しての認識が甘く、

「高い金額のスクールで基礎をしっかり学べば、転職はできるはず!」
「スクールからも紹介があるし!」
などと、このくらいの認識でした。

ですが、この認識は間違いです!!!

少なくとも、20代前半の若い方でない限りは
エージェントからの紹介案件はごく

元記事を表示

LambdaでDynamoDBに複数レコードの書き込みをする(Python、JavaScript)

## はじめに
DynamoDBに複数レコードを書き込み(更新)する必要があったので、実装してみた結果と注意的なものを書き留めたいと思い記事を投稿した
またPythonとNode.jsの両方での実装を載せようと思います

## 前提
### テーブル
今回書き込みをするテーブルは以下を想定
テーブル名:Users
カラムと型(スキーマ自体に型はありませんが、登録するデータの型として便宜上決めておきます)は以下の通り

– id(primary key):Number
– name:String
– address:String
– friends: List[Map]

friendはid, name, addressのキーを持つMapの一覧を想定
今回は複雑めな型(Userテーブルのfriendのような型)であっても、書き込みができることも示しておきたいことの一つなので、そもそもテーブルの設計がベストであるかは一旦無視でいきます

### Lambdaの準備
今回はLambda上で動くコードを掲載するので、Lambdaは各自で準備ができていることを前提とします

### 記事の流

元記事を表示

【AWS SAA】プライベートサブネットとパブリックサブネットの使い分け 

#はじめに

下記URLのようなプライベートサブネットとパブリックサブネットの使い分けに関する問題が、AWS SAAでよく出題されます。
https://awsjp.com/exam/saa-sap/c/exam95.html

しかし初心者だとサーバーの違いや構成を知らないため、そもそもの問題文の意味の理解もできないのではないかと思います。今回はWebの2層構造を通じて、プライベートサブネットとパブリックサブネットの使い分けを説明したいと思います。 

#イメージ
[[AWS]WordPressの構築方法](https://qiita.com/kono-hiroki/items/e8ec3efe76bea53402a8)や[【AWS】WordPressを作った時の備忘録](https://qiita.com/blackpeach7/items/be28e2249f308bac7592)のようにWordPressを作成すると、パブリックサブネット内にあるWEBサーバーとプライベートサブネット内のDBサーバーの流れや構成がわかって良いのではないかと思います。
もし時間があれば、実際に作っ

元記事を表示

【AWS x Java】DynamoDB StreamsをKinesis Client Library (KCL) で処理する

# はじめに
実案件でDynamoDB StreamsをKinesis Client Library (以下KCL) で処理する機会がありましたので、KCLが実際にどういう挙動をするのか、それを踏まえてどのような実装にしたのか紹介したいと思います。

![3c1c3976-0a28-5cb8-3eab-b1ec4ac37f5c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555899/ed41f64b-0e36-118b-0af9-cdbe54f05325.png)

## 今回やりたかったこと
[BookLive!](https://booklive.jp/)のある機能ではDynamoDBを使用しています。
このDynamoDBのデータを、データ追加後できるだけ早いタイミングでRedshiftに転送する必要が出てきました。
現状のテーブル形式を踏まえ様々な検討をした結果、DynamoDB Streamsを設定し、追加されていくデータをいわゆるストリームとして扱うことでRedshiftに持っていくこ

元記事を表示

AWSLambdaでPyTorch【EFS編】

#はじめに
本記事はAWSのLambda上でPyTorchを動かして見ようという試みについてのまとめです。DeepLearningタグをつけていますが、学習については触れません。ゴールはLambda上で何かしらの推論を動かしてみるというところまでです。

# ざっくりまとめ
1. EFS使ってみる
2. LambdaでPyTorch
3. slackからも呼ぶ

の三本立てです。

# 背景
AWS Lambdaは非常に構築が楽で便利なのですが、[様々な制限](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html)があります。機械学習をするときにとくに問題になりそうなのが、デプロイパッケージサイズと`/tmp`領域サイズです。

“`sh:デプロイパッケージサイズと/tmp領域サイズ
デプロイパッケージサイズ
50 MB (zip 圧縮済み、直接アップロード)
250 MB (解凍、レイヤーを含む)
3 MB (コンソールエディタ)

/tmp ディレクトリのストレージ
512 M

元記事を表示

開発環境でゆるふわにec2 spotインスタンスを使ってコストを下げよう

## 目次

* 対象読者
* 現在のspotインスタンスの仕様
* 実際のオペレーション
* 稼働率、実際の適用効果

## 対象読者

* クリティカルではない開発環境(~数人利用、落ちても許される環境)のユーザ
* 開発環境のコスト管理責任者
* 部下にawsのコストの使い方が妥当か詰めたい管理者

## 現在のspotインスタンスの仕様

過去のspotインスタンスの仕様は、下記のようなもので使用者を非常に選ぶものでした。

* AWS都合、自己都合でも停止すると再開不能
* DISKを残しておくことは可能だが、DISKの状態を引き継ぎたい場合はAMIを作ってVM作り直し、、
* CI/CD等で自動構成されるようにしておかないと使いかってが悪い

しかし、現在のspotインスタンスの仕様は、通常のec2にかなり近いものになっています。

* spotインスタンスを通常のオンデマンドインスタンスと同じように停止、再開が可能
* 当然、DISKの状態は引き継がれる

よって、**spotインスタンスを時々aws都合で落ちる可能性があるだけのインスタンス*

元記事を表示

Exmentでメール送信の設定をする(Amazon SESがおすすめだよ)

[Exmentをインストール](https://exment.net/docs/#/ja/quickstart)したら、早めにやっておきたい設定があります。

それは、**メールの送信設定**。

Exmentには、レコードを追加したら通知をメールで飛ばす、というようなメール通知の仕組みがあります。ま、そのためにも必要ですが、そもそも**メールが送信できないと、パスワード忘れた時に、再発行メールを飛ばせない→詰む**ということになります。

ですので、できるだけ早めに設定しておいたほうが良いです。

## Exmentのメール送信設定箇所

デフォルトでは、左カラムのメニューから、「管理者設定→システム設定」で開いた画面の右上「システム設定」ボタンをクリックし、開いたモーダルの中にある「詳細設定」をクリックします。開いた画面の下のほうに、「システムメール設定」があります。

![2020-09-11_10h20_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/3c78a518-cce2

元記事を表示

AWS CloudFormationのテンプレートの雛形

# 主なセクションの構成
“`
AWSTemplateFormatVersion: “2010-09-09”
# Description: Akane’s template

# Parameters:

# Mappings:

Resources:

# Outputs:
“`
# AWSTemplateFormatVersion(必須)
形式バージョン: 2010-09-09
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/format-version-structure.html

# Description(オプション)
テンプレートの説明を記述する

##### yamlテンプレート
“`
Parameters:
パラメータ名:
Description: 説明
Type: String
“`

##### !Refで値を参照する
“`
!Ref パラメータ名
“`

##### jsonファイル
“`
{
“Parameters”:[
{

元記事を表示

Mysql2::Error::ConnectionError: Access denied for user ‘root’@’localhost’ (using password: YES)

# やろうとしていること
ローカル環境で作ったポートフォリオ(個人アプリ)をAWSにデプロイしようとしているところです。
本番環境でデータベースを作ろうとしたのですが、エラーが出てしまいました。

# エラー文
“`
[user@ip-00-0-0-000 pfc-master]$ rake db:create RAILS_ENV=production
Access denied for user ‘root’@’localhost’ (using password: NO)
Couldn’t create ‘pfc-master_production’ database. Please check your configuration.
rake aborted!
Mysql2::Error::ConnectionError: Access denied for user ‘root’@’localhost’ (using password: NO)

Tasks: TOP => db:create
(See full trace by running task with –tr

元記事を表示

Amazon EKS ExternalDNSでサービスを公開する

# はじめに
本記事はAmazon EKSでExternalDNSのデプロイを行ない、サービスを公開する方法について記載しています。

Amazon EKSでクラスターを作成し、ドメインを取得してアプリケーションを外部に公開するためには、ドメインとAmazon EKSを紐付ける作業が必要になります。

ExternalDNSを用いてデプロイすることで動的にServiceとドメインの紐付けができます。また、サブドメインの管理も柔軟に行うことができます。

## ExternalDNSの構築
ExternalDNSを使用するためにはドメインの取得が必要です。

ドメインはお名前.comなどのドメイン登録サービスか、Amazon Web Services(AWS)のRoute53で取得します。なお、お名前.com等外部のドメイン登録サービスを利用する場合は、Route53で管理するためネームサーバの設定が必要になります。

本記事ではお名前.comで取得したドメインを、Route53で管理する場合を例に解説します。

### Route53
はじめにAWSコンソール画面からRoute53を選

元記事を表示

CloudFormationをゼロから勉強する。(その4:コマンドからの操作)

# はじめに
以前の記事で何度か紹介してきた`Black Belt Online Seminar`の記事ですが、2020年度版が公開されたようです。

– [AWS Black Belt Online Seminar AWS CloudFormation アップデート](https://www.slideshare.net/AmazonWebServicesJapan/20200826-aws-black-belt-online-seminar-aws-cloudformation)

前回からのアップデートの内容や、新たなツールの紹介もされているので、色々と参考になります。

さて、前回はGUI画面上から値を入出力させましたが、今回は今までGUIで行ってきたスタックの作成&削除をコマンドで操作してみようと思います。

– 【前】[CloudFormationをゼロから勉強する。(その3:パラメータの入出力)](https://qiita.com/sakai00kou/items/fc34771fa3e150979ac8)

# CloudFormationコマンド
普段使いそうなコマ

元記事を表示

【Tips】TerraformでDynamoDBにそこそこの量のアイテムを初期構築でputしておく方法

# はじめに
DynamoDBとLambdaで色々試してると、ふと検証のために大量データを予め入れておきたくなったりするよね。
それ、Terraformで簡単に実現できるんです。

※そんなのPythonでboto3使ってbatch_writer()で書けば5分で済むだろ、とかそういうツッコミは一旦抜きにして。

# どうやってIaCで書くのか
countを使う。以上。

だと終わってしまうので、もう少し解説。

“`HCL
resource “aws_dynamodb_table_item” “batch_items” {
count = 100

table_name = aws_dynamodb_table.test.name
hash_key = aws_dynamodb_table.test.hash_key
range_key = aws_dynamodb_table.test.range_key

item = <

元記事を表示

OTHERカテゴリの最新記事