- 1. 【AWS S3】大量のオブジェクトが保存された複数のS3バケットをシェルで一括削除
- 2. Step Functions のパラメータで配列を扱いたい
- 3. AWS DeepRacer 日記 第1回(2021/10) ※なんと初月にプロリーグ参加を達成
- 4. 一番レイテンシーの低いAWSリージョンはどこ?ざっと計測するには
- 5. API GatewayのIAM認証が拒否された際の原因調査
- 6. [チュートリアル]AWSにEC2,RDS,S3の環境を作ってWEBアプリケーションを動かす
- 7. DynamoDBの自動バックアップ/Export機能を使ってみた
- 8. 困ったことと解決したことメモ_20211111
- 9. CloudWatchLogsからKinesisFirehose経由でS3に配置したログをAthenaでSelectする
- 10. CodeBuild内のDockerデーモンにProxy設定をする方法
- 11. Glue Jobでpandas has no attribute ‘json_normalize’に四苦八苦した
- 12. Jenkinsとgitlabで基本的なCI-CD設定方法を説明します
- 13. awsにssh接続しhttpdは再起動出来たが 外部接続する http://hogehoge のIPアドレスが分からない
- 14. 【AWSコスト削減の道】EC2編 ※ スポットインスタンス変更編
- 15. ALBへのアクセスをCloudFront経由のみに制限してみた
- 16. Amazon FSx for NetApp ONTAP を Terraformでデプロイしてみる (AWSプロバイダ編)
- 17. AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
- 18. プライベートなEC2にCodeDeployでデプロイしてみた
- 19. DatabricksランタイムのメタストアとしてAWS Glueデータカタログを使う
- 20. EKS で1つのノードに配置できるPod数を増やす
【AWS S3】大量のオブジェクトが保存された複数のS3バケットをシェルで一括削除
# これはなに?
大量にあるS3バケットの削除方法についてのメモです。
自分の例だとS3バケットが100個近くあり、オブジェクトも600万オブジェクト(12TB)くらい、その時の消す策として参考になればと思います。## 事前準備
### S3バケットへの全ての書き込みをバケットポリシーで拒否するようにします。
“`json:policy.json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “ALLWtite”,
“Effect”: “Deny”,
“Principal”: “*”,
“Action”: “s3:PutObject”,
“Resource”: “arn:aws:s3:::バケット名/*”
}
]
}
“`
・下記のライフサイクル設定後などにも、システムが動いていて書き込みが行われ続けるとS3バケットの削除が行えないため、書き込みを全て拒否します。
### S3ライフサイクルを設定して1日後に全てのオブジェクトが消えるよ
Step Functions のパラメータで配列を扱いたい
## 組み込み関数の States.Array を使う
https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html> **States.Array**
> This intrinsic takes zero or more arguments. The interpreter returns a JSON array containing the Values of the arguments, in the order provided. For example, given the following input:>“`
{
“Id”: 123456
}
“`> You could use
>“`
“BuildId.$”: “States.Array($.Id)”
“`
Which would return “BuildId”: [123456]## Example
AWS SDK
AWS DeepRacer 日記 第1回(2021/10) ※なんと初月にプロリーグ参加を達成
AWS DeepRacer 日記 2021/10
2021年10月から本格的にDeepRacerリーグに参加し始めました。
今回はDeepRacer日記第1回です。
筆者の試行錯誤を記載していきます。
参考になればうれしいです。※DeepRacer参加方法については下記にまとめています
https://qiita.com/toma_shohei/items/a79abd8d71a2e284273f
# 10/4
## 学習### まずは車の作成(メニュー:Reinforcement learning>Your garage)
![スクリーンショット 2021-10-04 220105.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311339/ce7efb15-30fb-03ab-6873-36e6bbdef393.jpeg)Stereo Cameraは障害物検知に特化なので、タイムトライアルならCamera一択だと思います。
※誰でも参加可能なVirtualLeagueはタイムト
一番レイテンシーの低いAWSリージョンはどこ?ざっと計測するには
# 簡易的な計測方法
API Gateway の API を各リージョンに作って、それにリクエストして・・・となると若干手間がかかってしまいます。そこで、DynamoDB がクレデンシャルもいらない、以下のオープンなリージョナルエンドポイントを公開しているので、そことの通信をもとに計測できます。
– https://dynamodb.us-west-2.amazonaws.com
– https://dynamodb.ap-northeast-1.amazonaws.com# 使うライブラリ
[measure-region-latency](https://github.com/yoramen/measure-region-latency) にワンライナーで実行するスクリプトを置いたので、これを使えば全リージョンに対してレイテンシーを計測できます。
## 結果サンプル
“`
Response time percentiles (approximated)
Type Name 50% 66% 7
API GatewayのIAM認証が拒否された際の原因調査
API Gatewayで構築したREST APIにてIAM認証を設定した際に、APIコールがIAM認証に阻まれる原因を突き止めるのにさんざんつまづいたので、つまづいた内容や対応手順について整理しておく。
##検証環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271327/a133595e-bcbd-b871-dc8c-1ad9ffad07d6.png)
– API Gatewayで構築したAPIは[プライベートREST API](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-private-apis.html)
– VPC内部からAPI Gateway用のVPC Endpoint経由でのみアクセス可能
– APIではGETメソッドを作成
– APIにはAPI GatewayリソースポリシーとIAM認証を設定している
– プライベートAPIの
[チュートリアル]AWSにEC2,RDS,S3の環境を作ってWEBアプリケーションを動かす
#0. はじめに
「AWSの基礎を理解したいのですがどうしたらいいでしょう?」と知人に聞かれて、「こんなことやってみたらいいんじゃないでしょうか!」と提案したものの、自分ではやったことなかったのをきっかけに作り始めたチュートリアルです。
WEBサービスもサーバレスになっていく時代の流れもありますが、このチュートリアルではAWSを勉強し始めたら最初に出てくるEC2(サーバー)とRDS(データベース)とS3(ストレージ)を使ってWEBアプリケーションを作ることを通して、AWSの基礎を理解することを目的にしています。
筆者も何度も環境を作ったり壊したりするうちに、自然とAWSの理解が進みました。このチュートリアルが、みなさんのAWSの理解の一助になれば幸いです。
また、初心者が書いたチュートリアルですので、抜け落ちや間違い等ありましたらご指摘いただけたらと思います。よろしくお願いいたします。
##自己紹介
* WEBエンジニア2年目(インフラは未経験)
* 2年前にAWSのSAA(ソリューションアーキテクトアソシエイト)という設計の資格は取得したものの、その後AWSにまったく触
DynamoDBの自動バックアップ/Export機能を使ってみた
# はじめに
AWSのリソースを引っ越しする要件があってDynamoの移行について調べていたところ、最近エクスポートする機能がリリースされたようで、早速使ってみたので書き残してみます。
以下も参考にしました。https://qiita.com/bassaaaaa/items/5114bfd28bd3832d1f6a#aws-cli%E3%81%A7dynamodb-export%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B
# PITR:ポイントタイムリカバリとは
Dynamoのテーブル設定でPITRをONにすることで、日次で自動バックアップが取られ、リカバリができるようになる機能です。
この機能を有効にしないとエクスポートはできません。
エクスポートが済んだら無効に戻すこともできます。# 使ってみた
上記参照した手順はCLIを使っていますが、マネジメントコンソールからでも簡単に使えます。
テーブルのバックアップ設定で、PITRを有効化します(デフォルト無効)![image.png](https://qi
困ったことと解決したことメモ_20211111
#pandasデータフレーム抽出がうまくいかなかった
“`python
pd.drop([1:5])
“`
としても何もならない
##解決方法
“`python
pd.drop(range(1,6))
“`
#変数を作りすぎて訳がわからなくなる
全部dfとかresとかにしてしまうと後半死ぬ
##解決方法
面倒くさがらずに、長くなってもいいので、しっかりネーミングする#S3からCSVを取り込む
色々エラーが出てよくわからなくなる
とりあえずcsvの型はbytesなので下のようにやるとうまくいく
##解決方法
“`python
obj = bucket.Object(object_key_name)
r = obj.get()
b = r[‘Body’].read()
df = pd.read_csv(io.BytesIO(b))
“`#Unable to import module ‘app’: No module named ‘app’
cloud9で`sam local invoke`を実行すると発生するエラー
##原因
`template.yaml`の“
CloudWatchLogsからKinesisFirehose経由でS3に配置したログをAthenaでSelectする
### 前提
以下ログがS3に配置されいてること(非圧縮)“`text:Test-Firehose-CloudwatchlogsToS3-202111-02-41-2021-11-10-06-45-49-cbfe4fff-6fe4-38d1-8835-c15cf94b08d3
{“messageType”: “DATA_MESSAGE”, “owner”: ““, “logGroup”: “/test/CloudWatchLogs/LogsToFirehose/202111-01”, “logStream”: “LogsToFirehose-202111-01”, “subscriptionFilters”: [“Test-Firehose-CloudwatchlogsToS3-202111-02”], “logEvents”: [{“id”: “36495610292092529380037177934895819345077418786389491712”, “timestamp”: 1636519765021, “message”: “test-01\
CodeBuild内のDockerデーモンにProxy設定をする方法
Proxy環境下では `http_proxy` 、 `https_proxy` 、`no_proxy` の環境変数を利用すると思います。
特にDockerを利用する場合はdockerd自体がProxyの設定を認識する必要があります。通常は以下のように設定したりします。
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
しかし、CodeBuildにおいてはジョブ開始時からDockerが立ち上がった状態です。そこで以下のようにdockerのプロセスを一度落として、その後起動することでProxy設定を読み込むことが可能です。
“`yaml
version: 0.2# Proxy関連の環境変数は事前設定されている前提
phases:
# 省略
build:
commands:
– docker info
– kill -9 $(cat /var/run/docker.pid)
– while kill -0 $(cat /var/run/docker.pi
Glue Jobでpandas has no attribute ‘json_normalize’に四苦八苦した
# 前提(長くて説明下手です)
ETL処理をGlue jobを用いて、自動化しようとしたときに“`python
import pandas
from pandas.io.json import json_normalize
df = pandas.json_normalize()
#~ 中略 ~
“`
というように処理をGlueスクリプトに書いていたが、jobを実行してみるとエラーログには何も書かれておらず、module ‘pandas’ has no attribute ‘json_normalize’というログのみ書かれていた。またjobのstatusは、「Succeeded」になっているが、肝心のcsvファイルはs3にアップロードされていない。
この時初めて知ったのだが、json_normalizeはpandasのversion >= ‘1.0.0’で実装されており、Glueでのpandasのversionを確認したところ、0.~であり、1.0.0より前のversionだった。Glue スクリプトでは、pipを叩くことはでき
Jenkinsとgitlabで基本的なCI-CD設定方法を説明します
この記事では、CI-CDの使用法に精通し、CI-CDの概念を理解し、基本的なCI-CDの設定方法を解説します具体的には、この記事では、AWSとJenkinsでCI/CDの設定を作成して、コードのデプロイプロセスを自動化する方法について説明します。
## [CI-CDとは](https://onetech.jp/blog/what-is-ci-cd-in-software-development-12724)?
CI/CDはContinuous Integration、通称CIと、Continuous Delivery、通称CDを合わせたもので、日本語では継続的インテグレーション/継続的デリバリーといいます。CIとCDをセットで使用することによって、作業からテスト、そして公開までの流れを自動化によって効率よく迅速且つ継続的に実施することができます。
このツールを利用すれば、よりユーザーのニーズに応えやすくなり、バグの改善にも早く対応することができます。
##JenkinsのCI-CD
Jenkinsは、自動化操作を構築するオープンソースのCI-CDです。 この記事では、Jenki
awsにssh接続しhttpdは再起動出来たが 外部接続する http://hogehoge のIPアドレスが分からない
以下質問書いている途中で思い出したのでメモ失礼いたします。
“`
お世話になっております。時間が出来たため
以前ショッピングカート(?)を作り途中だったawsのEC2を弄っております……ssh接続は出来て
“
[root@ip-111-22-3-202 ~]# service httpd restart
“
としてふとアクセスしようとしたのですが
awsで動作しているEC2のグローバルIPアドレスが分かりかねます……ifconfig で表示された
“
[root@ip-111-22-3-202 ~]# ifconfig
eth0: flags=4163mtu 9001
inet 111.22.3.202 netmask 255.255.240.0 broadcast …
“
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑のIPアドレスではないようなので
どのようにして今ssh接続しているawsのIPアドレスはわかるのでしょうか?“`
……とココまで書いてawsに接続すると”
【AWSコスト削減の道】EC2編 ※ スポットインスタンス変更編
# 【AWSコスト削減の道】EC2編
## 前提
* 前回ページにて紹介しているTerraformを用いて環境を構築している
* Terraformを用いた開発環境構築について## 概要
* 開発環境用に使用しているEC2インスタンスをスポットインスタンスに変更をおこなう
* 使用する時間になったら自動的にスポットインスタンスを起動する
* 使用していない時間に関しては自動的にスポットインスタンスを停止する## 背景
* 開発環境用に利用していたEC2インスタンスがオンデマンドインスタンスだったので、スポットインスタンスに比べ料金が高くなっていた## 本記事内の利用技術について
* ALBへのアクセスをCloudFront経由のみに制限してみた以前、
[パブリックなALBからプライベートなEC2にアクセスしてみた](https://qiita.com/mn87/items/5b36795ef03dde846d74)
という記事を書いた際、
>CloudFrontを合わせて、CloudFront経由のアクセスのみ許可し、EC2、ALBの直接アクセスは禁止するということもできると記載したので、今回はその方法を紹介します。
# 構成図
![temp-CloudFront.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1162215/9a25e5cf-65bb-1d03-7e78-490ac083afc2.png)・EC2はプライベートサブネットに設置
・EC2へのアクセス制限はセキュリティグループで実施
・ALBはパブリックサブネットに配置
・ALBへのアクセス制限はリスナールールで実施
・CloudFrontのオリジンにALBを指定# 前提
・VPCは`10.0.0.0/16`で作成済み
・プライベートサブネットは`1
Amazon FSx for NetApp ONTAP を Terraformでデプロイしてみる (AWSプロバイダ編)
# Amazon FSx for NetApp ONTAP を Terraformで試してみる : AWSプロバイダ編
[以前の記事](https://qiita.com/yoihoka/items/9989859184c83b87d8db)で Amazon FSx for NetApp ONTAP を Terraform でデプロイする手順を紹介しましたが、AWSプロバイダでもAmazon FSx for NetApp ONTAPをデプロイ可能になりました。さっそく試してみましたので手順を紹介したいと思います。こちらのやり方では、AWSプロバイダのみで実施ができますので非常にシンプルにデプロイを実施できます。
一方、[以前の記事](https://qiita.com/yoihoka/items/9989859184c83b87d8db)で紹介したNetApp CloudManagerプロバイダを併用するやり方では、Cloud Managerをつかった より利便性の高い利用を行うのに必要な Connectorのデプロイなどもあわせて実施できます。
利用シーンにあわせて使い分けてい
AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
# AWS(api gateway, lambda, SES, S3)を用いてお問い合わせフォーム付きウェブサイトを作成する
こんな感じでシンプルに件名とメッセージだけ入れてメールで送信します。
![rapture_20211110233814.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356208/bfde2080-2972-f579-4fd0-a459887546f9.jpeg)
AWSのapi gateway, lambda, SES, S3を用いて、S3上にアップロードした静的ウェブサイト上からメールを送信したので、その手順を記録しておきます。大まかに以下のような手順となります。
* SESへのメールアドレスへの登録
* lambdaを用いてメールの送信用の関数を作成(今回はPythonで行った)
* api gatewayへのlambda関数の登録
* apiを叩くためのwebサイトの作成
* 作成したwebサイトをS3上にアップロードし、公開する。## SESへのメールアドレ
プライベートなEC2にCodeDeployでデプロイしてみた
DVAでCodeDeployを触っているうちに楽しくなってきたと同時に、
「なんだかプライベートなEC2にもVPCエンドポイント経由でデプロイしたいなあ」
と思って調べていたらできたので、今回はプライベートなEC2にCodeDeployでデプロイする方法を紹介します。# 先に参考資料
・[Use CodeDeploy with Amazon Virtual Private Cloud](https://docs.aws.amazon.com/codedeploy/latest/userguide/vpc-endpoints.html#vpc-codedeploy-agent-configuration) (公式ドキュメント)
・[【AWSの呼吸 弐ノ型】CodeDeployでVPCエンドポイントを設定する](https://wing-degital.hatenablog.com/entry/2021/01/12/184259)
最初は公式ドキュメントを呼んだのですが、いまいちよくわからなかったので、後者のブログを参考にしました。
すごくわかりやすかったです!# 構成図
![te
DatabricksランタイムのメタストアとしてAWS Glueデータカタログを使う
[Use AWS Glue Data Catalog as the metastore for Databricks Runtime \| Databricks on AWS](https://docs.databricks.com/data/metastores/aws-glue-metastore.html) [2021/9/14時点]の翻訳です。
DatabricksランタイムでAWS Glueデータカタログをメタストアとして使用するように設定できます。これはその場で使えるHiveメタストアの代替として使用できます。
それぞれのAWSアカウントには、AWSリージョンにAWSアカウントIDと同じカタログIDを持つ単一のカタログがあります。Databricks向けにGlueカタログメタストアとして用いることで、AWSサービス、アプリケーション、AWSアカウントにまたがった共有メタストアを活用する可能性があります。
複数のDatabricksワークスペースで同じメタストアを共有するように設定することができます。
本文では、インスタンスプロファイルを用いてDatabricksでG
EKS で1つのノードに配置できるPod数を増やす
## 一つのEC2インスタンスで実行できるPod数の制限について
EKS では、RDS などの AWS リソースに対してシームレスにつながるように、PodにVPCネットワーク上と同じIPアドレスが付与されます。
ノードをEC2で構築している場合、EC2のENIが持っているIPから割り振られるのですが、インスタンスタイプよって持てるENIの最大数が決まっており、また1つのENIで持てるIPアドレスの最大数も決まっています。このIPアドレスからPodに割り当てられないIPアドレスや`aws-node` と `kube-proxy` に割り当てられるIPアドレスなどから、Podに使用できるIPアドレス数、つまり1つのインスタンスで実行できるPodの上限数となります。![fig1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46847/747259e1-7a6f-1634-5311-8aee17567fb0.png)
インスタンスタイプとPodの上限数は以下のページにまとまっています
[amazon-eks-a