🐥

2/13~2/17で技術的にやったこと

2023/02/19に公開

VPCとサブネットとセキュリティグループについて

改めて色々

AZとは?

マルチAZとは?

VPCとは?

  • VPCはリージョンを跨げない
  • VPCはAZを跨げる
  • VPC内には複数のサブネットが作成可能
  • パブリックサブネットはネットワークからの接続が可能
  • パブリックサブネットはインターネットゲートウェイへのルーティングが必要
  • サブネットはAZを跨げない
  • プライベートサブネットはネットワークからの接続はできない
  • サブネットの中にAWSの各サービスを設置する
  • パブリックサブネットには外部からの接続が可能なwebサーバーやプロキシサーバーを設置する
  • VPCと外部のネットワークを接続する際は色々なサービスがあるが、内向きか外向きかで使用するサービスを決められる

セキュリティグループとは?

  • EC2インスタンス単位で適用
  • ホワイトリスト方式(許可設定のみを指定)
  • ステートフル(戻りトラフィックのルールは不要)
  • 全てのルールが適用される
  • セキュリティグループのIDを指定できる

ネットワークACLとは?

  • サブネット単位で適用(同一サブネット内の通信は制御できない)
  • ブラックリスト方式(許可・拒否双方指定可能)
  • ステートレス(戻りトラフィックも許可設定する必要がある)
  • 指定順通りのルールが適用される
  • セキュリティグループのIDを指定できない

ルートテーブルとは?

  • メインルートテーブルはVPCごとに自動で作成されるルートテーブル。サブネットルートテーブルが設定されていないサブネットに適用される。
  • サブネットルートテーブルは自分で作成してサブネットを紐付ける

この記事最強

VPClambdaについて

基本的にlambdaはAWSが用意したネットワーク上に作成されるが、ユーザーが管理するVPC上にアクセスしたい場合は別途でVPCの設定をすることができる。これをVPClambdaという。実際にはVPC上にlambdaがあるわけではなく、VPC上に作成されたENIを経由してlambdaへ接続できるようになる。
ENIが作成される関係上、特段設定をしない状況で他のサービスにアクセスしようとすると権限エラーでアクセスできなくなる

The provided execution role does not have permissions to call CreateNetworkInterface on サービス名

だから、lambdaにVPCの設定とサービスセキュリティポリシーを設定する必要がある

ストリーミングレスポンスのencordについて

APIからのレスポンスの中でファイルを扱う必要があった。その時にstreamingresponseを使用しているが、エンコードエラーが出るようになった。
理由は作成したファイルをutf-8BOM付にしたためだと思う。
ファイルのエンコードを指定したから、streamingresponse側でも指定しないと意図しないエンコード?が発生するためエラーとなるっぽい。

参考
https://github.com/encode/starlette/issues/1019

同じような事象の人が上記でいて、その人を参考にencodingを設定して解消された。

結局調べたら

参照
https://qiita.com/yutoo89/items/c59a6a920b1bd6a72d59

0から1を作る大切さ

マインド的な話

久々に0からサービスを作ろうと思ったけど、これがまた色々と大変だった。普段業務は大枠は作られているから、改修とかがメインでコアな実装の部分で触れることはないけど、自分で作る必要がある。
なんでこれやる必要があるのか、この実装でいいのか、これで繋げないけど?DBに接続ってどうやるんだっけ?..etc

これがまた面白い。

改めて勉強にもなるし、理解できていなかった部分も理解が深まる。
これだからエンジニアって面白い。
(今後はawsに乗っけたいと思っているし、CI/CDも使って自動化を図っていきたいから勉強す量は増えていく・・・)

snowflakeってなんだ?

Snowflakeは、Snowflake社の提供する、クラウドベースで動くSaaS型データ分析用DWHです。従来の伝統的なDWHに比べて柔軟性が高く、AWS・Azure・GCPなどのクラウドサービス上で動作します。
Snowflake以外のクラウド型DWHとして、Amazon RedshiftやGoogle BigQueryなどが代表的です。
DWHとは、データウェアハウス(Data Warehouse)の略で、「データを格納する倉庫」のことを指します。売上、在庫、顧客情報といった、企業の蓄積する大量のデータを集約する役割を持っています。
さらに、蓄積したデータを分析しやすい形に整理整頓する機能を併せ持っている点が、データを一元的に蓄積するデータレイクと異なる点です。

データ分析とかで使えるとのことで、しかも各クラウドでも使えるから便利とのこと。
イメージはデータ格納にはsnowflakeを使って、データ蓄積しておく。
ec2とかにあるアプリからsnowflakeに入っているデータを加工して表示する?ってイメージかな?
けど、RedshiftやBigqueryとかと何が違うのか?

RedshiftとSnowflakeの主な違い

  • Snowflakeでは、コンピュートをストレージとは別に、使った分だけ払うシステムを採用している
  • Snowflakeは、RedshiftよりもJSONベースの関数やクエリのサポートが充実している
  • Snowflakeは即時スケーリングが可能、一方Redshiftはノードの追加に数分かかる
  • Snowflakeは、Redshiftよりもメンテナンスの自動化が進んでいる
  • Redshiftは、Amazonの豊富なクラウドサービスとビルトインセキュリティをよりよく統合している
  • Redshift Spectrumは、S3データレイクにまたがるRedshiftの検索を拡張する

データウェアハウスって何のメリットがあるんだっけ?

データウェアハウスがもつ最も大きな特徴は、データの集約と検索に最適化された分析基盤である点です。

参考
参考2

Discussion