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

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

AWS(S3)に画像をアップロードする

# はじめに
AWS(S3)に画像データを保存する必要性や手順をまとめたいと思います。
現状、herokuを用いてアプリのアップロードを行なっていますが、アップロードされた画像はアプリケーションのディレクトリに保存されていました。
しかし、ユーザーがアップロードした画像データは、アプリがデプロイまたは再起動(24時間に1回自動で行われる)される度に、消えてしまう仕様になっています。
そこで、ストレージサービス(画像等の膨大になるであろうデータを別途保管できる場所、サービスのこと)を利用することで、画像を長期的に保存することができるようになります。
ストレージサービスには様々な種類がありますが、今回はAWSが提供しているS3というサービスを使用します。

## S3(Amazon Simple Storage Service)とは
S3とは、AWSが提供するサービスの一つです。
(インターネット上にデータを保存する箱を借りられるサービスであるとイメージをすると良い。)
S3を利用することで、画像を保存したり、保存してある画像を取得したりすることができます。
S3に保存されたデータは実在の

元記事を表示

「S3バケットにオブジェクト有効期限を設定したらフォルダまで消えた」を理解する

「S3バケットにオブジェクト有効期限を設定したらフォルダまで消えたんだけど!?」と言われて、そういうものだしと思ったけど、どういう理屈でそうなるのかをちゃんと整理したことなかった。簡単にまとめれば…

* S3におけるフォルダは、キーが `/` でおわるオブジェクトをコンソールではフォルダっぽく見せてるだけ
* コンソールでフォルダ作成をすると、実際にはS3上で0バイトのオブジェクトが作成される
* オブジェクトなので、オブジェクトの有効期限をライフサイクルルールで指定すれば、それが適用される

…こんな感じになりそう。もしフォルダ(っぽいオブジェクト)には触れないライフサイクルルールを作りたければ、多少の配慮が必要になる。

# S3でのフォルダとはなにか

まず、僕の理解では、以下が大前提。

1. S3はオブジェクトストレージでありキーバリューストアである
2. 格納されているものは、実は「キーに対応した値」「キーに対応したメタデータ」だけである

S3に格納されたもの=オブジェクトは、データの実体(ペイロード)を「値」に格納していて、バージョンとかライフサイクルルールとかといっ

元記事を表示

【AWS】Aurora MySQL アドバンスト監査ログ出力【Cloud Watch Logs】

# Aurora MySQL アドバンスト監査ログ出力

Auroraで特定のDBユーザの操作を監査ログで出力する。
[公式Document](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Auditing.html)を元に設定していく。

## 準備

まずはRDSクラスタ、パラメータグループ、ユーザを作成する。
VPCに接続用インスタンスを作成するのがめんどくさかったので、パブリックアクセスを有効化した。

– クラスタ & インスタンス設定

| 項目 | 値 |
| :——————- | :———————————– |
| クラスタ名 | test-db |
| エンジンバージョン | 8.0.mysql_aurora.

元記事を表示

S3のオブジェクトをSSE-Cで暗号化/復号化してみる

# はじめに
最近、S3の暗号化をSSE-Cで行うことがあったので、いろいろ調べてみた。
S3のオブジェクトをSSE-Cで暗号化/復号化しつつアップロード、ダウンロードする一連の流れをAWS SDK for Python(boto3)を用いて試してみた。

# S3の暗号化について
暗号化を使用することで転送時と保管時にデータを安全に保護できる
* 転送時:S3との間でデータを送受信するとき
* 保管時:S3データセンター内のディスクに格納されているとき

そして、S3の暗号化には**クライアント側**での暗号化と**サーバ側**の暗号化があるらしい。

## クライアント側 (CSE: Client Side Encryption)
S3バケットにアップロードする前にあらかじめクライアント側で暗号化しておいて、S3バケットにアップロードする方法

## サーバ側 (SSE: Server Side Encryption)
データを受信するアプリケーションまたはサービスによって、送信先でデータを暗号化する方法
暗号化するためのキーの種類によって以下の3つの方法に分類される

### 1

元記事を表示

MFA 保護で AWS CLI 利用を簡単にする関数

# はじめに

以下のようにMFA保護を強制されたIAMユーザーの場合、MFA認証されていない場合すべてのAWSアクションへのアクセスが拒否されます。
IAMユーザーの認証情報を利用する場合もMFAトークンの入力が必要になり、AWS CLIを利用したい場合は一時認証情報を払い出す必要があります。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_iam_mfa-selfmanage.html

