「ECS」を含む日記 RSS

はてなキーワード: ECSとは

2023-10-17

0からAWS勉強するならこれがおススメ

https://b.hatena.ne.jp/entry/s/qiita.com/Sicut_study/items/6238413b66e274bccd7b

深夜4時まで勉強している割には他の記事Twitterからあんま深い事を感じないので怪しさMAXです。

もちろん書かれている流れも良いですが、増田のおススメも書こうと思う。

CLF クラウドプラティショナー 資格を取る

記事では全否定されていますAWSを学ぶ最短はこれだと思います

IPAITパスポートAWS版でこれを取得すればぼんやりAWSの各サービスとつながりが分かります。このぼんやりとってのが重要AWSはとにかくサービスが多いですが実際に開発すると使うのは大体限られます。もちろん記事のような流れでも良いですが、まずは全体を俯瞰できることが重要です。この資格取ればAWSへの苦手意識は持たなくなりますし、AWSCM見て「んなわけあるか!途中端折りすぎ!」と突っ込めるようになります

参考書写経

次にやるのは参考書写経です。なんでも良いですがサーバレス系の参考書だとリソースの削除も楽で良いです。AWS公式のでも良いですが大体和訳されていません。Amplifyとかは和訳されたのもありますバージョンアップで動かなくなったりして検索するのも面倒です。

もちろん参考書も2年前のものでも今では動かなかったりしますが、だいたいググるメモで書いている人居るので感謝しながらマネしましょう。1冊やりきれば充分です。

SAA ソリューションアーキテクアソシエイト 資格を取る

また資格です。SAAIPAなら基本情報です。正直これ取ればAWSを好きになります。でもサービスは組めません。でも苦手意識持たないのはこの業界では重要です。

正直CLFよりはだいぶ難しいですが初心者でも取れる資格なので頑張りましょう。

たぶんこれが増田の思うベストプラティスだと思う。と言うよりSAA取ればAWSに関しては日本エンジニアの半数より上に居れると思う。それくらい人が少ない。

ここから業務を経てSAPを取得したり、DVASOAの残りのアソシエイトも取って基礎を盤石にしたりとかは人それぞれだか、ひとつだけ言えるのは深夜4時まで勉強した付け焼刃ECSコンテナとかマジで触りたくない!

コンテナとかはAWS以外の知識も要るから時間をかけて人に説明できるレベル理解した方が良い。言いたいことはそれだけ。あとリソース削除言うけど無料枠とよほどの無茶しなきゃ金はほとんどかからないし、だいたいAWSが300クレジットくれるからどうにかなる。

自分サービス作るなら話は別だけど、試算ツールもあるし収益運用ちゃん見積もるのが大事だしAWS使うと大半はリソースどうしようか考えるのがメイン。どうせあとから増やせるでしょって思うサービス程増やせない

2022-11-26

anond:20221126082033

この手の話題で想定してる「技術」が人によって違いすぎて一般化できないよなあ

ReactもVueも実戦レベルで触ったことあります、みたいな経験を積むならフリーランスは有利だと思うけど

ECSとEKSとGKE実戦レベルで触ったことあります、とかだと正社員でも一握りになるよね

2022-08-27

センスの無い未経験年収300万強のプログラマとして就職して必要だったこ

学歴がよくなくて、就職が困難だったので中小 SIer で働いていた。 (プライム案件を取ってこれる分マシらしい)

レキサルティレクサプロデパスのお世話になって続けてたけど、結局は薬でどうにかできず、辞めてしまった。

参考程度だけど、未経験の人が 300万 をもらうために、どのようなスキル必要かを、まとめておく。

ちなみにどれくらいプログラムが書けなかったかというと、競技プログラミング努力しても AtCoder黄色になれず青色のままってくらい。

AtCoder でいう、初心者から抜け出せないという、要するにセンスがないということなのだけど、そういう人も居そうなので、参考までに。

要するに

経験プログラマに対して、これだけ要求されるのだから、未経験の人は覚悟するようにという指針を提供したいので書いた。

入社時に覚悟しておかなければならない事

誓約書

基本的に、損害を与えた場合には、それを作業者補填するという誓約書を結ぶ。

要するに、捨て駒として扱って、失敗したら賠償しろ、という事になる。

このことを認識して、失敗しないように振舞ないと、連帯保証人含めて迷惑をかける事になる。

要するに、低賃金で未経験プログラマ案件にノーリスクで送りこんで、稼ぐための手段です。

必要だったスキル

ディレクション

基本的に PL (夢想家) → PM (御用聞き) → プログラマ という環境なので、プログラマ自分ディレクションして意思決定する必要がある。

例えば、下請け場合は、PM の御用聞きの結果の WBS に合わせないと、顧客から DM瑕疵担保責任がどうとか言われる。

社内開発の場合は、PL の方から直接、長時間の叱責を受けなくてはならない。

そういう不幸を防ぐためにも自分ディレクションして、PM の決めた実態を反映していない WBS に合わせて作業するスキル要求される。

基本的に手戻りは個人の過失になってしまうため、手戻りしないように考え抜いて意思決定をする、というのが重要になる。

