AWS関連のことを調べてみた2021年11月16日

AWS関連のことを調べてみた2021年11月16日

AWS APIGatewayからLambdaへリクエストヘッダー情報を受け渡す

#はじめに
APIGatewayからLambdaへリクエストヘッダー情報を受け渡す必要があり、
その際に行った実装方法とテスト方法について、備忘録として記載します。

前提
 ・本記事では、下記の赤矢印①〜②の実装方法について記載する。
![API_lambda_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/6b5f27ad-2d81-d9fb-a9c0-7a637487486b.png)

#目次
[1. Lambda関数の作成](https://qiita.com/drafts/19dba5d3ef8955f3b2d1/edit#1-lambda%E9%96%A2%E6%95%B0%E3%81%AE%E4%BD%9C%E6%88%90)
[2. APIGatewayの作成](https://qiita.com/drafts/19dba5d3ef8955f3b2d1/edit#2-apigateway%E3%81%AE%E4%BD%9C%E6%88%90)
[(おまけ1)Lambd

元記事を表示

AWS 同一VPN内のLambdaからRDSへ接続を行う

#はじめに
Lambda関数からRDSデータベースへ接続を行う機会があり、
その際に実装を行った方法について、備忘録として記載します。

前提
 ・RDSデータベースの作成・設定済みとする。
 ・本記事では、下記の赤矢印①〜②の実装方法について記載する。
![lambda_rds_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/a9374b91-aae1-77fd-6445-06bd8dffc75f.png)

#目次
[1. Lambda関数の作成](https://qiita.com/drafts/d8bb6608d1343770b099/edit#1-lambda%E9%96%A2%E6%95%B0%E3%81%AE%E4%BD%9C%E6%88%90)
[2. Lambda関数のソースコード実装](https://qiita.com/drafts/d8bb6608d1343770b099/edit#2-lambda%E9%96%A2%E6%95%B0%E3%81%AE%E3%8

元記事を表示

AWS Cognito(IDプール)で認証を行い、S3バケットへアップロードを行う

#はじめに
Cognito(ユーザープール)のIDトークンをもとにCognito(IDプール)にて認証を行い、
S3バケットへオブジェクトのアップロードを行う機会があり、
その際に実装を行った方法について、備忘録として記載します。

前提
 ・Cognito(ユーザープール)の作成・設定済みとする。
 ・本記事では、下記の赤矢印③〜⑤の実装方法について記載する。
![cognito_s3_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1255237/4fd4f71a-8be6-3129-a730-d041909d7468.png)

#目次
[1. S3バケットの作成](https://qiita.com/drafts/3aca986885a7554e9ba3/edit#1-s3%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)
[2. Cognito(IDプール)の作成](https://qiita.com/drafts

元記事を表示

【AWS】CodeCommitでCloneの方法(ssh)【2通り】

1つ目のやり方でできなかったため、2通りの手順を用意しました。
①Linux及びGitBashを使用する
②SourceTreeを使用する

#Linux及びGitBasを用いたクローン(方法①)

##config 設定方法

“`:ターミナル
$ touch ~/.ssh/config //config作成
$ vi ~/.ssh/config //config書き込み(直接書き込んでもOK)
“`
configの中身

“`config:config
Host git-codecommit.*.amazonaws.com
User
IdentityFile ~/.ssh/<秘密鍵のフォルダー名>
“`

##GitBash起動時に秘密鍵を自動認証

Git Bash 起動

“`:GitBash
$ vi ~/.bashrc
“`
“`:bashrc
eval `ssh-agent`
ssh-add -k ~/.ssh/id_rsa
“`

Git Bash 再

AWS EFSのバーストクレジットとスループットの算出方法について調べてみた

ある日、CloudWatch のメトリックスを確認していたところ、あることに気づきました。

# EFSのバーストクレジットが減っている!
![burstcredit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1352206/a8c5ef50-e845-6c01-fdeb-1857b472c50f.png)

ECS の永続的データの保管領域として利用している EFS において、バーストクレジット (BurstCreditBalance) が徐々に減少していることに気づきました。

## EFSにおけるバーストクレジットとは
詳細については以下のドキュメントに記載があります。

* [Amazon EFS パフォーマンス](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/performance.html)
* 原文: [Amazon EFS performance](https://docs.aws.amazon.com/efs/latest/

AWS EC2にてPHPのRedis拡張機能を有効化する。

PHPのREDIS拡張機能を追加する。

手順はシンプル
・インストール
・有効化

**※以下、インストール**
インストールにはpeclを利用する。

## peclインストール

“`
wget http://pear.php.net/go-pear.phar
php go-pear.phar
“`

インストール時にオプション指定をいくつか設定できるが、
筆者はデフォルト設定にしたためEnterを押した。

## PATHの追加
“`
export PATH=$PATH:/home/ec2-user/pear/bin
“`

## redisのインストール
“`
sudo pecl install redis
“`

**※以下、有効化**
## php.iniに以下を追加
“`
extension=redis.so
“`

## Apache再起動
“`
sudo service httpd restart
“`

# 参考
https://pear.php.net/manual/en/installation.getting.php
https://se

SageMaker Clarifyで分析できるバイアスメトリクスを理解したい

## 目標

以下、2つのドキュメントに書いてある内容を理解する。

https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-detect-data-bias.html

https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-detect-post-training-bias.html

## バイアスメトリクス

Amazon SageMaker Clarifyの元ネタ論文であるところの [Fairness Measures for Machine Learning in Finance](https://pages.awscloud.com/rs/112-TZM-766/images/Fairness.Measures.for.Machine.Learning.in.Finance.pdf) の後ろの方に各バイアスメトリクスの定義と簡単な説明をまとめたテーブルが記載されている。

![image.png](https://qiita-image-store.s3.ap-

【AWS】 Terraform & Serverless による IaC の導入

以前、ポートフォリオとしてタスク管理アプリを作成しました。そのインフラ構成には主にAWSを利用していましたが、大部分がAWSマネジメントコンソールからの手作業によって作成していました。

この方法は、初めて触れる技術を使用してインフラを構築する場合であれば、画面の指示に従いながら進めていくことができるというメリットがあります。しかし、インフラが大きくなり複雑化すると次第に管理が難しくなってきます。利用されているリソースを把握し、その変更が他へ与える影響も考慮する必要があります。

これらの問題に対応するため、インフラをコードで管理する **Infrastructure as Code** (**IaC**) を導入しました。これによって、使用されているリソースや依存環境が明確になり、またインフラの構築や削除をコマンドで容易に行えます。

IaCを実現するためのツールはいくつかありますが、ここでは**Terraform**と**Serverless Framework** (Serverless) を用いることにしました。Terraformのみで全ての構成管理を行うことも可能だと思います

困ったことと解決したことメモ_20211115

#AmazonForecast
https://dev.classmethod.jp/articles/amazon-forecast-getting-start/

https://dev.classmethod.jp/articles/amazon-forecast-improvement-by-option-dataset/

Jenkins slave nodeの追加

#事前準備
masterノード: 1台のAWS EC2インスタンスを作成しておく。
slaveノード: 1台のAWS EC2インスタンスを作成しておく。

# slaveノードの配置

“`
sudo yum update
sudo amazon-linux-extras install java-openjdk11
java
sudo useradd -d /var/lib/jenkins jenkins
sudo grep jenkins /etc/passwd
sudo su – jenkins
cd /var/lib/jenkins
mkdir .ssh
mkdir work
cp /home/ec2-user/.ssh/authorized_keys /var/lib/jenkins/.ssh/
chmod 600 /var/lib/jenkins/.ssh/authorized_keys
chmod 700 /var/lib/jenkins/.ssh
“`

# Jenkins web uiでslaveノードの追加と接続
<1>masterノードから、slaveノードに

Amazon linux上のJenkinsインストール

# 事前準備
1台のEC2インスタンスを用意しておく。
![Screen Shot 2021-11-15 at 18.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289758/0034f50a-feb1-b16a-2940-ca21f641cd2a.png)

security groupを設定しておく。
![Screen Shot 2021-11-15 at 18.31.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289758/a9a8dc4a-8cb7-b688-1a5e-634503cf98f0.png)

#1. jenkinsをインストールする

“`
sudo yum update
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
s

[AWS]サーバーで障害が起きた時に自動的にソーリー画面へ切り替える

サーバーで障害が起きた時に、自動的にソーリー画面へ切り替えてくれる機能の紹介です。
AWSのDNSサービスであるRoute53で、フェイルオーバーの機能を利用します。

![route53-alb-s3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/6b4a55ad-0959-23bf-24ae-d67d1d7b6b22.png)
画像引用元:https://xp-cloud.jp/blog/2017/08/25/1834/

簡単に設定方法を説明すると、

1. S3にドメイン名と同じ名前のバケットを作成し、静的Webサイトホスティング設定を行う
2. S3へメンテナンスページ(index.html)を配置する
3. Route53で既存のAレコードの種別をフェイルオーバーのプライマリに変更する
4. Route53で同名のAレコードを作成して、種別をフェイルオーバーのセカンダリ、行き先をS3のエンドポイントにする

詳細な設定方法は以下。

https://xp-cloud.jp/bl

Shield AdvancedのSNS通知設定で気づいたこと

# これはなに
最近、業務でShield Advancedを入れているのでその中でSNS通知設定に関して気づいたことを書こうと思います。

ShieldAdvancedの構築方法についてはこちらの記事を参考にしました。
https://oji-cloud.net/2021/06/29/post-6379/

## SNS設定
・Shield Advancedを設定するにあたり、保護リソースの設定で**DDoS検出時**と**Rate limit超過時**にSNSTopicで
 通知を飛ばすことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/500eb4c0-69e7-b7b6-78b6-c8d3c3ee699f.png)

ここで1つ考慮できてなかったことがありました。
terraformで作成したはずのSNSが選択肢に出てきませんでした。

この時何となく察しがついたのですが、**SNSは各リソースと同じリージョンに作成する必要があります。**

特定の条件でのみS3の画像URLでCORSエラーが発生する問題をなんとかする

## 要約
– S3に保存した画像URLに対してCloudFront経由でブラウザからアクセスする処理が2種類ある
– 1つはHTMLのimgタグで呼び出す場合
– もう1つはJavaScriptの`new Image()`などでImageElementを操作する場合
– S3とCloudFrontの両方で`Access-Control-Allow-Origin`Headerを正しく設定しているのにJavaScript上で操作する時にCORSエラーが発生したりしなかったりする現象が発生
– S3の画像URLを使用している場合、かつ、Chromeでブラウザのcacheが有効になっている場合、2度目のアクセス時に`Access-Control-Allow-Origin`Headerの付いていないキャッシュしたレスポンスをChromeが返すためCORSエラーが発生してしまう

## 問題が発生してたコード
– 次のように同じ画像URLに対してHTMLのimageタグで使用、かつJavaScript上でも同じ画像に対して処理を行おうとしていた

“`html

Terraformで特定のResourceのみを取り扱う

## はじめに

これまでの検証はこのように対象別にフォルダを分けて行っていました。
そのフォルダごとにinit、plan、applyを実行していました。
さらに面倒なのがterraform.tfvarsとvariables.tfは同じもの。
各フォルダにコピーしていました。

“`
└terraform
├ec2
│ ├terraform.tfvars
│ ├variables.tf
│ └ec2.tf
├ec2ssm
│ ├terraform.tfvars
│ ├variables.tf
│ ├ec2.tf
│ └role.tf
└s3
├terraform.tfvars
├variables.tf
└s3.tf
“`

でも、こういう構成のほうが管理はしやすいですし、作業フォルダも一箇所で済みます。

“`
└terraform
├terraform.tfvars
├va

TerraformでS3バケットを登録

## はじめに

前回、前々回と、TerraformでEC2インスタンスを構築してみました。
業務でS3を構築する必要があるとのことなので、代わり映えがありませんが、今度はS3にバケットを構築してみようと思います。

## 目標

Terraformを使ってS3バケットを構築。
マネジメントコンソールは一切使用しないこと。

## 参考

[初めてのTerraform](https://qiita.com/class2glass/items/6a55f6a1627780bbbb35)
[SSMでEC2にアクセス](https://qiita.com/class2glass/items/5749d47f6dca79c84c50)
[iResource: aws_s3_bucket](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket)

## 手順

まずは作業フォルダでTerraformコマンドが利用できるよう初期化処理を行います。

“`
# terraform

【AWS初心者】IAMユーザーを使ってEC2上にWebサーバーを作る。パート2

AWS初心者がAWSを触ってみたいと思い、EC2上にWebサーバーを構築することにしました。
不備があればご指摘頂けると助かります。よろしくお願いします。
今回はEC2上にApacheのインストールを行います。

【AWS初心者】IAMユーザーを使ってEC2上にWebサーバーを作る。パート1
https://qiita.com/Pell/items/2bf123ea18d1321a62be

# 本記事の環境
* AWSのIAMユーザー
* ホストOS:Windows10 Pro 64bit 16GB
* ゲストOS:Amazon Linux 2
* Tera Term:4.105
* Apache:2.4.51
* php:本記事では未導入。追々実施予定。
* データベース:本記事では未導入。追々実施予定。

※別途、運用資金も必要です。

# (サーバーが停止中であれば)インスタンスを開始する。
* インスタンスを開始する。
* IPアドレスを固定化していない(Elastic IPが未作成、未紐づけ)場合は「パブリック IPv4 アドレス」が前回と変わっているためメモする。

#

100

#00
#SSH接続でEC2に接続できないときに
IPポート22を介してインバウンドトラフィックを許可するセキュリティグループを設定する
#インターネットからのトラフィックをEC2に届ける
インターネットに面した Application Load Balancer は、ALB を指す外部 DNS を使用して、基盤となる EC2 インスタンスを公開する。
EC2をエンドポイントとしてインターネットに面したALBを起動する

#01
#負荷軽減 ウェブ層のコスト最適化、予想されるトラフィックを処理する
ELB背後のAuto ScalingグループでEC2を起動する
S3n静的コンテンツを指すCloud frontでディストリビューションする
#操作ミスによるEC2インスタンスの削除を防ぐ!終了保護の設定方法

disable-api-terminationオプションを指定

https://dev.classmethod.jp/articles/tsnote-ec2-disable-termination-001/
#高可用性を確保する

可用性(Availability)とは、システムを

CDKであるあるWebホスティング構成を構築・デプロイする

以前の記事でだいぶざっくり書いたが、もう少しStep-By-Stepで再現性の確認も兼ねて本記事に再度まとめることにした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/34d7c348-f810-16d7-9a0a-715ddd151e4b.png)

## 環境構築

“`
$ npm i -g aws-cdk

$ cdk –version
1.132.0 (build 5c75891)

// インフラ/バックエンドの作業ディレクトリ
$ tree
.
├── bin
│ └── main.ts
├── lib
│ └── hosting-stack.ts
├── node_modules
├── package-lock.json
├── package.json
└── tsconfig.json
(一部略 cdk initで構成)

// フロントエンドのCICDパイプラインの作業ディレクトリ
$ tree
.
├── bin
│ └──

外部システムから投入されるSQSキューをLaravelで監視処理する

# はじめに

[Laravelのキュー](https://readouble.com/laravel/6.x/ja/queues.html)はLaravelから投入してLaravelで処理する前提になっているので、そのままだと外部の仕組みから投入したメッセージを処理することはできません。

https://laravel.io/forum/02-03-2014-help-with-setting-up-a-queue-listener

この投稿にあるように、`{“job”:”Acme\Jobs\PushFilesJob”,”data”:{“file_id”:”1″}}`のようなJSON形式で送信されていないとキューの中身とジョブの紐づけができないからです。

このフォーマットで送ってくれるならいいですが、外部の仕組みだとそうもいかないことがほとんどだと思います。

そこでなんか方法ないかと調べたところよさげなプラグインを発見。

https://github.com/dusterio/laravel-plain-sqs

ただ、README.mdがなかなか不親切だったため導入に難儀