AWS関連のことを調べてみた2023年07月23日

AWS関連のことを調べてみた2023年07月23日
目次

(未検証)DynamoDBを用いた悲観ロックを実現するための思考実験

# 後から気づいた

https://aws.amazon.com/jp/blogs/database/building-distributed-locks-with-the-dynamodb-lock-client/

AWS公式がちゃんとしたの書いてたので、そっちを見たほうが良い。(後から気づいた)
以下は、自分なりに考えたときのメモに成り下がったが、結局公式に近い結論に至った気がするので、個人的には満足。(同じではない)

# 注意事項

– 「悲観ロックの実現」を保証するものではないです。(あくまで机上レベルのアイデア)
– 公式ドキュメントのパーツからアイデアを組み立てただけです。実際に実装して検証したわけじゃないです。
– 要は自分用のメモです。何も保証しませんので、各自で検証してね。

# 結論

**処理概要**

– 何かの処理を開始する前にやること
– 「item(レコード)」が存在しない場合のみPutItemする。(条件付き書き込み)
– PutItemが失敗した場合は、処理を終了させる。
– 処理する
– 「item(レコード)」をdelete(

元記事を表示

Route53フェイルオーバーを試してみた

Route53にはヘルスチェックを利用したフェイルオーバー機能があるが、
CloudWatchアラームを利用したフェイルオーバーを確認したので備忘録として残す。
# 構成
・Network Load Balancer(1a,1c)
・EC2 インスタンス2つ(1a,1c)
# 設定の流れ
1. EC2を適当に作成
Amazon Linuxを利用しEC2を2つ作成。
dnf install httpdしてNetwork Load Balancerからヘルスチェックを受信できるようにする
1. ターゲットグループとNetwork Load Balancerを作成
1.で作成したEC2を対象にする
1. CloudWatchアラームを作成
2.を作成するとCloudWatchメトリクスに「ターゲットグループ、AZ 別メトリクス」が作成されるので、AZ毎のUnhealthyHostCountのアラームを2つ作成する。
1. Route53ヘルスチェックを作成
Route53コンソールからヘルスチェックを作成する。ヘルスチェックは3で作成したCloudWatchアラームを指定する。ヘルスチェック

元記事を表示

一番簡単なCodeBuild

# はじめに

CodeBuildを触ってみたいと思い、ハンズオンなど探してみたのですが、CodePipelineの例ばかりでした。
そのためCodeBuildをメインとして自身で手を動かした内容をまとめておきました。

# 概要
本記事では以下の事をやっています。

– CodeBuildの実行
– 取り扱うファイルを格納するため、CodeCommitを用意します
– CodeBuildで利用するインスタンスから、ファイルをS3に格納
– 格納用のS3バケットを用意します

# 参考

https://techtekt.persol-career.co.jp/entry/tech/230302_01

# Level0:動かすだけ

まず、CodeCommitを作ります。以下は作成するCFnテンプレートですが、コンソールから作成してもよいです。
“`yaml:createCodeCommit.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Resources:
MyCodeCommitRepo:
Type: AWS

元記事を表示

DataZone(プレビュー)に既存のGlueデータカタログを取り込みパブリッシュ/サブスクライブする

# はじめに
DataZone(プレビュー)を少し触ってみたので、備忘録的に記事にします。
現在、AWSでデータレイクを構築している場合、既存のGlueデータカタログが存在していると思います。それをDataZoneの管理下に置くというユースケースを想定し、実施してみました。

こちらのドキュメントを参考に実施しました。

https://docs.aws.amazon.com/datazone/latest/userguide/create-glue-data-source.html

# 前提条件
– 2023年7月22日に、DataZone(プレビュー)を利用して検証しています。GA時にはUIや挙動が変わる可能性があります。
– 米国東部 (バージニア北部)リージョン(us-east-1)を利用します。
– 既にドメインやプロジェクトは作成しています。
– 既にクローラーを実行し、取り込むGlueデータカタログは作成しています。
– 今回は、全てAdminユーザーで実行します。

# やってみる

## 既存のデータカタログを確認する
データベース `test-dz-db` が作成

元記事を表示

ALBをターゲットグループ無しで立てたい

## 前書き
先日、プロジェクトの作業でALBを作る機会がありました。ロードバランサーは、通常その先にあるターゲットへのトラフィックを分散させるために使用します。
しかし、今回はまだターゲットとなるリソースを作成しておらず、とりあえず疎通確認だけを先に済ませておきたい、という状況でした。
ターゲットグループ用のLambdaやEC2を暫定的に作成してもよかったのですが、ALBはターゲットを作らずとも固定値を返すことができるということは知っていたので、その方法を使おうと思い立ちました。
しかし、いざマネコンからALBを作成しようとしたら「you must select st least one target group」というエラーが表示され、ターゲットグループを選択せずにALBを作成することを許してもらえませんでした……
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661124/d7ad89bd-1bb5-7134-c950-e91f3a2f7575.png)
(そういえばEL

元記事を表示

AMIバックアップ操作をAWSCLIで行う

# 目的(やりたいこと)
– AMI取得をCLI行いたい

メンテナンスなどでマシン(EC2)のイメージバックアップ(AMI)を行う。GUIでも実施可能だが煩雑。GUIも頻繁にアップデートされるため、コマンドで実施。

# 前提条件
– Cloudshellを利用

# 手順

## インスタンスID取得
EC2のタグ「Name」に対して、「target-grp-machine01」と設定しているマシンのインスタンスIDを確認する(このマシンがバックアップ取得対象インスタンス)。タグNameでなくとも、なにかしらタグとValueを入れていれば検索できる。

EC2_NAME変数にtarget-grp-machine01を代入。
“`sh
export EC2_NAME=target-grp-machine01
“`

この名前から、Nameタグを検索し、インスタンスIDを表示してINSTANCE_ID変数に代入。
“`sh
export INSTANCE_ID=`aws ec2 describe-instances –filter “Name=tag:Name,Va

元記事を表示

【AWS】Cognitoハンズオン – サーバーレスのウェブアプリケーションを構築する

# はじめに

Cognito について調べる機会があったので、実際に公式のハンズオンを試してみた!って記事です。
参照:[サーバーレスのウェブアプリケーションを構築する](https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/)

構成は下記の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/6ca5cb22-c42d-cbf3-f561-bd2a9a09c39d.png)
Amplify と Cognito は初見なので頑張ります。。

# サーバーレスのウェブアプリケーションを構築する
## ① 静的ウェブサイトをホスティングする
AWS Apmlifyについては [コチラ](https://aws.amazon.com/jp/amplify/)
![image.png](https://qi

元記事を表示

ELBの操作をAWSCLIで行う

# 目的(やりたいこと)
– ELBの各操作をCLI行いたい

メンテナンスなどでELBが指定するターゲットグループから、ターゲットのマシン(EC2)を登録除外するときに行う。GUIでも実施可能だが煩雑。GUIも頻繁にアップデートされるため、コマンドで実施。

# 前提条件
– Cloudshellを利用

# 手順

## ターゲットグループARN取得
ターゲットグループのARNが必要のため、これを取得する。GUIでも可能だが、ここではコマンドで行う。事前にターゲットグループの名前を確認し、以下コマンドを追記修正する。
“`sh
export TARGET_GROUP_ARN=`aws elbv2 describe-target-groups –query “TargetGroups[].[TargetGroupName,TargetGroupArn]” –output text | column -t | grep -i “検索対象ELBターゲットグループ名” | awk ‘{print $2}’`
“`

TARGET_GROUP_ARN変数にARNが代入されたことを確認

元記事を表示

API Gateway→Lambda→DynamoDBとデータを受け渡す

# 背景
最近業務外でサーバレス系サービスに触れる機会が増えました。せっかくなので理解を深めようと考え、タイトルの3サービスを触ったのでそれについての備忘です。サクッと作成できるので、興味がある方はぜひお手元の環境でお試しください。なお、DynamoDBとLambdaの構築は慣れている方が多いので構築手順は省いています。本記事の内容は以下のUdemy講座を参考にしています。

https://www.udemy.com/course/aws-vlfc/

# 構築する内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/08d48572-2f8b-3843-c50c-6a6fcff12134.png)
# DynamoDBの用意
テーブル名は`users`として、パーティションキー`id`、`文字列`のみ設定します。
# Lambdaの用意
この後作成するAPI GWからデータを受け取り、DynamoDBに格納するコードです。
ランタイムは`Python 3.9`で、Lam

元記事を表示

結局のところ仮想マシン0台構成は現実的か

# はじめに
昨今モダン化やマネージドサービスをどんどん活用しようという流れから、嫌厭されがちな仮想サーバですが、果たして0にすることは可能なのでしょうか。
政府情報システムにおけるクラウドサービスの適切な利用に係る基本方針でも、サーバを自ら構築するのではなく、マネージドサービスを活用し、仮想サーバを利用しない構成を求めているため、仮想サーバを極力利用しない構成が望まれている昨今の情勢から、仮想サーバが残るケースはあるのか、代替手段はあるのかを考察します。

https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/e2a06143-ed29-4f1d-9c31-0f06fca67afc/17ef852e/20221228_resources_standard_guidelines_guideline_01.pdf

# 理想
![スクリーンショット 2023-07-22 18.12.27.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

AWS Amazon Linux 2023 に MySQL 導入

AWS EC2 で WordPress を構築するのに必要な、MySQL導入に苦戦した内容。

構成:
Amazon Linux 2023
MySQL

EC2 に SSH 接続してMySqlインストールを入れるがインストールできない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517045/af528efa-ef73-dd5d-cf53-3bfe834d8896.png)

どうやらリポジトリがないようなので URLを直接指定してインストール
$ sudo yum localinstall [使用するLinuxのバージョンに合わせて]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517045/c5ede9fc-6821-18f5-51ec-b648838bbfcf.png)

インストールできたっぽいのでバージョン確認
![image.png](https://qiita-im

元記事を表示

署名付きアップロード・ダウンロードの構成をterraformで作る。

# はじめに
[前回](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)、[AWSブログ](https://aws.amazon.com/jp/blogs/news/large-size-files-transferring-by-serverless-s3presignedurl-and-clientside-javascript/)で公開されていた署名付きアップロード・ダウンロードの構成をAWSマネジメントコンソール画面から構築しましたが、色々と使えそうなので、terraformの勉強も兼ねてterraform化したので公開しようと思います。

– 【前】[API Gateway、Cognito、Lambda、S3を使って署名付きアップロード・ダウンロードを実装する。](https://qiita.com/sakai00kou/items/ba5618f0a67064355752)

**元のブログ記事**
– [AWS のサーバーレスと Amazon S3 署名付き URL、クライアントサイド JavaScript

元記事を表示

AWS Well-Architected Framework で出てくる難しい言葉を俺なりに分かりやすくしてみた

AWS Well-Architected Framework は6つの柱から成るベストプラクティス集ですが、独特な言い回しがあって理解するのが大変、という意見をよく耳にします。
この記事ではそういった言葉を自分なりに咀嚼して出来るだけわかりやすく解説したいと思います。

## 全体
ドキュメントは[こちら](https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/definitions.html)
ドキュメントにもありますが、W-Aでよく出てくる特有の用語があります。

### コンポーネント
EC2とかS3とかデータベースとかそういったリソースも含みますが、アプリケーションに欠かせないコードや運用ドキュメントなんかも「コンポーネント」と表現します。有形か無形かではなく、ワークロード(後述)に重要な”要素”かどうかがポイントです。
この用語は比較的 **運用上の優秀性の柱** でよく出てきます。

### ワークロード
AWSアカウントやVPC、ももちろんこれの一部ですがそれだけはありません。皆さん方開発チー

元記事を表示

AWS CloudFormationでよく使われる関数をわかりやすく解説する

CloudFormationテンプレートを作成するにあたって関数の理解は必須です。私が自分で環境を構築して、実際に利用したものをご紹介します。

序盤で紹介する3つの関数、**Ref、Sub、GetAtt**を理解すれば、基本的にCloudFormationテンプレート作成は問題ないかと思います:sparkles:

## 組み込み関数とは
CloudFormationテンプレート内で使用できる特殊な関数です。これらの関数を使用することで、テンプレート内で生成されるリソースの情報を取得することができるようになったり、またその値に対して加工したりすることができます。たとえば基本になる**Ref関数**では、リソース作成時に出力される値を取得することができます。

上記ではVPCが作成されるときに生成されるVPCIDを同じResource内で生成するパブリックサブネットの作成元として参照することができます。
![スクリーンショット 2023-07-19 23.28.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

AWSに入門する前に知っておきたいネットワーク基礎知識

# はじめに

急遽 AWS でインフラを構築しないといけない機会が訪れ、AWSに再入門しました。僕のAWSの経験は初心者向けハンズオンを何個か試した程度だったのでとても浅く、ネットワークの知識も忘れかけていたので、この機会に取り急ぎネットワーク基礎知識を復習から始めました。

その後どうにかAWSでインフラを構築できたので、これからAWSに入門しようとしている方の役に立てばと思い、記事にまとめました。

:::note warn

本記事には AWS に入門する際に必要な最低限のことしか書いてありません。可能ならネットワークについて体系的に勉強してから AWS に入門するのがオススメです。また、僕は AWS の経験も浅いので、場合によってはこの記事に書いていてある知識だけでは足りない可能性もあります。

:::

# ネットワーク基礎知識

ネットワークとは、簡単に言うと複数のコンピュータを接続する技術です。複数のコンピュータが接続できるようにするためにルールが定められており、それぞれのルールは **プロトコル** と呼ばれ、たくさんのプロトコルによってネットワークが成立しています。

元記事を表示

使う時だけEC2インスタンスを起動し、SSH接続元にのみポート(443)を開放する

# 要約
 SSH接続時にEC2インスタンスを起動し、SSH接続が無ければEC2インスタンスを停止する。
併せて、SSHクライアント側に対してポート(この記事の例としてhttps/443)を開放/閉鎖する。
その結果、利用料の最適化とセキュリティ対策の強化ができる。
 この記事では、Systems Manager のノード管理サービス「セッションマネージャー」機能による実装を述べている。但し、AWSについてベースの知識や経験があり独力で設定ができる方への気付きを指向したものである。

# 背景
 必要時に直ぐに使えるように開発用サーバー(EC2インスタンス)は、常時起動するか、あるいは、定時で起動/停止する運用が見受けられる。開発途中のプログラムを稼働させるのだから、その前提でセキュリティを適切に設定する必要がある。しかし、デバッグ等で試行錯誤している状況が想定され、セキュリティを適切に設定することは事実上は困難である。また、開発用サーバーでプログラムを稼働させる実際の時間は、その起動時間よりも遥かに少ないことも多い。
 この記事は、Systems Manager のノード管理サービス

元記事を表示

EC2のAutoScaling時にEIPを自動で付与する(IMDSv2版)

## この記事を書いたきっかけ
* EC2へのアクセス元のネットワークがIPホワイトリスト形式でアクセス制限を行っていたため、EIPで固定化する必要があった
* 既存の記事で紹介されている実装はインスタンスメタデータv1が前提となっており、v2では稼働しなかった

## 前提知識
* [Auto Scaling で追加したEC2 インスタンスにEIP を自動で紐づける – Qiita](https://qiita.com/kanadeee/items/955eb8710e97a4ed5fd3)

## 事前に用意するもの
* EC2 Auto Scaling設定
* EIP

## 必要な設定
* 以下のポリシーを含めたIAMロールにEC2に付与し、EC2自身が空いているEIPの参照と割り当てが行えるようにする
* 起動テンプレートのUser Dataに以下のスクリプトを記載し、起動時に空いているEIPの参照と割り当てを行わせる。その際、**メタデータを参照するためのトークンを取得する**
“`
#!/bin/bash

## EIPの自動割り当て処理
TOKEN=`curl -X

元記事を表示

初心者がAWSでWebサイトを公開するまで

# やりたいこと
AWSでWebサービスを公開するまでの流れをまとめました。
公式が用意しているサンプルWebサービスを使ってWebサイトの環境構築を学びます。

参考にした公式チュートリアルはこちらです。
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/

# サンプルWebサービスの説明
まずサンプルWebサービスがどんなものかをざっくりと説明します。

![いらすとやユニコーン](https://2.bp.blogspot.com/-kwlzIOtHvuM/XOPXUYPc19I/AAAAAAABS7k/YyQ6OZTB2O4Wg4HSlYMgfOKkOy5E99uUgCLcBGAs/s800/yumekawa_animal_unicorn.png)
シチュエーションは以下です。
> あなた(の会社)はユコニーンを世界各地に派遣する能力を持っています。
そこで世界中の人がユニコーンをタクシーのように乗り

元記事を表示

AWS初心者、Skill Builderをはじめました

Skill BuilderをこれからはじめるAWS初心者の方向けに、同じ目線からSkill Builderをはじめてみて感じたことを紹介する記事です。

## Skill Builderとは
一言で言えば、AWS公式のオンライン学習ポータルサイトです。
500を超える学習コンテンツが、すべて無料で提供されています。
個人およびチームでサブスクリプション契約をすると、追加機能が利用できるようになります。
詳細はリンクをご覧ください。

https://aws.amazon.com/jp/training/digital/

## Skill Builderを触ってみる
私がSkill Builderの利用開始直後に着手したのは、 *AWSome Day Online Conference* でAWS初心者に最適なコースとして紹介されていた **AWS Cloud Quest: Cloud Practitioner** です。
しかし、始まってすぐに全編英語であることが判明し、日本語に比べ学習効率が悪いと判断し早期に撤退しました。(そもそも内容自体が完全な初心者には優しくないように

元記事を表示

[小ネタ] Terraform で Amazon SES のSMTPパスワード(IAMアクセスキー)を発行する際はSESと同じリージョンで発行しよう

## SMTPのパスワードを `ses_smtp_password_v4` に切り替えたらメール送信できなくなった

[Amazon SES](https://aws.amazon.com/jp/ses/) といえば、AWSのメール送信サービスですが、昔は日本リージョンがなく、米国リージョン(`us-east-1` など)を使うのが普通でした。

そんな米国リージョンの歴史あるSESを使っているサービスをTerraformで管理していたのですが、つい先日 [TerraformのAWSプロバイダ](https://github.com/hashicorp/terraform-provider-aws) を新バージョンに切り替えていた際に 「**`ses_smtp_password` が deprecated になっている**」 という警告が出ました。

“`terraform
resource “…” {
name = “SMTPPassword”
# !! ses_smtp_password は非推奨だよ (※最新版では削除) !!
value = aws_iam_

元記事を表示

OTHERカテゴリの最新記事