これこそ、ガクチカと呼ばれる、頑張れますというスキルなので、学生時代に頑張っておけばよかったなぁ。

デザイン

こう見せたい、こう表現したい、という事を伝えるには、必然的デザイン知識必要になる。

創造思考デザインは切っても切り離せない概念で、デザインとは創造なのだから、当たり前である

ソフトウェアアーキテクチャも、ソフトウェア設計も、コーディングデザインと言えるかもしれない。

言語技術 (言語能力)

顧客と 1:1 で話す事が DM でもボイチャでも突発的に発生するので、いつ、いかなる時でも論理武装していなければならない。

まぁ、顧客であったり PL であったりはキレるのが仕事なので、それに対して理路整然と説明する必要がある。

なんとなく、では納得しないし、すぐ損害賠償請求とかそういう話にいくので、答えられないと持ち帰りますお茶を濁して、エマージェンシーになる。

後述する設計能力においても、課題を把握するための言語技術(言語能力)は重要ファクターだと思う。

ソフトウェア設計

C/C++システムプログラムフレームワーク基本的に無いので、自分概念を整理して、どのような変更、拡張があるかを考えて設計する必要がある。

この能力が弱いと、手戻りが発生しやすくなり、瑕疵担保責任を問われることになる。

読んだ本の中だと、ボブおじさんの本が、やっぱりしっくりくるなという個人的な感想がある。

ネットワークプログラム (C)

UDP で送ってくるデータを受けて 24/365 で停止しない WebAPI への繋ぎ込みという簡単作業があって、振られた。

リークしてはいけないという事で malloc禁止で、グローバル変数を利用するという変なルールがあった。

Rust で書けばいいんじゃないかなと思ったけど、Rust 書くのもシンドイし、C/C++ で、しんどくて読みづらいコードを書いた。

あとで保守する人が大変そうだけど、そういうルールを決めたのは PL だしね。

システムプログラム (C++)

なんか、特殊PCI Expressカードからベンダーが用意している SDKデータ引っこ抜いて Web API へつなぎ込む部分をやった。

データの中の特殊信号を取りたかったらしい。

一応、SDK の使い方をパラ見して 1 日で作ったので、別に負担じゃなかったけど、素人やらせるんなとは思った。

Webバックエンド (Express/Fastify + PostgreSQL)

当たり前だが、DB 作って RestAPI を生やすのは現代プログラマにとって自然にできなければならない。

なので、新規開発のサブモジュールバックエンドを任せられた。

だが、ORM の癖を把握したり、発行されるクエリ確認したりするのは、疲れる。 SQL を直書きするのはシンドイ。

結局 SQL を直書きすることにしたけど、あまりいい決断ではなかったと思っている。

それ以外は フレームワーク に乗ってしまっていいので、書き捨てる分には楽だった。

最近だと、TypeScriptPrisma 使うのが、型安全でよさそうだなと思っている。

Nest.js個人的には好み。

Linux操作 (EC2 とか)

デプロイEC2 直でやったり ECS にしたりとしていたので、ベアメタル知識必要になった。

要するに systemd のいじり方とか、死活監視の仕方とか。

個人的には、クラウド嫌いなので、ベアメタルの方が安心できる。

Bind権威DNS管理して、postfix絶対止めてはいけないメールサーバ管理するとかもあったけど、出来て当然ではある事だし。

Webフロントエンド (React/Vue)

会社Webアプリ案件を取ってきたので突っ込まれた。

経験プログラマでも、月単価 100 万以上で顧客請求してるんだから会社はそりゃ儲けるだろうと思った。

会社が一人前の経験N年のプログラマといったら、その通りに振舞う必要がある。顧客責任はないのだから

当たり前だが、WebディレクションWebデザインWebプログラミング, Webマークアップ は、全て作業者であるプログラマ仕事になる。

個人的には、これが分かれている理由が良く分からないけど、分けたい人がいるんだろう。

デザインで、CSSフレームワークを使うと、その色が出るという事で、全部 CSS手書きしていた。

tailwind が出た現在では使っていればよかったなと思う。

結局、全く分からない中、手探りでデザインし、コードを書いて、顧客に 1 日 5 ~ 10リリースするという行為をした。

顧客大手企業だったので、自社のエンジニアならもっと出来る、と叱責されまくったけど、だったら自社でやればいいじゃんと思った。

一応、今でもサービスは生きていて、ユニークユーザ数は上がっているらしい。

そして、焼き付け刃だったので、 WAI-ARIA を知らず、アクセシビリティへの配慮が足りない事が問題になってしまった。

これはなんとか保守対応ねじ込めたのでトラブルにならなかったけど、瑕疵担保責任と綱渡りだなと思った。

CI/CD 構築 (Azure Pipelines)

当たり前だが、リリースサイクルを短くしないと顧客はキレてしまうので、CI/CD を整えないといけない。

今は Github Actions とかあるけど、昔は無くて Bitrise が高いからみたいな理由Azure Pipelines で CI/CD フローを構築した。

もう Multi Stage Pipeline になってるだろうけど、Release Pipeline が GUI からしか設定できないのが辛みだった。

IaC (Terraform)

当然だが、デプロイするためには IaC を整える必要がある。