FYIにあるように`get-session-token`で払い出した一時認証情報を環境変数へエクスポートを行うのですが、コピペする手間を極力無くすために関数にすることで簡略化できます

## FYI

https://aws.amazon.com/jp/premiumsupport/knowledge-center/authenticate-mfa-cli/

## Require

– AWS CLI
– jq

## コード

.bashrcや.zshrcに追記してご利用くだ

元記事を表示

Aurora MySQL で IAM 認証を使った接続をしてみた

# はじめに

Amazon RDS や Amazon Aurora に接続するときに、IAM 認証を使った接続が出来ます。通常のローカルユーザーを使った認証に加えて、IAM の権限を持ったユーザーに限定した認証が可能です。これの良いところは、パスワードを何かに管理する必要がない点です。極端な例ですが、ソースコードの中にパスワードをハードコードする必要がなくなるので、よりセキュアな環境を構成できます。

また、IAM 認証ではトークンを生成して接続するのですが、その有効期限が 15 分となっています。万が一トークンが漏れてしまっても、短い有効期限なので、セキュリティのレベルを向上できます。そもそもトークンが漏れること自体が危険なことですが、多層防御の観点を踏まえて、IAM 認証はセキュリティレベルを上げる良い方法の一つでしょう 🙂

この記事では、既存の Aurora 環境に IAM 認証を追加する手順を確認します。

# IAM 認証を有効化

まず、RDS の画面で、IAM 認証が使われているかを確認できます。Not enabled と表示されていると使われていません。設定変

元記事を表示

Windows から AWS Amplify で Android アプリの作成体験

# 背景
AWS Amplify を使って、GCP からのアプリ移植をやる必要に迫られてきたので学習とその記録

