- 1. AWS EC2 RDS S3の組み合わせでインフラ構築する時にやること決めておくことリスト
- 2. G.U.Introduction
- 3. cloudwatch.get_metric_dataを利用してECSで実行しているタスク数を取得する
- 4. TerraformでAWS RDS Aurora MySQL3(MySQL 8.0互換)クラスタを最低限構築する
- 5. Docker+AWS Lambdaのローカルテスト環境を作成する
- 6. AWS SAAを1ヶ月半で2回不合格となり、3回目で合格したお話 (2022年2月)
- 7. EventBridgeではDescribe*やList*アクションは処理されない
- 8. ECSでGPUを使うタスクを実行する方法
- 9. AWS EC2でWindowsServerを構築してhttpsで接続するまでの手順
- 10. Presigned URLの発行と取得したURLを使用して画像ファイルをGET/PUTする。
- 11. AWSのアクセスキーをハードコードする
- 12. [AWS]Savings Plansとオンデマンドキャパシティー予約
- 13. AWS FargateではVPC Endpointを使う
- 14. git-secretsをwindowsに導入したときの手順
- 15. EC2起動のたびに自動的にEFSをマウントするようにする
- 16. AWSを学ぶ前のインフラの基礎
- 17. 【Terraform】aws_iam_policy_attachmentを使うとtfstate外のリソースにも影響を与える可能性
- 18. AWS認定資格をまとめてみた
- 19. 複数のAWS認定アカウントを統合する
- 20. AWS
AWS EC2 RDS S3の組み合わせでインフラ構築する時にやること決めておくことリスト
# 概要
– AWSにてベーシックなWebサービスをデプロイする際に必要な内容をリストにしてまとめてみる
# ご注意
– 筆者はAWS初心者です。もっと良い構築方法は必ずあります。抜け漏れもあるはずです。
# 仕様
– AWS EC2 AmazonLinux2インスタンスを用いてWebサービスを提供する。データはRDSのMySQLに格納する。
– 専用のVPCを作成する。
– VPCの中にパブリックサブネット1個とプライベートサプネットを2個を定義する。
– EC2インスタンスはパブリックサブネット内に設置
– 2個のプライベートサブネットはサブネットグループとしてグルーピングする。
– プライベートサブネットのサブネットグループはパブリックサブネットからのみ接続できる。
– EC2で提供するサービスはパブリックIPアドレスを用いてブラウザからアクセスするものとする(Route53でのドメインとIPの紐付けはしない)
– デプロイするアプリケーションでアップロードされるファイルなどはS3に格納する# やること
1. ネットワーク部分の設定
1. VPCの作成
G.U.Introduction
【Corporate Site】
[G.U.Labs株式会社] :https://gulabs.com/ja/
革新的な発想と技術で、より自由で楽しい世界を。
G.U.Labsは、ブロックチェーンが引き起こす様々な社会変革に対応するためのクラウドツールやソリューションの提供、セキュリティ技術、研究開発力を提供します。[G.U.テクノロジーズ株式会社]:https://gu-tech.com/
デジタルの力で、人々に自由を。
G.U.Technologiesでは、ブロックチェーンによる金融と情報が融合した新たなデジタル革命時代に向けて、豊かな発想と確固たる技術で誰もが自由で幸せな社会を作っていくことを目指します。【Product Site】
[G.U.Blockchain Cloud]:https://www.bccloud.net/ja/
日本初。簡単3ステップで
ブロックチェーン基盤を構築。
G.U.Blockchain Cloudは「誰でも簡単・低コスト」に初期導入が可能。Enterprise領域で利用できる機能やセキュリティを備えたEthereum互換ブロックチェー
cloudwatch.get_metric_dataを利用してECSで実行しているタスク数を取得する
事前準備:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/deploy-container-insights-ECS-cluster.html
def get_task_cnt():
“””
ECSタスク数の取得を行うReturns:ECSタスク数(int)
“””cloudwatch = boto3.client(‘cloudwatch’)
response = cloudwatch.get_metric_data(
MetricDataQueries=[
{
‘Id’: ‘m1’,
‘MetricStat’: {
‘Metric’: {
‘Namespace’: ‘ECS/ContainerInsights’,
TerraformでAWS RDS Aurora MySQL3(MySQL 8.0互換)クラスタを最低限構築する
# 環境
2022/03/01現在“`
$ terraform -v
Terraform v1.1.2
on linux_amd64
“`# tfファイル
## クラスタ設定
“`terraform:rds_cluster.tf
resource “aws_rds_cluster” “mysql80” {
cluster_identifier = “aurora-mysql80-cluster”engine = “aurora-mysql”
engine_version = “8.0.mysql_aurora.3.01.0”
// engine_versionをこう指定しないとデフォルトのAurora MySQL2(MySQL5.7互換)で設定されてしまう
// 8.0.mysql_aurora.までは共通で、後ろのバージョンはWebコンソールの”利用可能なバージョン”の値だと思われる
// 今回は値取得のために新しくクラスタを作成し、terraform importして取得したmaster_username = “
Docker+AWS Lambdaのローカルテスト環境を作成する
## 概要
Lambdaのローカルテスト環境をDockerで作成しました。本記事ではPythonで書いています。
公式ドキュメントを読んでも上手くいかなかったので、記事にします。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html
## 用意するもの
– Dockerコマンドを実行できる環境
## 構築手順
### ディレトリ構成
“`
(プロジェクトルートディレクトリ)/
├── Dockerfile
├── requirements.txt (不要なら作成しなくて良い)
└── app.py
“`
### ファイル作成“`Dockerfile:Dockerfile
FROM public.ecr.aws/lambda/python:3.8COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt .RUN pip3 install -r requirements.txt –target “${LAMBDA_TA
AWS SAAを1ヶ月半で2回不合格となり、3回目で合格したお話 (2022年2月)
## はじめに
AWS SAAを先日取得しましたので、勉強方法などをこの記事にまとめておきます。
これから受験する方などのお役に立てましたら幸いです。### 前提
– 普段はWebアプリケーションの開発やマネジメントをしている。インフラ構築の経験はなし。
– エンジニアになってから1年半くらい。
– CLFは持っていない。基本情報とかも持っていない。
– ネットワークやセキュリティーなどに関してもそこまで詳しいわけではない。## 勉強時間
ちなみに合格するまでに2回ほど不合格となりました。
不合格となると2週間後でなければ試験予約ができないため、不合格となった時点ですぐに2週間後の試験に予約してました。|1回目 |2回目 |3回目 |
|—|—|—|
| 709 | 689 | 760 |このような点数の推移でした。
## 1回目の受験対策
### 使用した教材
https://www.udemy.com/share/101rfM3@VnRe9xITREEIt7eG4Uva4BY7-bkZ1KhILVyUGvvOozzbVCL2cJ5w4zEmW
EventBridgeではDescribe*やList*アクションは処理されない
S3やDynamoDBへの攻撃を検知する一つの方法は、「どのようなデータを対象が持っているか」を攻撃者が知ることができるAPIの動向を確認することです。
例えば`ListBuckets`や`DescribeTable`といったAPIです。というわけで該当APIが呼ばれたらEventBridge経由でなにかすることを考えました。
しかし、公式ドキュメントにある通り、`List*`, `Describe*`, `Get*`アクションは無視されます。
https://docs.aws.amazon.com/ja_jp/ja_jp/eventbridge/latest/userguide/eb-ct-api-tutorial.html>CloudTrail 経由で送信されるイベントはすべて、detail-type の値が AWS API Call via CloudTrail になっています。キーワード List、Get、Describe で始まる API アクションからのイベントは EventBridge によって処理されませんが、以下の AWS STS アクションからのイベント
ECSでGPUを使うタスクを実行する方法
## 経緯
自分がAWS初心者ということもあり、ECSでGPUを使うタスクを実行するまでに、いくつか詰まるところがあったので共有します。## やりたいこと
自分がやりたかったことは、下の画像のような流れを作ることです。画像データがS3にアップロードされたタイミングで、LambdaがECSの機械学習関連のタスクを実行して、処理の結果をs3にアップロードするというものです。

今回は、画像の赤枠で囲まれた、ECSでGPUを使うタスクを実行する方法を説明します。## 手順
以下の手順では、起動タイプがEC2のECSのタスクのやり方です。[こちら](https://github.com/aws/containers-roadmap/issues/88)のやりとりを見てみたところ、現時点では**FargateはGPUサポートされていない**みた
AWS EC2でWindowsServerを構築してhttpsで接続するまでの手順
## 背景と実施したこと
仕事の都合でAWSでWindowsServerを作る機会がありました。
WindowsServerの構築・設定は慣れていない部分もあったので手順を残しておきます。
IT初心者の方にとっては、Webアプリをインターネットに公開するまでの流れがわかると思うので機会があれば参考にしてみてください。参考にした記事
[freenom](https://www.lancork.net/2019/05/how-to-use-freenom-free-domain/ “freenom”)
[Amazon EC2(Windows OS)で構築したWebサーバ(IIS)のSSL設定](https://qiita.com/u-bayashi/items/9a8570f412db0a28763c)## Step
1. EC2 WindowsServerの構築
1. インスタンスの作成
1. Elastic IPアドレスの割当
1. セキュリティグループの設定
1. リモートデスクトップでの接続
1. IISのインストール・ローカルでの確認
Presigned URLの発行と取得したURLを使用して画像ファイルをGET/PUTする。
## 目的
コンテンツをサーバー上にアップロード・ダウンロードして配信するというユースケースがある。コンテンツを保持しておくサービスとして、AWSにS3というサービスがあるのでそれを利用する。## 環境
– AWS Lambda Python 3.9## Lambdaコード
“`python
# — coding: utf-8 —
import boto3
from botocore.client import Config
import osREGION_NAME = os.environ[‘REGION_NAME’]
S3_BUCKET_NAME = os.environ[‘S3_BUCKET_NAME’]
DURATION_SECONDS = os.environ[‘DURATION_SECONDS’]
KEY_NAME = os.environ[‘KEY_NAME’]s3 = boto3.client(‘s3′, config=Config(signature_version=’s3v4’))
def lambda_handler(event, cont
AWSのアクセスキーをハードコードする
ソースコードを公開するわけじゃないしAWSの認証キーはハードコードしても良いよね。
という事で色々と調べました。ビルドした実行ファイルは第三者に渡す可能性があるかも、というシチュエーション。
## 結果
– **ベタでハードコードした場合**
– 中間言語だろうがネイティブコードだろうが即バレ
– 当然ですね。
– ただ、バイナリから抽出した文字列一覧から「コレ、AWSの認証情報だな??」と感じ取るセンスは必要。
– 難読化した場合
– **.NET(C#) 中間言語にコンパイルした場合**
– 難読化したところで実行ファイルからソースコードを復元出来る可能性が高いのであまり意味はない。ちょっとした時間稼ぎ程度。
– 「このアプリ、難読化された認証情報がハードコードされてそうだな」と感じ取るセンスが必要。
– **C++等ネイティブコードにコンパイルする
[AWS]Savings Plansとオンデマンドキャパシティー予約
AWSの「Savings Plans」と「オンデマンドキャパシティー予約」の紹介です。
「Savings Plans」はリソースの使用料金が割引になる仕組みで、「オンデマンドキャパシティー予約」と組み合わせると柔軟な運用が可能になります。## Savings Plansとは
1年または3年の期間で特定の使用量(USD/時間で測定)を契約すると使用量の割引が受けれる料金プランで、オンデマンドと比較し最大72%の割引を受けることが出来ます。
例えば$100/時間で契約をした場合、1時間あたり$100までの利用に対して割引が行われ、1時間あたり$100を超えた場合はオンデマンドの料金が適応されます。3種類のプランがあり、プランによって適応可能なサービスは異なりますがAmazon EC2、AWS Lambda、AWS Fargateなどに利用です。
EC2以外のサービスに適応できる点がうれしいですね。同じような仕組みでリザーブドインスタンスがありますが、Savings Plansは利用料に対するコミットなのでリザーブドインスタンスと比較し構成を柔軟に変更しやすいメリットがあります。
AWS FargateではVPC Endpointを使う
AmazonECRからコンテナイメージをpullし、private-subnetにおいてFargateでホストされるAmazonECSタスクを運用します。コンテナイメージをpullする際は、インターフェイスタイプのVPCエンドポイントを使用するようにし、それ以外はNatGatewayを使用することで通信費を大幅に低減させつつ、セキュリティを高めることができるのでおすすめです。
ちなみにNatGatewayを使用する場合、後で請求を見て驚かないように下記3点のコストを意識する必要があります。
だとしてもSquidを構築して運用する気にはならない…
– 時間単位料金
– データ処理料金
– 転送料金:インターネットへの通信、NatGatewayとEC2インスタンスが異なるアベイラビリティーゾーンにある場合に発生
冗長構成で1GB使用する想定だと **$90.64**となります。“`bash:runningcost
730 時間 (1 か月) x 0.062 USD = 45.26 USD (ゲートウェイの 1 時間あたりの使用料金)
1 GB/月 x 0.062 USD = 0.
git-secretsをwindowsに導入したときの手順
# 1. PowerShellの設定を変更する
– 管理者権限でPowerShellを起動する
– 作業ディレクトリはホームディレクトリ(C:\Users\PC_User とする)
– PowerShellでスクリプトを実行できるよう設定を変更する“`
PS C:\Users\PC_User> Set-ExecutionPolicy RemoteSigned
“`# 2. git-secretsをインストールする
“`
PS C:\Users\PC_User> git clone https://github.com/awslabs/git-secrets.gitPS C:\Users\PC_User> cd .git-secrets
PS C:\Users\PC_User\.git-secrets> ./install.ps1
“`# 3. gitの設定ファイルにAWSアクセスキーのパターンを登録する
“`
PS C:\Users\PC_User\.git-secrets> cd ~PS C:\Users\PC_User> git secrets
EC2起動のたびに自動的にEFSをマウントするようにする
## 自動でEFSをマウントしたい・・・
複数のEC2でEFS(Elastic File System)をマウントして「ネットワークファイルシステム完成!」と思ったら、なんてことはなく、EC2を再起動するとマウントは解除されてしまいました。。。定期的なEC2の停止⇒起動がサイクルに含まれているサービスの場合、これはちょっと困ります。
なので起動の度に自動でEFSをマウントするよう設定してみようと思います。
### 環境
Amazon Linux2です。## amazon-efs-utilsをインストール
まさにこの要件のためのツールが提供されているようなので、こちらをインストールします。“`bash
$ sudo yum install -y amazon-efs-utils
“`## EFSをマウントする
“`bash
$ sudo mount -t efs <ファイルシステムのID>:// <マウントディレクトリ>
“`マウント出来ているか確認します。
“`bash
$ df -h# マウントしたEFSが表示されていればOK
<ファイル
AWSを学ぶ前のインフラの基礎
# インフラとは
***インフラは「インフラストラクチャー」の略称です。***
webアプリケーションが動くための土台の役割があります。
代表的なサービスに“`AWS “`があります。# 記事の概要
この記事は***インフラの業務をするための最低限の基礎知識を
知るための記事***です。
AWSを学ぶためには基礎知識が必要になります。***AWSを学ぶ前段階の記事***です。# おすすめ資料
https://qiita.com/toma_shohei/items/b7a001d26bd988d52021AWSのような代表的なサービス詳細はこの記事に載っています。
こちらの記事を読む前段階としてご活用ください。クラウドエンジニア向けの資料がいろいろ載っているみたいです。
https://qiita.com/yoshiyama_hana/items/96dbe0b82ca783c86be0
# オンプレミス
自社内でサーバーなどの設備を管理したり、運用したりする自社で完結するシステムです。
最近は“`クラウド“`が台頭したことにより、オンプレミスを扱う企業は
【Terraform】aws_iam_policy_attachmentを使うとtfstate外のリソースにも影響を与える可能性
# これはなに?
Terraformを用いて、AWS環境のIAMロールとIAMポリシーのアタッチをする際に
[iam_policy_attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy_attachment)を使用するとハマる罠があるのでその事象についてのメモです。## 事象
例えばですが、下記の様な記述でIAMロールへIAMポリシーをアタッチしていると想定します。
“`iam.tf
# ロール
resource “aws_iam_role” “lambda_role” {
name = “kurono-policy-test-role”assume_role_policy = <
AWS認定資格をまとめてみた
## AWS認定試験一覧をまとめてみました。
(参考:https://aws.amazon.com/jp/certification/exams/?nc2=sb_ce_exm)はじめに私自身もAWS認定資格を全て取得しています。
以下を参考に是非、AWS認定の受験を検討してはいかがでしょうか。
## AWS試験一覧
| 試験名 | 受験コード | 受験料 | 難易度 |
|:-:|:-:|:-:|:-:|
| AWS 認定 クラウドプラクティショナー | CLF-C01 | 11,000 |低 |
| AWS 認定 ソリューションアーキテクト – アソシエイト | SAA-C02 | 15,000 |中 |
| AWS 認定 SysOps アドミニストレーター – アソシエイト | SOA-C01 | 15,000 |中
複数のAWS認定アカウントを統合する
* * *
### こんな人にオススメの記事です
* 複数のAWS認定アカウントをマージしたい人
* 会社が変わってメールアドレスを変更したい人
* メールアドレスが単純に変更になった人
* * *結論からいうとAWS認定アカウントを統合する方法は、AWSサポートから
リクエストを送る必要があります。
手順を以下に紹介します。①. 下記URLからAWSの認定チームへ問い合わせを行います。
https://aws.amazon.com/jp/contact-us/aws-training/個人情報を記載の上、
問い合わせの本文は英語にて問い合わせした方がよいです。
簡単な英語でよりので翻訳機能を使って送ってしまいましょう。
(私も他のサイトを参考に以下のように送りました。)
“`
I want to migrate my A
AWS
#AWS(アマゾンウェブサービス)について
AWSとは:::note
クラウドコンピューティングを使ったクラウドサービスのこと
:::
<クラウドコンピューティングとは>+ サーバー、データベース、ソフトウェア、ストレージなど、インターネット経由で利用できるクラウドサービスのこと。
+ WEBサービス、WEBサイトの構築、運用ができる。(Amazon EC2、Amazon Lightsail)
+ データのバックアップ、災害対策。(Amazon S3)。
+ 基幹、業務システムの構築
+ 統合開発環境の構築(Amazon Cloud9)
+ 200以上のサービスをクラウド上で管理できる。##AWSにおけるアカウントとユーザーの違い
❶アカウント→入居場所みたいなもの
❷ユーザー→使う人?##rootユーザーとIAMユーザーの違い
rootユーザー↓:::note
AWSアカウント作成時に使用したEメールアドレス、パスワードを使用してサインインすることができるアカウントのこと。
::::::note alert
rootユーザーは、アカウントのすべてのAWSサービ