これを知らずに、コンソールポチポチしていたので、 IaC 出来てない事がバレた時に色々怒られてしまった。

今は CDK とか便利なものが出来てるんだなぁ。

自動テスト

本来テスト自動テストを整えて、質保証をしてバグを減らさなければならない。

だが、テストを書くという手間を払えなかったので、人力テストしかできなかった。

一応、リグレッションテストを人力でやりまくったので、バグ発見曲線が結合テストでの IF 不一致しかない、という結果にはなったけど

自動化できれば費用必要じゃなかったから、怠慢だと、責められてしまった。

同じような未経験の人へ

経験でも誓約書を盾に、振られた事全部を出来なくてはならない慣習があるので、プログラマはそんなに良い職業じゃないよ。

甘い考えで、プログラマになろうと思っているのなら、考え直した方がいいです。

2022-08-21

anond:20220821223522

表面的に使えても、トラブルシュートできないでしょ。

それとも今はECSのようなコンテナサービスだけで構築するのが主流なのか?

2022-05-05

anond:20220505024023

元増田です。追記でも書いたけど、

レンタルサーバは制約があるからイヤ。

レンタルサーバ比較すらめんどい

環境構築したくない。

環境構築したら一応手順書残すじゃん。覚えておきたくないから。書くよね。めんどい

・Ansible とかもめんどい (これは使ったことがないので学習がめんどくさいってだけ)。

Python だの何だのの依存関係バージョンがあわなくて…みたいなトラブル大嫌い (Docker ならいいけど ECS・Fargate・CloudRun・GKE それはそれで高いし、現時点ではメンテフリーはいかない)

・Let's E とかもめんどい。だってたまにやり方が変わるじゃん。めんどい

なので PaaS にしたいのよ。

GCP独自ドメインマネードSSL するには Cloud Load Balancing 必要しかもそこそこ高いってのは想定外だったので、別にそこに金をかけるべきとは言ってない。でも月2000円くらいだからまぁいいやって感じ。もちろん月300円で済むようになればうれしい。

AWS は S3+CloudFront+ACM+Route53 で安く独自ドメインマネードSSLができるんだっけ? であればそっちの方がいいよね。

なお、レンタルサーバでいいって人は別にそれでいいんじゃないわたしには合わないってだけ。

VPSLAMPじゃなくてAWSでALBやらECSやら使ってる人って例えば「20個のWebサービス運用したい」みたいなときどうしてんの?

サービスって言っても自分や身内だけが使うやつとか小ネタ的な奴もいっぱいあるし、

サービス数が増えるごとにアクセス数関係なく課金額が増えていくって結構辛くない?モチベにも関わるっていうか……

本音としては学習も兼ねてそういうモダン技術使っていきたいけど、でもVPS相乗り式との差額を考えた際に月額云万円とかなるとポケットマネーから捻出するのは流石に許容できない額になっちゃうよなぁって

その辺モダン式の人ってどうやってるん?

2022-03-11

AWS+Terraformを勉強中なんだがこういう流れで行こうと思ってるんだけどどう?

Apache(かnginx)+EC2+VPCの設定をとりあえず行ってWebサーバが動くところまで確認

PHP+RDS+EC2+VPC+ALBでもうちょっとリッチアプリ冗長構成で構築

上で作ったアプリDocker+ECSコンテナとして動かす

更に同じものECSじゃなくてEKSで動くように実装

こんな感じで考えてるんだけどどう思う?

2022-01-25

本のまとめ

--

この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。

1章

コンテナとは】

他のプロセスとは隔離された状態OS上にソフトウェアを実行する技術

コンテナ利用のメリット

環境依存から解放

コンテナにはアプリの稼働に必要となるランタイムライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリ依存関係をすべてコンテナ内で完結できる。

依存関係を含めたパッケージリリース単位となる

環境構築やテストに要する時間の削減

優れた再現性ポータビリティ

全ての依存関係コンテナ内で完結するため、オンプレでもクラウドでも起動する。

ステージング環境テスト済みのコンテナイメージプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテスト必要工数を削減できる。

リソース効率のアップ

サーバー仮想化では、仮想マシンレベルリソースを分離し、ゲストOS上でアプリが起動する。つまりアプリだけでなく、ゲストOSを動かすためのコンピューティングリソース必要

一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。

Dockerとは】

コンテナライフサイクル管理するプラットフォーム

アプリコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。

アプリソースコード + Dockerfile

↓ buildでイメージ作成

イメージ(アプリケーションと依存関係パッケージングされる。アプリライブラリOS)

shipイメージの保存

レジストリに保存

run コンテナの実行

オンプレクラウドなどで起動

Dockerfileとは】

イメージを構築するためのテキストファイル

このファイルコマンド記述することで、アプリ必要ライブラリインストールしたり、コンテナ上に環境変数を指定したりする。

1章まとめ、感想

コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンド設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。

2章

AWS提供するコンテナサービス

コントロールプレーン

コンテナ管理する機能

コントロールプレーンは2種類

ECSとEKSがある。

ECS

フルマネージドなコンテナオーケストレータ。

オーケストレーションサービスであり、コンテナの実行環境ではない。

