AWS関連のことを調べてみた

AWS関連のことを調べてみた
目次

【Amplify Gen2】Amplifyの導入手順をまとめてみた

2024年5月にAmplify Gen2が一般提供となり、これを機に始める方もいると思います。
ドキュメントがまだ充実していないので、Amplifyについて書こうと思います。

## Amplify導入手順
### ①AWSアカウントを作成する
・以下よりサインアップできます。手順に従ってください。

https://portal.aws.amazon.com/billing/signup

### ②AWS CLIをインストール・セットアップする
・AWS CLIをインストールする

macOS

“`
curl “https://awscli.amazonaws.com/AWSCLIV2.pkg” -o “AWSCLIV2.pkg”
sudo installer -pkg AWSCLIV2.pkg -target
“`
AWS CLIのインストールを確認

“`
aws –version
“`

Windows

“`
msiexec.e

元記事を表示

RDS Blue/Green DeploymentsでMySQL 5.7->8 へアップグレードした話

## 背景

Webサービスを運用していくにあたり、RDBのアップグレードに迫られる場合があります。ありますよね?

弊社のあるプロダクトのバックエンドについても Aurora MySQL 2.11.1(MySQL 5.7系) で稼働しておりましたが、Aurora MySQL v2系は 2024/10/31 を以って標準サポートが終了します。

Aurora MySQL v3 で現時点で利用可能な最新LTSバージョンは 3.04.2 (MySQL 8.0.28) になるため、MySQL 5.7 から MySQL8へのアップグレードが必要になってしまいました。

今回はそんなDBアップグレードを「RDS Blue/Green Deployments」でやってみた、という記事になります。

## RDS Blue/Green Deploymentsって?

以下はAWSの公式Docです

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/blue-green-deployments-overview.html

ざっく

元記事を表示

AthenaでSimple Notification Serviceの送信ログを読み込めるようにした

## S3上にあるログファイルをいい具合に取得したい

最初に、個人的なメモの側面もあるのでご容赦してほしい。

やりたかったことは、送信ログを解析したり、月々の送信数を把握したかった、それだけです。
その為に、s3上のログをいい具合に取り込んで上げる必要があった。参考にしたのは下記のページ。

https://zenn.dev/gomi_ningen/scraps/f2a340b1f2651e

https://staff-blog.faith-sol-tech.com/%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%80%91amazon-athena%E3%81%AE%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%81%AF/

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/partition-projection-setting-up.html

下記ク

元記事を表示

AWSキーペアにED25519形式のpemファイルを作成してTerraformで公開鍵を登録する

AWSキーペアに登録するキーペアの作成方法をよく失念するので、一連の流れを備忘録として整理。

1. AWSキーペアに登録するためのキーペア(ED25519、PEM)を作成する
個人的には強度の強いED25519を使っています
“`shell
ssh-keygen -t ed25519 -C “公開鍵に記載されるコメント” -m PEM
“`
保存先のパスとパスフレーズ(確認も含め)を入力すると、秘密鍵と公開鍵が作成されます。
1. tfファイルでaws_key_pairリソースを作成する

“`terraform
resource “aws_key_pair” “sample” {
key_name = “sample”
public_key = “ssh-ed25519XXXXXXXXXXXXX”
}
“`
publik_keyには1で作成された公開鍵(.pub)の値をコピーする

1. Terraformでplanしてみて意図したものになっているか確認する

元記事を表示

AWS RDS MySQL 標準サポート終了に伴う対応

### はじめに
このドキュメントは、AWS RDS MySQL 5.7の標準サポート終了に伴い、MySQL 8.0へのアップグレードを実施するための手順をまとめたものです。
MySQLのバージョンアップに際して、事前準備から実行手順、検証、そして万が一のロールバック手順までを網羅しています。
特に、Railsを使用しているプロジェクトにおいて、互換性の確認や必要な設定変更についても触れています。MySQL 8.0への移行は、セキュリティの向上や新機能の利用など、多くのメリットがありますが、慎重な準備と計画が必要です。

### 事前準備
1. **バックアップの取得**
– 現在のAuroraクラスタのバックアップを取得します。アップグレード中に問題が発生した場合に備えて、データを保護するために必須のステップです。
“`shell
aws rds create-db-cluster-snapshot –db-cluster-identifier –db-cluster-snapshot-identifier

元記事を表示

Terraformを使ったLambda関数のコンテナイメージ構築

# はじめに