# 自身の状況
– AWS ほぼ初心者。6年ぐらい前に C# でアプリ開発してた環境で少し触った程度
– Web ほぼ初心者。10年ぐらい前に C# でバックエンドの開発に数年関わった程度。
– 正直、[blazor](https://dotnet.microsoft.com/ja-jp/learn/aspnet/blazor-tutorial/intro) をやりたい・・
– スマフォ 完全初心者

こんな状況でもなんとかするしかない、という危機的状況のおっさん :older_man_tone1:

# 把握
https://aws.amazon.com/jp/amplify/

まずは、以下動画を見て、なんとなくわかった気になる

https://youtu.be/uRbGMZ9oPjw/

# 準備
## AWS すら素人なので、無償環境を用意
カード入力が嫌だったのでこの手のは自宅ではやらない方針だったんだけど・・諦め :sob:

https://po

元記事を表示

AWS Price List Query API で AWS オンデマンド料金の表を作成する

# はじめに

前払いコストの投資による費用対効果を纏めるために現在のオンデマンド料金の表が欲しくなったため、`AWS Price List Query API`を利用しAWS CLIで特定サービスの料金表を作成しました。

https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html

## Require

– AWS CLI
– jq

## 指定したサービスの情報取得

抽出したかったサービスは限られていたのでまずは必要なサービスのメタデータを確認しました

“`bash
#!/bin/bash

# ——————————————————————————–
# 指定したサービスコードのメタデータのリストを取得
# ——————————————————————————–

元記事を表示

AWS Certified Data Analytics – Specialty 合格体験記

AWS Certified Data Analytics – Specialty (DAS-C01) に合格しました。
受験にあたり実施した内容を、誰でも参考できるように書きました。
コツとかも書きましたので、ぜひご覧ください。

https://aws.amazon.com/jp/certification/certified-data-analytics-specialty/

# 目次
1. 受験結果
2. 学習内容
3. 所要時間
4. コツ

# 1.受験結果
結果は783点でした。
合格ラインは750点なので、ギリギリでしたが合格です。
1発合格なので良し。

# 2. 勉強内容
前提として、勉強前のAWSに関する習熟度は以下の通りでした。
・AWS認定 CLF と SAA は取得済。
・AWSのデータ分析サービスは半年使っている。

## 使用した教材

**サンプル問題**
AWSが公式で提供しているサンプル問題です。
どんなことが問われるのか確認するために、一番最初に目を通しました。

https://d1.awsstatic.com/ja_JP/training-a

元記事を表示

AWS上にTerraform実行環境を最速で構築する

# はじめに
– Terraformの場合、CloudFormationと違い、PCやEC2など`実行環境の準備`とTerraformが使うための`認証情報(アクセスキー/シークレット or IAMロール)の設定`が必要になる。
– ちょっとテストでコード作成・デプロイしたい場合や、最初のリソース作成だけをTerraformでやりたい場合は、そのためにこれらに環境を準備することに手間を感じていた。
– そこでAWS CloudShellを使った`1分でできるTerraform実行環境の構築手順`を整理してみました。

# 最速Terraformデプロイ
## 0.必要なもの
– AWSアカウント
– Terraformデプロイに必要な権限を割り当てられたIAMユーザ(AdministratorAccess)

## 1.実行環境の起動
– Terraformデプロイに必要な権限を設定したIAMユーザでマネジメントコンソールにログイン。
– 上部のバーをクリックし、Cloud Shellを起動します。
![fig1.PNG](https://qiita-image-sto

元記事を表示

Aurora の MySQL 8.0 互換で、EXPLAIN ANALYZE を触ってみた

# EXPLAIN ANALYZE とは

MySQL 8.0.18 から、`EXPLAIN ANALYZE` が追加されています。SQL クエリーの頭に `EXPLAIN ANALYZE ` を付けることで、その SQL クエリーの詳細なパフォーマンスの分析をしてくれる機能です。SQL クエリーで複雑な JOIN をしている時に、どこにどれくらい時間が掛かっていそうなのかを分析してくれます。SQL クエリーのボトルネックの特定などで便利に使える機能です。

現時点では、SELECT 句で使えます。INSERT, UPDATE, DELETE では使えません。詳細な情報を知りたい方は、こちらのリソースも確認してみてください。

– https://dev.mysql.com/doc/refman/8.0/ja/explain.html#explain-analyze
– https://www.slideshare.net/NorvaldRyeng/mysql-80-explain-analyze
– https://hackmysql.com/post/book-2/

従来あっ

元記事を表示

AWSのWebサイト・ドキュメントを確認してみる(2022年10月)

使ったことのないAWSサービスだったり、使っているサービスの細かい情報だったり。
AWSについて情報を得たい場合、[AWS](https://aws.amazon.com/jp/) の製品ページだったり公式ドキュメントをまずは見るようには心がけています。

2022年10月現在、AWSのWebサイトでどんなページを参照しているかメモがてら残しておきます。

ちなみに本記事では各ドキュメントは日本語表示でみているので、言語が違うと見え方だったり選択肢の表示が違うケースがあるかと思います。

## 製品ページ

まずは基本となる製品ページ。

[AWS 公式サイト](https://aws.amabzon.com/jp/)  トップページにある製品から各サービスの製品ページへ遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/1148a595-b573-c01a-3f0e-f003735c9615.png)

使ったことのないサービスなどの場合、まずはこの製品ページ

元記事を表示

セキュリティグループのアウトバウンドについて

# はじめに

AWSの勉強中に「セキュリティグループはステートフル」という説明があったが、
このステートフルとは何なのだろうか。

ステートフルの意味は「保持する」という意味で、
セキュリティグループでは行きの通信を設定すると、戻りの通信も自動的に許可される。

ここではEC2を例に挙げるが、EC2への通信(インバウンド)を設定すれば、
EC2からの通信(アウトバウンド)を設定しなくてもいいのではないかと考えていたが、
ここは大きな間違い。

EC2から通信をしに行く場合はアウトバウンドの設定が必要になる。

# 試してみる
### 概要図
サブネット内に2台のEC2を用意しAサーバからBサーバへ通信を行う。
![qiita用1_縮小.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953845/9696921d-582f-ae45-b076-a399212ff11c.png)

### アウトバウンドに何も設定しない場合
今回はpingで試すがping送信元Aサーバのアウトバウンドは何も設定してい

元記事を表示

Amazon EC2にElastic IPアドレスを割り当てる

AWSマネジメントコンソールにログインしてください。
EC2ダッシュボードを表示してください。
[Elastic IP]をクリックしてください。
![スクリーンショット 2022-10-31 6.51.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/b56131fb-fe22-6d15-c233-01c491a77e43.png)

ElasticIPアドレスのページが表示されます。
ページ右上の[ElasticIPアドレスを割り当てる]をクリックしてください。
![スクリーンショット 2022-10-31 6.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/9cf2e3ed-25b4-5fe4-97d9-9c7925d73ca2.png)

ElasticIPアドレスを割り当てるページが表示されます。
初期設定のまま、何も変更せずに、[割り当て]をクリックしてください。
![スクリ

元記事を表示

【小ネタ】Glue Sparkのメモ

# 背景・目的
Sparkの実装について、目的別にまとめていきます。(随時更新します。)

# まとめ
GlueのSparkについて、目的別にまとめました。

# 実践
## 前提
– Glue Spark3.0を使用しています。
– 検証はGlue Sutdioを使用しています。

## 事前準備
### S3バケット
– 事前にインプットとアウトプット用に2つのバケットを用意しています。
### データ
#### sum-test-data.json
インプット用のバケットに以下のデータを用意しています。
“`
{“id”:”00001″,”category”:”c001″,”value”:”test1″,”num”:1,”timestamp”:”2022-10-01T10:00:00+0900″}
{“id”:”00002″,”category”:”c001″,”value”:”test2″,”num”:2,”timestamp”:”2022-10-02T10:00:00+0900″}
{“id”:”00003″,”category”:”c002″,”value”:”test3

元記事を表示

3分でAWS Lambda Function URLをSAM使ってデプロイする

## これは何

[SAM(Serverless Application Model)](https://aws.amazon.com/jp/serverless/sam/) を使って関数URLを設定したLambdaをデプロイします。
関数URLだけ使いたい(APIGatewayは使いたくない)というケースでテンプレの参考になればと思いました。
内容は比較的薄いです。

経緯

10000000年程前にAWS Lambda Function URLが提供されました。[記事](https://aws.amazon.com/jp/blogs/news/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/)
これはLambdaをHTTPで直接起動できる機能です。

今まではAPI Gatewayを経由しないといけなかったのですがLambda単体でできるようになって便利になりました。こ

元記事を表示

git cloneしたら”ModuleNotFoundError: No module named ‘awscli'”が発生した

# 事象
EC2でCodeCommitに対してgit cloneしたら、エラーになってしまいました。
“`bash
[ssm-user@ip-99-99-99-99 ~]$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/xxxxxx
Cloning into ‘xxxxxxx’…
Traceback (most recent call last):
File “/usr/bin/aws”, line 19, in
import awscli.clidriver
ModuleNotFoundError: No module named ‘awscli’
Username for ‘https://git-codecommit.ap-northeast-1.amazonaws.com/xxxxxx’: ^[^C
“`

– git cloneなのになぜかawscliがないというエラー
– エラーの後になぜかUsernameを尋ねられる

# 前提
– EC2(Linux2)

元記事を表示

初AWSサーバー構築してみた(EC2+RDS for PostgreSQL)

## 背景
業務でAWSを使用したテスト環境の構築を試みており、知識が少ないなと思ったため
また、AWS系の資格を取るにあたって実際に触りたいと思ったので、
技術部のAWSの学習計画に沿って行いました

## 手順

### VPCの作成
サーバーを立てるにあたって、広大なネットワークの空間にサーバーを立てる用の場所(土地的なもの)を作らないといけないので、VPCと呼ばれる仮想プライベートネットワーク空間を作成します
![VPC1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/c4b6ca07-162b-817e-38b5-d566443b2b1a.png)
まずコンソールのホーム画面から検索するなりなんなりしてVPCのコンソールに入ります
![VPC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/ee4175aa-2c78-132f-3b6d-8cb6c6126e3d.png)
「VP

元記事を表示

コンタクト追跡レコード(CTR)のFirehose~S3~経由のデータ連携 (前編)

![AmazonConnect_CTR改造.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/ec6e4172-64b4-bddc-842c-d8dd290cdf26.jpeg)

# 前提条件
Saleforce API Version : v55.0
serverlessrepo-AmazonConnectSalesforceLambda : 5.19.0
この記事は、2022/10頃に書かれています。

AmazonConnect自体には、コンタクト追跡レコードをFirehoseに流す機能があるけど、連携用のLambdaは提供されてないけど、提供されてるLambdaを流用して、どうにかならないかな?というお試しした話。

# 提供Lambdaのライセンス条項

Apache License, Version 2.0 とう事で

https://qiita.com/fate_shelled/items/a928709d7610cee5aa66

+ 自己責任で使ってね
+ 商用利用可
+

元記事を表示

IAMロールの一覧を出力する(AWS CLI)

windows
git bash
jqコマンド利用
AWS CLI利用

“`
aws iam list-roles | jq ‘.Roles[].RoleName’
“`

元記事を表示

OTHERカテゴリの最新記事