ECSの月間稼働率99.99%であることがSLA として保証

タスク

コンテナ動作するコンポーネント

タスクは1つ以上のコンテナからなる

アプリを起動するためにはコンテナ必要

タスク定義

タスク作成するテンプレート定義JSON記述

デプロイするコンテナイメージタスクコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。

サービス

指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサータスクを実行するネットワーク指定

クラスター

サービスタスクを実行する論理グループ

データプレーン

コンテナが実際に稼働するリソース環境

2種類ありECSとFargateがある。 Fargateに絞って書く

Fargateとは

サーバーレスコンピューティングエンジン

AWSのフルマネージドなデータプレーンとして定義されている

コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する

Fargate メリット

ホスト管理不要であること

サーバーのスケーリングパッチ適用保護管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる

Fargate デメリット

価格EC2より高い。

利用者コンテナの稼働するOSには介入できない

コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる

ECR

フルマネージドなコンテナレジストリ

コンテナイメージを保存、管理できる

コンテナが利用されているサービス

Lambda

・App Runner

Lambda

 利用者コードアップロードするだけでコードを実行できるサービスAWS側で基盤となるコンピューティングリソースを構築してくれるフルマネージドサービス

App Runner

 2021年5月GA(一般公開)となったサービスプロダクションレベルスケール可能webアプリを素早く展開するためのマネージドサービスGithub連携してソースコードをApp Runnerでビルドデプロイができるだけでなく、ECRのビルド済みコンテナイメージも即座にデプロイできる。

 ECSとFargateの場合ネットワークロードバランシング、CI/CDの設定などインフラレイヤに関わる必要があり、ある程度のインフラ知識必要になる。App Runnerはそれらインフラ周りをすべてひっくるめてブラックボックス化し、マネージドにしていることが特徴である

ECS Fargateを利用した場合コスト拡張性、信頼性エンジニアリング観点

コスト

EC2より料金は割高。ただし、年々料金は下がってきている。

拡張性】

デプロイの速度 遅め

理由1 コンテナごとにENIが割り当てられるため。ENIの生成に時間がかかる

理由2. イメージキャッシュができないため。コンテナ起動時にコンテナイメージを取得する必要がある。

タスクに割り当てられるエフェメラストレージは200GB。容量は拡張不可。ただし永続ストレージの容量が必要場合はEFSボリュームを使う手もある。

割り当て可能リソースは4vCPUと30GB。機械学習に用いるノードのような大容量メモリ要求するホストとしては不向き

信頼性

Fargateへのsshログインは不可。Fargate上で起動するコンテナsshdを立ててsshログインする方法もあるが、セキュアなコンテナ環境sshの口を開けるのはリスキーである。他にSSMセッションマネージャーを用いてログインする方法もあるが、データプレーンEC2の時に比べると手間がかかる。

しかし、2021年3月Amazon ECS Execが発表され、コンテナに対して対話型のシェルや1つのコマンドが実行可能となった。

エンジニアリング観点

Fargateの登場からしばらく経過し、有識者経験者は増え、確保しやすい。

システム要件確認

多数のユーザーに使ってもらう

可用性を高めるためにマルチAZ構成を取る

CI/CDパイプライン形成し、アプリリリースに対するアジティを高める

レイヤで適切なセキュリティ対策不正アクセス対策認証データの適切な管理ログ保存、踏み台経由の内部アクセス)を施したい

2章まとめ、感想

AWS提供するコンテナサービスはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理不要インフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である

3章

この章では運用設計ロギング設計セキュリティ設計信頼性設計パフォーマンス設計コスト最適化設計について述べている。

運用設計

Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計不具合修正デプロイリスク軽減のためのCI/CD設計必要である

モニタリングとは

システム内で定めた状態確認し続けることであり、その目的システムの可用性を維持するために問題発生に気づくこと

オブザーバビリティとは

システム全体を俯瞰しつつ、内部状態まで深掘できる状態

オブザーバビリティの獲得によって、原因特定対策検討が迅速に行えるようになる

ロギング設計

・cloud watch logs

他のAWSサービスとの連携も容易

サブスクリプションフィルター特定文字列の抽出も容易

・Firelens

AWS以外のサービスAWS外のSaaS連携することも可能

Firehoseを経由してS3やRed shiftOpenSearch Serviceにログ転送できる

Fluentdやfluent bit選択できる

fluent bitを利用する場合AWS公式提供しているコンテナイメージ使用できる

セキュリティ設計

イメージに対するセキュリティ対策

 - ソフトウェアライブラリ脆弱性は日々更新されており、作ってから時間が経ったイメージ脆弱性を含んでいる危険がある。

 - 方法

  脆弱性の有無はECRによる脆弱性スキャンOSSのtrivyによる脆弱性スキャン

継続的かつ自動的コンテナイメージスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリ場合CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャン必要になる。

cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能

提供元が不明ベースイメージ使用は避ける

・IAMポリシーによるECRのパブリック化の禁止

 - オペレーションミスによる公開を防ぐことができる

信頼性設計

マルチAZ構成

Fargateの場合サービス内部のスケジューラが自動マルチAZ構成を取るため、こちらで何かする必要はない。