AWS Lambdaは、サーバーレスでイベント駆動型のコンピューティングサービスです。従来のLambda関数ではzipファイルでコードをアップロードしていましたが、コンテナイメージを使用することで、より柔軟で強力な開発・デプロイが可能になります。
本記事では、Infrastructure as CodeツールであるTerraformを用いて、Lambda関数として実行するコンテナイメージを構築し、AWS環境へデプロイする手順を解説します。

制作したレポジトリはこちらです。

https://github.com/sugiyama404/practice_lambda_docker

参考にしたサイト

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-image.html#python-image-instructions

# 目的

Lambda関数をコンテナイメージで実行することにより、柔軟性とパフォーマンスを向上させることを目指します。

# インフラ構成

![aws.png](https:/

元記事を表示

Next.jsを使用して成果物をS3にデプロイし、CloudFront経由で公開する方法

CloudFrontを使ったページ公開時に詰まった経験のある方、これからページ公開をやりたい方はぜひみていただけると幸いです。

## 使用するAWSサービス

– S3
– CloudFront
– (Route53)

## 0. HTMLを生成
Next.jsのプロジェクトでは、ページを生成する方法としてSPA(シングルページアプリケーション)、SSG(静的サイト生成)、SSR(サーバーサイドレンダリング)の3つの選択肢があります。今回はSSG(静的サイト生成)を対象に手順を説明します。なお、SPAの設定も大きくは変わりませんが、SSRはLambdaなどサーバーが必要になるため、別記事で詳しく説明します。

手順:
`next.config.mjs` に以下を設定します

“`ts
/** @type {import(‘next’).NextConfig} */
const nextConfig = {
output: ‘export’
};

export default nextConfig;
“`

これにより、静的なHTMLファイルが、outディレクトリに生成され

元記事を表示

AWS NAT ゲートウェイ を理解した上で起動&停止 Lambda を用意する

# 実現したいこと
既存のAWSのバックエンドシステムにおいて、コスト削減のため開発環境とステージング環境のNATゲートウェイ(NAT Gateway)を夜間と休日の間は停止させるべく、NATゲートウェイを起動・停止させるLambdaを作成します。

# 待て、まだコードを書こうとするな
「NATゲートウェイ 自動 停止」とかで検索すると少ないながらもいくつか記事が出てきますが、理解せずにそれをまるまるコピペして実行させるだけではうまくいかないことが多いですし、望まないNAT削除をしてしまう可能性があります。
NATゲートウェイ、ルートテーブル、Elastic IPなどが自分の開発しているシステムではどのように設定されていて、どのリソースを操作すれば良いかをちゃんと理解する必要がありました。

こちらは開発していたシステムの構成図を、NATゲートウェイ周りだけを抽出して描いたものです。
手描きでごめんなさい。(手で描いた方が頭に残ると思って。)
これを基にNATゲートウェイ周りを説明します。

![IMG_0214.jpg](https://qiita-image-store.s3.a

元記事を表示

脱初心者!「社内向けAWS実践提案道場」参加感想

# 参加前

AWSからパートナー企業向けに提供されているAWS実践道場がありますが、今まで参加した経験がないのでずっと行きたいと思っていました。

今回、社内で似たようなイベントが開催され、どうしても参加したかったので部署内で調整してもらい、行かせてもらいました。
(機会を譲ってくださったPJリーダーのAさん、本当にありがとうございます!)

私が所属している部署にはAWSの黒帯のベテランがたくさんいるので、参加前は自分自身が大丈夫か?足を引っ張ったらどうしよう?といった不安がありました。

しかし、チャレンジしないと人間は成長しないので、最後は平常心で臨みました。

# イベント内容

弊社の先輩方のブログをご参照ください~

https://www.beex-inc.com/blog/aws_practicedojo

# 印象的なところ①
「みなさんはなぜEC2を使わないのか?」と講評者さんがイベントの最後におっしゃった言葉が非常に印象的でした。

「確かに。。。」と思いました。

いつの間にか、「クラウドを使う=脱オンプレミス=サーバーレス」という固定概念が心の中にできて

元記事を表示

Node.jsでS3の署名付きURL取得

node.jsで署名付きURL取得するコードサンプルを書きました。
aws-sdk v3を使用しています。

“`javascript
import { S3Client, PutObjectCommand, GetObjectCommand } from “@aws-sdk/client-s3”;
import { getSignedUrl } from ‘@aws-sdk/s3-request-presigner’;

const s3 = new S3Client({ region: process.env.AWS_REGION });
// 環境変数にあらかじめBUCKET_NAMEを登録しておく
const BUCKET_NAME = process.env.BUCKET_NAME;
const KEY = “hoge”

export const handler = async (event) => {
const { filename, contentType } = JSON.parse(event.body);
console.log(“body”,

元記事を表示

AWSサービスメニュー開発をしていてAWSを好きだ!と感じた瞬間

# 勉強会
JAWS-UG#59で発表させて頂きました。

https://jawsug-asa.connpass.com/event/291919/

# 内容
社内でAWSのサービスメニュー開発を行いました。AWSを利用して何かアプリケーションを構築したわけではなくAWSの構築や運用をシステムインテグレーターとして提供するサービスです。

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/22999f16-74a9-dc14-cc61-83a04e928534.png)

実施の背景としてはクラウド関連の案件の需要が増加する中、AWS案件は実施しているものの、まだまだオンプレミス対応案件に比べ、クラウド案件の対応割合が低いためです。

![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/4558d662-f008-c5d0-9dd6-58683e08d19c.pn

元記事を表示

AWS CLI スクリプトで Aurora Serverless v1 (MySQL) を v2 にアップグレードする

## サービス終了!

いよいよ Amazon Aurora Serverless v1 のサービス終了日が迫ってきたので、稼働中の v1 データベースを Aurora Serverless v2 にアップグレードする必要があります。

Serverless v1 のまま放置するとサービス終了日以降に強制アップグレードが敢行されてしまうので、事前に動作確認をすることができない上に、パラメータ設定もデフォルト値になってしまいます。

## アップグレードの手順

公式ドキュメントに移行手順が紹介されていますが、ちょっと難解でした。
[Aurora Serverless v2 への移行 – Amazon Aurora](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html)

DevelopersIO の記事がとても分かりやすいです。
[Amazon Aurora Serverlessをv1からv2にアップグレードしてみた | Develope

元記事を表示

CloudFront+WAFでIPアドレス制限をかける

# はじめに
こんにちは、もちもちMAXです。
AWSでS3+CloudFrontなどの構成で静的なコンテンツを配信する際、誰でもアクセスできる状態はマズイ、となることはありませんか?デモ用に作ってみただけなので限定的に公開したい、ということもあるかと思います。そんな時に使えるのがIPアドレス制限で、特定のIPアドレスからのアクセスのみ許可(or ブロック)ができます。これで安心して公開できますね。

今回はCloudFrontで配信するコンテンツにIPアドレス制限をかける方法を説明します。IPアドレス制限にはAWS WAFを用いておこないます。また、本記事ではCloudFrontによるコンテンツ配信方法については説明しません。配信方法も知りたい方は[こちらの記事](https://qiita.com/deritto777/items/5def898af7562619d73e)をご確認ください。

# 手順
まずはざっくりとした手順を紹介します。
1.IP setsの作成
2.web ACLの作成
3.web ACLをCloudFrontディストリビューションに適用

制限対象のIPア

元記事を表示

BedrockのConverse APIのTool useを使ってRAG評価のテストデータを生成する

前回、以下の投稿でテストデータの生成を行いました。

https://qiita.com/moritalous/items/86aef6d16605333f3d5a

ただ、質問に英語が混じったり、「はい、わかりました。以下の3つの質問を用意しました。」的な不要な出力が含まれたりしました。

代替方法として、BedrockのConverse APIで利用可能なTool useを使ってみました。

## Tool useとは

Tool useは、いわゆるFunction Callingです。ツール(関数)のスキーマ情報をBedrockにわたすことで、どのツールを呼び出すかを生成AIが考え、ツール呼び出しのパラメーターを返却(呼び出し元からすると取得)するものです。

とりあえずやってみた の投稿はこちらを参照ください。

https://qiita.com/moritalous/items/8b1a15a7dc583fa3a2e1

公式ドキュメントはこちらです。

https://docs.aws.amazon.com/bedrock/latest/userguide/tool-us

元記事を表示

GitHub ActionでDockerをビルドしてECRにPush

## はじめに
AWSのリソースに対する認証は、OpenID Connect (OIDC)を使用し、GitHub ActionsでDockerをビルドしてECRにPushした時のメモ。

### 前提
* ECRのリポジトリは作成済であること
* GitHubのルートリポジトリにDockerfileを登録してあること

### ざっくりした流れ
以下の順に作業を行った。
1. IAMからIDプロバイダを作成
2. IAMロールを作成する
3. IAMポリシーを作成してIAMロールにアタッチ
4. GitHub Actionsのワークフローを作成

### IAMからIDプロバイダを作成
プロバイダのタイプで、OpenID Connectを選択し、
* プロバイダのURLには、 https://token.actions.githubusercontent.com を指定する
* 対象者には sts.amazonaws.com を指定する

作成したIDプロバイダのARNはメモしておく。

### IAMロールを作成する
カスタム信頼ポリシーにJsonを張り付ける。
作成したロール

元記事を表示

サブネットのIPv4 を CIDR 表記で決める

# はじめに
サブネットのIPアドレスってどうやって決めるんだ?
各サブネットのIPアドレス:251個ってなんだ?
ってなったので、調べたことをまとめておきます

初心者ですので、誤り等ございましたら教えていただけますと幸いです!

ここら辺の学習に入る前に、一度動画を見て全容を把握しました
わかりやすかったのでこちらの動画おすすめです!

# VPCとは
「Virtual Private Cloud」の略で
AWSを使用するために仮想ネットワークを構築するサービスです

# サブネットとは
VPCのIPアドレス範囲の中で、さらに小さな仮想ネットワークを作成するAWSのサービスです
VPCの箱のなかにそれぞれのサブネットの箱があるイメージです↓

NewRelicのデータをプライベート経由で送るってやつ、試してみた

# はじめに
下記記事を読み、NewRelicのメトリクスデータをプライベート経由で送るアーキテクチャってのを作成してみたので、それをメモとして残します。

https://docs.newrelic.com/jp/docs/data-apis/custom-data/aws-privatelink/

今回は、何度も繰り返し環境を作成できるように、CloudFormationで環境を作ってみました。

# 概要
NewRelicとは、SaaS側の監視サービスであり、監視対象のサーバにAgentを導入することで、Agentが取得したデータをNewRelicに転送し、その内容をWEBコンソール上で分析/監視などができるサービスです。(ざっくり言うと)
詳細に関しては、下記記事を見てください。

https://newrelic.com/jp/blog/best-practices/what-is-observability-difference-from-monitoring

ようは、プッシュ型のSaaS型の監視サービスなので、Agentは「newrelic.com」や「nr-data

元記事を表示

AWS ECSでS3アクセスエラーを解決!ecsTaskExecutionRoleとecsTaskRoleの正しい使い分け

## 背景
ECSからS3にアクセスできないので解決していく

## やったこと

エラーを見ると`Unable to locate credentials` となっているので、
既存の ecs_task_execution_role に権限追加してやればいいのかな?

“`
resource “aws_ecs_task_definition” “style_assistant_backend_task” {
execution_role_arn = aws_iam_role.ecs_task_execution_role.arn
}

resource “aws_iam_role” “ecs_task_execution_role” {
name = “ecs_task_execution_role”

inline_policy {
name = “ecs_task_execution_policy”
policy = jsonencode({
Version = “2012-10-17”,
Statement =

元記事を表示

【SpringBoot】AmazonS3にファイルをアップロード&ダウンロードする方法

# 概要
Spring Bootを3系にアップデートすると`javax`→`jakarta`に置き換える必要があるため、`javax`が依存関係に含まれる`spring-cloud-starter-aws`[^1]が使えなくなる(と思ったのですが、手元の環境では普通に動きました…)。
念のため依存関係が`jakarta`になっている`io.awspring.cloud.spring-cloud-aws-starter`に変更したのですが、情報が少なかったのでサンプルを公開します。

[^1]: `io.awspring.cloud`と`org.springframework.cloud`がありますがどちらでも一緒です

# 環境
– Java17
– SpringBoot
– spring-boot-starter-parent:3.2.6
– spring-cloud-aws-dependencies:3.1.1
– spring-cloud-aws-starter
– spring-cloud-aws-starter-s3

# サンプル
ストレージクラスに

元記事を表示

CloudFormationで基本的なネットワークを作成する

基本的な2AZにまたがったネットワーク構成になります。
“`yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
VPCCidrBlock:
Description: The primary IPv4 CIDR block for the VPC.
Type: String
MinLength: ‘9’
MaxLength: ’18’
Default: 10.0.0.0/16
AllowedPattern: ‘(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})’

SubnetCidrBits:
Description: Subnet CidrBits, alowed bitween 8 and 30.
Type: String
MinLength: ‘1’
MaxLength: ‘2’
Default: ’24’
AllowedPattern: ‘(\d{1,2})’

元記事を表示

OTHERカテゴリの最新記事