障害時切り離しと復旧

ECSはcloud watchと組み合わせることでタスク障害アプリエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる

ALBと結びつけることで、障害が発生したタスク自動で切り離す

リタイアという状態

AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合ECSは新しいタスクに置き換えようとするその状態のこと。

Fargateの場合アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ整合などが生じて危険

システムメンテナンス時におけるサービス停止

ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能

サービスクォータという制限

意図しない課金増加から保護するために設けられた制限

自動でクォータは引き上がらない

cloud watch メトリクスなどで監視する必要がある。

パフォーマンス設計

パフォーマンス設計で求められることは、ビジネスで求められるシステム需要を満たしつつも、技術領域進歩環境の変化に対応可能アーキテクチャを目指すこと

ビジネス上の性能要件を把握することが前提

利用者数やワークロードの特性を見極めつつ、性能目標から必要リソース量を仮決めする

FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める

既存のワークロードを模倣したベンチマークや負荷テスト実施してパフォーマンス要件を満たすかどうかを確認する

スケールアウト

サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存タスクを停止する必要原則ない。

スケールアウト時の注意

・Fargate上のECSタスク数の上限はデフォルトリージョンあたり1000までであること。

VPCIPアドレスの割当量に気をつける

ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能IPアドレスが消費されていく

スケールアウトによるIPアドレスの枯渇に注意

Application Autoscaling

Fargateで使用可能

Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う

ステップスケーリングポリシー

ステップを設けて制御する

CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意ステップに従ってタスク数を増減させる

ターゲット追跡スケーリングポリシーとは

指定したメトリクスのターゲット値を維持するようなにスケールアウトやスケールインを制御する方針

ターゲット追跡スケーリングPermalink | 記事への反応(0) | 21:45

本のまとめ

--

この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。

1章

コンテナとは】

他のプロセスとは隔離された状態OS上にソフトウェアを実行する技術

コンテナ利用のメリット

環境依存から解放

コンテナにはアプリの稼働に必要となるランタイムライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリ依存関係をすべてコンテナ内で完結できる。

依存関係を含めたパッケージリリース単位となる

環境構築やテストに要する時間の削減

優れた再現性ポータビリティ

全ての依存関係コンテナ内で完結するため、オンプレでもクラウドでも起動する。

ステージング環境テスト済みのコンテナイメージプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテスト必要工数を削減できる。

リソース効率のアップ

サーバー仮想化では、仮想マシンレベルリソースを分離し、ゲストOS上でアプリが起動する。つまりアプリだけでなく、ゲストOSを動かすためのコンピューティングリソース必要

一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。

Dockerとは】

コンテナライフサイクル管理するプラットフォーム

アプリコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。

アプリソースコード + Dockerfile

↓ buildでイメージ作成

イメージ(アプリケーションと依存関係パッケージングされる。アプリライブラリOS)

shipイメージの保存

レジストリに保存

run コンテナの実行

オンプレクラウドなどで起動

Dockerfileとは】

イメージを構築するためのテキストファイル

このファイルコマンド記述することで、アプリ必要ライブラリインストールしたり、コンテナ上に環境変数を指定したりする。

1章まとめ、感想

コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンド設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。

2章

AWS提供するコンテナサービス

コントロールプレーン

コンテナ管理する機能

コントロールプレーンは2種類

ECSとEKSがある。

ECS

フルマネージドなコンテナオーケストレータ。

オーケストレーションサービスであり、コンテナの実行環境ではない。

ECSの月間稼働率99.99%であることがSLA として保証

タスク

コンテナ動作するコンポーネント

タスクは1つ以上のコンテナからなる

アプリを起動するためにはコンテナ必要

タスク定義

タスク作成するテンプレート定義JSON記述

デプロイするコンテナイメージタスクコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。

サービス

指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサータスクを実行するネットワーク指定

クラスター

サービスタスクを実行する論理グループ

データプレーン

コンテナが実際に稼働するリソース環境

2種類ありECSとFargateがある。 Fargateに絞って書く

Fargateとは

サーバーレスコンピューティングエンジン

AWSのフルマネージドなデータプレーンとして定義されている

コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する

Fargate メリット

ホスト管理不要であること

サーバーのスケーリングパッチ適用保護管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる

Fargate デメリット

価格EC2より高い。

利用者コンテナの稼働するOSには介入できない

コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる

ECR

フルマネージドなコンテナレジストリ

コンテナイメージを保存、管理できる

コンテナが利用されているサービス

Lambda

・App Runner

Lambda

 利用者コードアップロードするだけでコードを実行できるサービスAWS側で基盤となるコンピューティングリソースを構築してくれるフルマネージドサービス

App Runner

 2021年5月GA(一般公開)となったサービスプロダクションレベルスケール可能webアプリを素早く展開するためのマネージドサービスGithub連携してソースコードをApp Runnerでビルドデプロイができるだけでなく、ECRのビルド済みコンテナイメージも即座にデプロイできる。

 ECSとFargateの場合ネットワークロードバランシング、CI/CDの設定などインフラレイヤに関わる必要があり、ある程度のインフラ知識必要になる。App Runnerはそれらインフラ周りをすべてひっくるめてブラックボックス化し、マネージドにしていることが特徴である

ECS Fargateを利用した場合コスト拡張性、信頼性エンジニアリング観点

コスト

EC2より料金は割高。ただし、年々料金は下がってきている。

拡張性】

デプロイの速度 遅め

理由1 コンテナごとにENIが割り当てられるため。ENIの生成に時間がかかる

理由2. イメージキャッシュができないため。コンテナ起動時にコンテナイメージを取得する必要がある。

タスクに割り当てられるエフェメラストレージは200GB。容量は拡張不可。ただし永続ストレージの容量が必要場合はEFSボリュームを使う手もある。

割り当て可能リソースは4vCPUと30GB。機械学習に用いるノードのような大容量メモリ要求するホストとしては不向き

信頼性

Fargateへのsshログインは不可。Fargate上で起動するコンテナsshdを立ててsshログインする方法もあるが、セキュアなコンテナ環境sshの口を開けるのはリスキーである。他にSSMセッションマネージャーを用いてログインする方法もあるが、データプレーンEC2の時に比べると手間がかかる。

しかし、2021年3月Amazon ECS Execが発表され、コンテナに対して対話型のシェルや1つのコマンドが実行可能となった。

エンジニアリング観点

Fargateの登場からしばらく経過し、有識者経験者は増え、確保しやすい。

システム要件確認

多数のユーザーに使ってもらう

可用性を高めるためにマルチAZ構成を取る

CI/CDパイプライン形成し、アプリリリースに対するアジティを高める

レイヤで適切なセキュリティ対策不正アクセス対策認証データの適切な管理ログ保存、踏み台経由の内部アクセス)を施したい

2章まとめ、感想

AWS提供するコンテナサービスはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理不要インフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である

3章

この章では運用設計ロギング設計セキュリティ設計信頼性設計パフォーマンス設計コスト最適化設計について述べている。

運用設計

Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計不具合修正デプロイリスク軽減のためのCI/CD設計必要である

モニタリングとは

システム内で定めた状態確認し続けることであり、その目的システムの可用性を維持するために問題発生に気づくこと

オブザーバビリティとは

システム全体を俯瞰しつつ、内部状態まで深掘できる状態

オブザーバビリティの獲得によって、原因特定対策検討が迅速に行えるようになる

ロギング設計

・cloud watch logs

他のAWSサービスとの連携も容易

サブスクリプションフィルター特定文字列の抽出も容易

・Firelens

AWS以外のサービスAWS外のSaaS連携することも可能

Firehoseを経由してS3やRed shiftOpenSearch Serviceにログ転送できる

Fluentdやfluent bit選択できる

fluent bitを利用する場合AWS公式提供しているコンテナイメージ使用できる

セキュリティ設計

イメージに対するセキュリティ対策

 - ソフトウェアライブラリ脆弱性は日々更新されており、作ってから時間が経ったイメージ脆弱性を含んでいる危険がある。

 - 方法

  脆弱性の有無はECRによる脆弱性スキャンOSSのtrivyによる脆弱性スキャン

継続的かつ自動的コンテナイメージスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリ場合CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャン必要になる。

cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能

提供元が不明ベースイメージ使用は避ける

・IAMポリシーによるECRのパブリック化の禁止

 - オペレーションミスによる公開を防ぐことができる

信頼性設計

マルチAZ構成

Fargateの場合サービス内部のスケジューラが自動マルチAZ構成を取るため、こちらで何かする必要はない。

障害時切り離しと復旧

ECSはcloud watchと組み合わせることでタスク障害アプリエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる

ALBと結びつけることで、障害が発生したタスク自動で切り離す

リタイアという状態

AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合ECSは新しいタスクに置き換えようとするその状態のこと。

Fargateの場合アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ整合などが生じて危険

システムメンテナンス時におけるサービス停止

ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能

サービスクォータという制限

意図しない課金増加から保護するために設けられた制限

自動でクォータは引き上がらない

cloud watch メトリクスなどで監視する必要がある。

パフォーマンス設計

パフォーマンス設計で求められることは、ビジネスで求められるシステム需要を満たしつつも、技術領域進歩環境の変化に対応可能アーキテクチャを目指すこと

ビジネス上の性能要件を把握することが前提

利用者数やワークロードの特性を見極めつつ、性能目標から必要リソース量を仮決めする

FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める

既存のワークロードを模倣したベンチマークや負荷テスト実施してパフォーマンス要件を満たすかどうかを確認する

スケールアウト

サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存タスクを停止する必要原則ない。

スケールアウト時の注意

・Fargate上のECSタスク数の上限はデフォルトリージョンあたり1000までであること。

VPCIPアドレスの割当量に気をつける

ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能IPアドレスが消費されていく

スケールアウトによるIPアドレスの枯渇に注意

Application Autoscaling

Fargateで使用可能

Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う

ステップスケーリングポリシー

ステップを設けて制御する

CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意ステップに従ってタスク数を増減させる

ターゲット追跡スケーリングポリシーとは

指定したメトリクスのターゲット値を維持するようなにスケールアウトやスケールインを制御する方針

ターゲット追跡スケーリングPermalink | 記事への反応(0) | 21:45

2021-12-09

経験からWebエンジニアになって年収1000万円を稼げるようになった話

TLDR

(WEBエンジニアリング)未経験から(院卒新卒カードを使って)Webエンジニアになって(5年で)年収1000万円(の会社員と同等の手取り本業副業合わせて)稼げるようになった話

入社まで

工学部情報系でない)の修士課程で、画像処理機械学習を用いた研究をしていた。

PythonLinuxについては少々経験したが、MVCに関する技術は一切触った事がなかった。

就活して、Web系のC向けの名の知れたサービスを自社開発している企業エンジニアとして入社することになった。

※当時は今より牧歌的自分のような人間入社することができた。今はわからない。

副業を始めるまで

PythonFWを使ったWebサービスの開発を行なっていた。

とはいえ、腰を据えて開発している時間は少なかった。大きい企業既存事業にいると開発とは無関係運用や調整業務がかなりあった。

3年目くらいで副業を始めることにした。

理由もっと技術力をつけたかったというものである

上記の通り業務内で技術力を向上させることがむずかしかったのと、未経験業界に来ているハンデを抱えていたのである

Python以外の言語ほとんど書けなかったのでPythonwebスクレイピング案件を探した。

副業エージェントを経由して探した。

5件ほどお祈りされたが、懲りずに応募し続けてたら採用された。Flaskの案件だった。Flaskは書いたことがなかったが採用された。

当時はその会社Python が書けるエンジニアがいなかったので重宝されたし、仕事も任せてもらっていた。

副業をはじめてから

契約は週15時間だった。その間にCOVIDが来て全てが在宅勤務になり、気付いたら週30時間まで稼働するようになっていた。。

当初の見込み通り基礎体力は身に付いていったと思う。

最初案件を納品したあと、次の案件をもらい、段々仕事の幅が広がっていった。

Linuxサーバを触ったりDBサーバを触ったりphp雰囲気で書いたりDockerfileを書いてECS環境を構築したりなど。

Golang, Rust, k8sなど人気の技術案件は探してもちょうどいいものが見つからないのでチュートリアルをやる以上の勉強はできていない。

稼働が落ち着いてきたので副業を増やすことにした。

ちょうど良さそうな募集があったので応募したところ今度は一回で採用された。

給与も少し上がった。後ほど元の副業給与も上がり、本業給与も少しずつ上がった。

年収いくらなのかよくわからなくなったので、月々の手取り銀行口座から調べて、年収1000万円の会社員手取り比較すると大体同じくらいの金額になっていた。

結局年収1000万稼ぐのは難しいのか

犠牲にしていることといえば可処分時間くらいだと思っているので、TLDR節に書いた内容についてはそんなに無理がなくある程度再現性があるんじゃないかと思っている。

辛さでいえば大学院のほうが辛かった。

可処分時間ということでいえばCOVIDで通勤時間が無くなった影響はそれなりにある。

自分について

技術は人並みには好きである

お金は人並み以上に好きである

・要領は決していい方ではない

要領がいい人なら5年も掛けずもっと早く辿り着くのではないか

今回、特にジョブホッパー的な動きはしていない。各職場案件)に恵まれたこともあるし、器用さが足りないといえばそうだと思う。

エージェント中抜きされるという意見もあるが、自分SNSは長続きしないし、勉強会もあまり肌に合わずほとんど出席することはないのでエージェントを通してしか案件を見つけられていない程度の行動力しかない。

今後について

年収についてはおおむね満足するようになり、人間とは面白いもので段々欲がよく出てくるようになった。

モダン技術は、レガシー技術よりも、おしなべて責任範囲が明確であり、何かあったときリカバーがききやすかったり、謎の負債が含まれリスクも少なく、幾分か安心して開発ができる。枯れた理論は好きだが、新しい技術を先回りして身につけることにも興味が湧いてきた。

xRやブロックチェーンといった、技術未来を作っていくことにも興味が出てくるようになった。

自分能力には期待していないので博士課程に戻る予定はないが、これもまた変わるかもしれない。

2021-11-27

anond:20211126224044

コンテナはいものk8s はよくないものであるとして、じゃあ何でコンテナオーケストレーション実現するの? ECS? Fargate? Cloud Run?

と言い出すと単なる場面に応じた取捨選択の話であって、k8sけが絶対ダメってのは極端すぎる意見だな。

2021-07-09

anond:20210706022633

一応年収1100万のソフトウェアエンジニア(もちろん国内、ただしアラフォー)なのでアドバイスじゃないがどんな感じか説明

やってることはバックエンド全般最近インフラ管理画面も大体バックエンド屋さんのお仕事なので、

要はフロントエンド以外というのが正しいかな?極めてざっくりいうとアミューズメント関係イベント基盤を

AWS上で構築・運用するお仕事アプリはBFFはnodeのアプリ動画とかバッチ系はJavaで書いたアプリLambda

ECS上で運用ストレージはElastiCacheとDynamoDBを使っていて、基本的にすべての運用はEventBridgeで

Slackに飛んできて自分保守までやる感じ。これで10人のチームで回している。スマホアプリフロント

なるんだけどそっちは別のチームがやっていて多分同じぐらいの年収をもらっていると思う。

かると思うけど別に全然したことをやっていない。最新のプロトコルとかよく知らんし、

CSは一応AtCoder青とかい人材もいるにはいるけどほとんどの人は並ぐらい。

FPGAなんて多分みんな無理なんではないかな。それでもこの年収をもらえるのは単にソシャゲ業界利益率が

いからで別に俺がすごいわけではない。AWS知ってる人はわかると思うけど上のスタックって

多分駆け出しエンジニアちょっと頑張ってる程度の人が練習で作るWebサービスぐらいの技術レベルだと思う。

技術的に一応他よりは高いのかなと思うのはCD/CIかな。アミューズメント業界なので一日10回のリリースとかよくある。

なのでステージング環境OKならそのままSlackで1スタンプデプロイになっている。

基本的フロントとの互換性が取れる限りはバックエンドは無停止リリースができる。

これもEKSのおかげだな。やっぱりコンテナ技術はすごいよ。

残業時間は全社平均して10時間だけど深夜に趣味で新機能の開発とかしてるので実質200時間とかある人もいそう。

俺は一応残業は全部申告してるけど、そもそもゲーム業界裁量労働制適用できる業界なので残業代などない。

というわけで業界が好きで、かつ増田ぐらいの知識があるなら1000万は30代になったらいけるんじゃないか

20代でも500か600万は固いでしょ。ただ業界が好きかどうか/その業界が儲かってるかどうかによるので、

そこだけは妥協せずに選んでくれ。個人的に深夜まで新機能作っててもそんなに疲れないんだけど、

前職のSIerPMやってたときは定時内ですら苦痛だったわ。客とか上司の顔見るたびに作り笑いしてたけど

転職間際とか引きつってた記憶がある。ちなみに年収270万君が例に出してる会社ひとつなんだが、確かに

入社難易度は高いと思うが(主に学歴フィルターの面で)中にいる人の技術的なスキルは散々が多かったぞ。

飲み会で客とうぇーいする能力だけは高かったが。SIerなんてそんなもんなんで、いくら年収が高いからといって

技術的なことをやりたいとか、体育会系脳筋じゃない限りおすすめはしないな。

2021-04-03

ECSで甘やかされて育ったので

kubernetesのあれこれしんどいAWS依存しても運用楽になるんやったらえーやんって気持ちしか湧いてこない

2021-04-02

anond:20210402111838

Ansible便利だからね。非Webシステム業界でも導入すすんでるわ。

dockerまではこりゃ便利となるんだけど、k8s学習コストといい更新の早さといい、ちょっとね。ECSとか出てるし、もうこれでいいんじゃね?感があるわ。

2021-01-06

docker build -t taskname foldername

で コンテナを作れた まだコマンドをできるだけの2周め ECSPUSH

 

きっとこの坂はみちだろう。

2020-10-17

コンテナインフラを作ろうと思って調べたけどめんどくさすぎワロタ

ECSっていうのがデファクトスタンダードぽいんだけど、覚えること大杉herokuだったらgit pushするだけですむじゃん。

heroku使おう。

2019-11-02

最近思うのは【なんちゃってエンジニア】多すぎ。ゴミだよ。

フリーランスがどうのという話を見て思ったことだけど

自分には技術力がある」と勘違いしているやつが多すぎる。

実際、フリーランスなんて金がかかるだけで技術力もなければ人望もない、それに謙虚じゃない、つまり性格もアレなわけで。

とあるフリーランス紹介会社渋谷にいくつかあるよね)から来たフリーランスの使えなさが異常。

とくに最近思うのは、経験不足なのにフリーランスやってるやつ多すぎ。

ガチャで行ったら完全にはずれだからな。

AWS経験者で取ったのに、ECS、EKSやったことないとか、CodeBuild系とか、ACMCloudFront、S3などの連携も知らないとか、本当になんちゃってが多い。本当にこういうやつゴミ

デベロッパー系でいったら、フレームワーク知らない言語経験者もゴミからな。

例えば、Javaで言ってもStruts1とか、RubySinatraPHPCakePHPしかやったことないとか産業廃棄物もいいとこ。

面接の時だけすっごいアピって有能っぽくさせるの本当に辞めて。

なんちゃってエンジニア続けるぐらいなら、俳優目指せよ

本当にフリーランスつかえねー

2016-12-29

はてブで「Amazon」と検索してみると

昨今話題になってるヤマト佐川関連のブックマークが上位を占めるかと思いきや、まったく違った。

2016年12月29日10:54時点、本文、新着順で検索

Amazon検索結果 (絞り込み: 3 users 以上) 約 3,423 件中 1 - 40 件目 (0.26 秒)

以下略

ECサイト連想させるトピックほとんどなくて、AmazonB2B向けサービスを充実させていることに驚いた。

Amazonって表向きは物流業界革命問題を起こしている要因に挙げられているけど、EC以外のインパクトがどれだけ大きいのか門外漢なので分からない。

↑でブクマ付けた人、何が起きるのか教えて

 
ログイン ユーザー登録
ようこそ ゲスト さん