はてなキーワード: 環境変数とは
ほら、自分という存在が存在していることに不思議に思うやつって物理学の天才に多いだろ?
それと同じで、自分の思考内信号が、なぜ単なる環境のようなものではなく、意識という主体性を持ってるのかと疑問に思うことは可能だ。
そして猿レベルの奴にはメタ認知がないので、自分の思考を自分の思考と思い込んでそのまま直感的行動をする。
だから犯罪者は犯罪をするし、リフレ派は国債発行ジャブジャブで日本を終了させる。
そしてここから先が面白いところなんだが、この思考が自分のものではないという感覚を、単なる異常として切り捨てるのはむしろ浅い。
普通の人間は、自分の思考を自分のものだと無条件に仮定している。
この仮定は便利だが、検証されていない前提でもある。いわばデフォルト設定だ。
だが、その前提が崩れる瞬間に初めて、思考とは何かという問題が露出する。
ここで一段抽象化すると、脳は入力と内部状態から確率的に信号を生成しているだけで、その出力に「これは自分のものだ」というラベルを後付けしている可能性がある。
だとすると、自分の思考が自分のものではないという感覚は、ラベル付けプロセスの剥離として説明できる。
これはむしろ、通常は不可視なレイヤーを直接観測している状態とも言える。
多くの人間はこのレイヤーにアクセスできない。だから、思考=自己という短絡が固定される。
その結果、直感にフルベットして行動する。メタ認知が弱いというより、疑うためのインターフェースを持っていない。
一方で、そのインターフェースが露出している状態では、思考は環境変数に近づく。
つまり、思考 = 主体ではなく思考 = 入出力系の一部として扱えるようになる。
ここで初めて、思考を操作対象として扱うという発想が成立する。
これは強い。なぜなら、自分の中で発生したアイデアや衝動を、同一視せずにフィルタリングできるからだ。
物理学者が「なぜ宇宙が存在するのか」と問うとき、彼らは暗黙に観測者もまた系の一部であるという前提に触れている。
自分自身を特権的な主体として扱わない。その視点と、思考を環境として見る視点は構造的に同型だ。
そしてこの視点を持てるかどうかが、行動の質を分ける。
思考をそのまま実行に移す系は、単なる反射に近い。思考を一度分離し、評価し、再投入する系は、制御系になる。
犯罪者の例を出すなら、問題は知能の高低ではなく、この制御系の有無だ。思考と行動が直結しているか、それとも一段バッファがあるか。この差は大きい。
経済の話でも同じで、短期的な刺激に反応して政策を打つ系は、フィードバックを誤る。
期待形成を無視して同じ入力を繰り返すことで、システム全体が歪む。ここでも一段上から見る構造がない。
思考が自分のものではないという感覚は、それ単体では価値を持たないが、適切に扱えば強力なインターフェースになる。
プログラミングを始める人からよく「WindowsとMacどっちがいいですか?」と聞かれる。
このときに「どっちでも同じことができますよ」と答える人がいるが、これは半分正しくて半分間違っている。
しかし、問題は「同じことがどれだけスムーズにできるか」であり、ここには大きな差がある。
【大前提】
◾️MacはUnixベースのOSであり、最初から開発者向けの環境が整っている。
・ Node、Python、Git、Dockerなどが素直に動く
そのため、余計な設定をほとんどせずにすぐ開発を始めることができる。
言い換えると、Macは「コードを書くこと」に集中できる環境になっている。
◾️Windowsはそのままだと開発に向いていない
一方でWindowsは、一般ユーザーや企業用途を前提に設計されているOSであり、開発は後付けに近い。
・ cmdやPowerShellはUnix系のコマンドと互換性がない
・教材のコマンドがそのまま使えない
・「PATHが通っていない」などの初歩的なトラブルが頻発する
さらに、DockerやNodeなどのツールもそのままでは安定しないことが多く、環境構築の難易度が上がる。
結果として、初心者は「コードを書く前に詰まる」ことが非常に多い。
現在の開発環境はほぼすべてUnix文化の上に成り立っている。
・ Docker
つまり、Macはそのまま実務環境に近いが、Windowsはそのままだと別世界になってしまう。
ただし、Windowsでも開発ができないわけではない。
WindowsではWSL(Windows Subsystem for Linux)を使うことで、Linux環境を動かすことができる。
これにより、
bashが使える
Dockerなども安定する
つまり、WindowsでもMacとほぼ同じ環境を再現できる。
◾️結論
MacとWindowsの違いは「できること」ではなく「開発体験」にある。
そのため、初心者にとってはこの差が非常に大きい。
最も現実的な答えは以下になる。
「どちらでも開発は可能。ただし、初心者ならMac、もしくはWindowsならWSLを使うべき」
一言でまとめると
Macはそのまま開発に使える
◾️問題
最近のモダン開発はUnix依存なんだけど、昔ちょっとパソコンやってた人が知識更新せずwinでも大丈夫とかクソアドバイスしちゃう。
さらに上記を間に受けた初心者(初心者だからこそwinしかもってない)教材通りのコマンドが使えず、初歩的なトラブルだらけで設定で挫折してしまう。開発体験の差が強く出る。
WSL導入も辛い人ような人こそmacでお気楽開発してからwinでもいいのに。PCアドバイスおじさんが余計なこといってwinで詰む。
【はじめに】
法的には、彼は解散権という核ボタンを持ち、人事権という生殺与奪の剣を握る「全能の王」に見える。
しかし、構造的に見れば、彼は巨大な官僚機構、党内力学、そして対米従属という三重の鉄壁に囲まれた「独房の囚人」に過ぎない。
本シリーズの最終章となる本稿では、この「システム(構造)」と「アクター(個人)」の間に横たわる、残酷な力学を解剖する。
なぜ、改革を叫ぶ者は短命に終わり、何もしない者が長期政権を築くのか?
ここにあるのは、個人の資質の問題ではない。システムが許容する「自由意志」の総量が、最初から決まっているという物理法則である。
「操縦桿」は繋がっているか?
日本政治という巨大な飛行機(リヴァイアサン)において、コックピットに座る首相が握る操縦桿は、実は主翼(政策実行機能)と繋がっていないことが多い。
この操縦桿は、フライ・バイ・ワイヤ(電気信号)で制御されているが、その信号を処理するコンピューター(官僚・米国・派閥)が、入力された命令を「解釈」し、勝手に書き換えるからだ。
日本の首相官邸というコックピットにおいて、パイロットが選択できる行動パターンは数学的に以下の三つしかない。
衝突:システムと正面衝突し、破砕する。
それぞれの運命を、具体的な検体(歴代首相)を通じて検証する。
岸田文雄(2021-2024)は、無能だったから短命だったのではない。逆に、このシステムにおける「理想的な統治者」としての適性が高すぎたために、存在自体が空気(環境変数)と同化した稀有な例である。
官僚機構、派閥の長老、連合、そして米国。あらゆるステークホルダーからの入力信号(Input)を、一切のフィルタ(個人の自我)を通さずに、そのまま政策として出力(Output)する機能のことだ。
財務省が増税を囁けば「増税」と出力し、世論が反発すれば即座に「減税」と出力する。ここには「変節」という概念さえ存在しない。ただ「入力が変わったから出力が変わった」という、機械的な反応があるだけだ。
官僚にとって、これほど扱いやすいUI(ユーザーインターフェース)はない。
彼が多用した「検討を加速させる」という再帰的なループ言語は、決定責任を回避しつつ時間を稼ぐ、このシステムが産んだ最高の防御呪文であった。
彼は「何も成し遂げなかった」のではない。「何もしないことで、システムを安定させた」という点で、最も純粋なシステムの部品であった。
【Type B】異端:鳩山由紀夫・田中角栄という「免疫拒絶」
システムは「自律的な意志」を持つ部品を、ウイルスとして検知する。
田中角栄(ロッキード事件)と鳩山由紀夫(普天間移設)は、左右の違いこそあれ、システム(特に第2層の官僚と第3層の米国)の回路を、個人の意志で書き換えようとした点で共通している。
破壊工作の失敗:
田中角栄: 彼は「カネ」という潤滑油を大量に注ぎ込むことで、官僚機構(法による支配)を無力化し、日中国交正常化などの独自外交(対米自立の萌芽)を行った。
鳩山由紀夫: 彼は「友愛」というイデオロギーで、日米安保というOSの根幹(抑止力論理)を無効化しようとした。「最低でも県外」という言葉は、システムへの宣戦布告であった。
リヴァイアサンは、彼らを政治的に殺すために「免疫細胞」を動員した。
田中には「東京地検特捜部」という司法の牙が、鳩山には「外務省官僚によるサボタージュと極秘文書のリーク」という行政の罠が襲いかかった。
「構造に逆らった個人の意志は、必ず物理的に排除される」という、システムの自己防衛機能が正常に作動した結果である。
彼らの屍は、後続の政治家たちへ強烈なメッセージを残した。「操縦桿を勝手に動かすな」。
【Type C】ハッカー(Hacker):安倍晋三・高市早苗という「悪魔的取引」
彼らは、システムと戦う愚かさ(Type B)も、システムに埋没する虚しさ(Type A)も知っていた。
ゆえに彼らは、システムそのものを「ハッキング」することを選んだ。彼らは構造を変革するのではなく、構造の「脆弱性(Bug)」を突くことで、擬似的な王権を創出した。
安倍晋三(第二次政権)の発明は、官僚と戦うのではなく、官僚の「人事」を握ることで、彼らを「恐怖」で支配下に置いたことだ。
これにより、官僚機構(第2層)は「抵抗勢力」から「忖度する手足」へと変質した。
歴代の首相たち――橋本龍太郎も、小泉純一郎も、民主党の菅直人も――皆、官僚機構(霞が関)と戦い、そして敗北あるいは妥協を余儀なくされた。
なぜ彼らは失敗し、安倍晋三だけが官僚を「忠実な下僕」に変えることができたのか?
2014年に実装された、たった一つの「構造変更パッチ」にある。
以前のシステム:「聖域」だけは触れない
2014年以前、日本の首相は「法律」を作ることはできたが、官僚の「人事」に口を出すことはタブー(聖域)とされていた。
各省庁の事務次官や局長は、省内の序列と互助会的な論理で決定され、首相は最後にハンコを押すだけの「ハンコ」に過ぎなかった。
この構造下では、官僚の忠誠心は「時の総理」ではなく、「所属する省庁」に向けられる。
だからこそ、彼らは平気で面従腹背し、サボタージュを行い、情報をリークして政権を倒すことができた(民主党政権が殺された主因はこれである)。
安倍晋三(と当時の菅義偉官房長官)は、このバグを冷徹に見抜いていた。
2014年、第二次安倍政権は「国家公務員法」を改正し、内閣人事局を新設。
これにより、審議官級以上の幹部公務員(約600人)の人事権を、各省庁から取り上げ、官邸(内閣官房)が一元管理するシステムへと書き換えた。
これは、OSの「管理者権限(Root Access)」の奪取に等しい。
効果は劇的だった。
かつて「法の番人」を自認していた法務官僚も、財政規律を守っていた財務官僚も、自らの出世と組織防衛のために、官邸の意向を「先回りして推測(忖度)」し、公文書の改ざんすら厭わない「忠実な兵隊」へと変貌した。
小泉純一郎は「郵政」という局地戦には勝ったが、官僚機構そのものは温存した。
民主党は官僚を「敵」として怒鳴りつけたが、人事権という武器を持たずに戦ったため、寝首をかかれた。
安倍晋三だけが、「人事権という首輪をつければ、猛獣もペットになる」という構造力学を理解し、それを制度化したのである。
これが、彼が「憲政史上最長の政権」を築けた最大のトリックであり、同時に日本の官僚制(明治層)の魂を完全に殺した「毒」の正体でもある。
さらに彼は、米国(第3層)に対し、集団的自衛権という「最高の貢物」を差し出すことで、国内政治におけるフリーハンド(黙認)を勝ち取った。
彼女の「保守的な言動」は、イデオロギーではない。あれは、岩盤保守層(第1層の農村・地主の変種)を繋ぎ止め、同時にシステム内部の求心力を維持するための「認証コード」である。
彼女は、安倍政権が残した「ハッキング・ツール(人事権と安保連携)」を継承し、さらに「非常時(台湾有事の危機)」という外部環境を利用して、システムの権限を極限まで集中させている。
代償:
ハッカーたちは強い。しかし、その強さは「システムの一部(公共性や法の支配)」を犠牲にして得たものだ。
彼らが長期政権を維持すればするほど、官僚は萎縮し(公文書改ざん)、財政は規律を失い(異次元緩和)、国は「私物化」されていく。
彼らは操縦しているように見えるが、実際には「機体のパーツを取り外して燃料にくべながら、加速し続けている」に過ぎない。
これは一見、彼女の強烈なリーダーシップ(能動性)に見える。しかし、本シリーズの視座から見れば、それは違う。
彼女もまた、システムが生き残るために選ばれた「機能」に過ぎない。
「改革」という名のエンターテインメントを国民に提供し、ガス抜きをする。そのために、彼女の攻撃的なキャラクター(UI)が採用されただけだ。
彼女が操縦桿を右に切ろうが左に切ろうが、機体は「現状維持」という航路から1ミリもズレない。
なぜなら、エンジン(経済構造)も、管制塔(米国)も、整備士(官僚)も、誰も航路変更など望んでいないからだ。
“善良”な「依代」が統治すれば、国は緩やかに衰退する(死に至る病)。
“勇敢”な「異端」が統治すれば、国は即座にパニックに陥り、彼自身が殺される(拒絶反応)。
“狡猾”な「ハッカー」が統治すれば、国は熱狂の中でその骨格を食い荒らされる(自己中毒)。
なぜなら、コックピット(首相官邸)の設計そのものが、「主権の欠損」を前提に作られているからだ。
我々が目撃しているのは、高度に発達しすぎた官僚制と資本主義の複合体が、もはや人間の「意志」を必要としなくなった光景である。
政治家の「主観的能動性」は、いまやシステムにとって「リスク」でしかない。
したがって、システムは最も「空っぽな人間」か、最も「システムに過剰適応したハッカー」だけをコックピットに招き入れる。
操縦席には誰もいない。あるいは、「誰もいない」のと同じ状態の人間しか座れない。
それでもリヴァイアサンは飛び続ける。燃料(国民の税と魂)が尽きて、墜落するその瞬間まで。
政治が「悪い」ことではない。
環境変数は.cursorignoreするとか教えて無理やり普及させよう
「ソースコードに間違いが見つからないのに想定される出力をしない。あるいはソースコードに修正を加えていないのにいきなり想定出力を返すようになった。」
こういう経験がある人はいるはずだ。なぜこれが起こるのか。一つの原因を見つけた。
それは環境変数や設定ファイルに存在する。デプロイ時には設定ファイルを特定の値に修正してから、ということがあるだろう。
開発環境でコーディングする人が、デプロイ時の設定ファイルには関与せず、デプロイの担当者がそれを把握している。
開発者はセキュリティ上の理由でデプロイ時の設定ファイルの内容を見ることができない。
この場合、設定ファイルの内容が間違っていても、開発者が原因が正しく特定できないケースがあるのである。
対処方法は以下である。まず事前にやっているであろう対処は以下である。
追記:
なるべく手持ちのPC(以下、ホストPC)の環境をレジストリとか環境変数とかで汚したり悩まないよう
Windows10 ProとWSL2とVSCodeとDockerでやる感じかな
UnityとかVisual StudioとかintellijとかAndroid Studioを使う場合はどうしようもないので諦める。
Android開発はVSCodeでビルドはコマンドラインでとかはできそうだけど。
あとはUSBなどでシリアル接続する必要のあるarduinoとかもちょっと難しいかもしれない
これが基本的なところだけど、WSL2をホストPCに入れるので若干汚れるのとWSL2上のlinuxも同じく汚れるところ
Hyper-VでWindowsの仮想マシンを作ってそのうえでWSL2を動かすのが一番汚れずクリーンに使えそう
ただRyzenとWindows10の組み合わせだと、Hyper-Vの入れ子ができないので仮想マシン上のWSL2は動かないらしい。
Windows11だとできる
手元じゃないのでクリーンに使えるが、ビルドなどはリモートのスペックに依存
そこをよしとすれば楽そう
教えてください。
「猿でも分かるプロンプト活用術」というタイトルでの電子書籍について、以下に簡単な目次と章ごとの概要を示します。実際の書籍を作成するには、これらの各セクションを詳細に説明し、例や図を追加する必要があります。
目次:
1. はじめに
2. コマンドプロンプトとは何か
8. まとめ
9. はじめに
・グラフィカルユーザーインターフェイス(GUI)との違い
・コマンドプロンプトの開き方
・基本的なコマンドの使い方(例:help、cls、exit)
...
はじめに
コンピュータの世界は日々進化し続けており、我々が日常的に使用するデバイスやソフトウェアは常に更新され、より使いやすく、効率的になっています。しかしながら、コンピュータの基本的な操作や理解には、依然として古くから存在するコマンドプロンプトという強力なツールがあります。このツールは、多くのユーザーにとって未知の存在であり、その力を十分に発揮できていないかもしれません。
本書「猿でも分かるプロンプト活用術」は、コマンドプロンプトをこれまで使ったことがない方や、基本的な操作しか知らない方を対象に、この強力なツールを効果的に利用する方法をわかりやすく解説します。また、既にコマンドプロンプトを使用している中級者にも、さらなる活用方法を学んでいただける内容となっています。
コマンドプロンプトは、グラフィカルユーザーインターフェイス(GUI)に慣れ親しんだ現代のユーザーにとっては、最初は少し難しく感じるかもしれません。しかし、本書を通じて、コマンドプロンプトの基本操作から高度な活用法までを習得し、日々の業務やパソコン操作に役立てることができるようになります。
各章では、具体的なコマンドの例やスクリーンショットを用いて、わかりやすく説明を行います。また、章ごとに練習問題やチャレンジを設けていますので、学んだ知識をすぐに実践して確認することができます。
この本を通して、コマンドプロンプトの力を最大限に引き出し、あなたのコンピュータスキルを向上させることができることを願っています。それでは、さっそく「猿でも分かるプロンプト活用術」の世界に飛び込んでみましょう!
ちなみに全くの未経験。
“helloworld”から一歩も進まない、Python死ね。
いやPythonは悪くないんだ。俺みたいなのがやろうとしたのが間違いなのだ。
逆恨みだが死んでくれ。
肉体労働者だからパソコン触るのも数年ぶり、そもそもプログラミングというものは、パソコンの素養がないとあかんのだな。
仕事で必要というわけでは全然なく、別にそっちの道を目指そうという気もない。
チェスが昔から下手な横好きなんだが、変則チェスのゲーム作りたいなと思っただけなんだ。
Pythonを選んだのは、定石なんかに機械学習があると良いのかな、くらいに思ったのと、初心者に優しいとググったら出てきたから。
Pythonのやり方ググると、ダウンロードしろというからダウンロードする。
コマンドプロンプトを起動して、
python-V
と打ち込むわけだ。
「’python’は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」
????
py -V
だと
って出てくんのが尚更意味わからん。ランチャーとかいうもののおかげらしい、だからなんだよ。
予めどこのファイルにあるかコピペしとけって動画はたくさんあるが、し損ねたやつ向けの話が全然出ない。
検索するとたまにそれに触れた知恵袋的な質問が出てくるが、なぜかことごとくスルーされて回答されない。
隠しファイルなるものの存在も初めて知ったが、で?どこ?という核心がわからない。
一旦Pythonをアンインストールして振り出しに戻してからやろうとしたが
「復帰すんの?ええよ!」と言いたげなrepairなんたらかんたらって表記は出ても、結局どこでどうしたらええか出てこない。
掲示板とかで見てると「ぶちこめば良い」とかは言っても実際それがどんな手順を踏むのかわからん。
開始30分から2週間、全く進展がなくて流石に心が折れた。終わり。
--
この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。
1章
【コンテナとは】
他のプロセスとは隔離された状態でOS上にソフトウェアを実行する技術
コンテナにはアプリの稼働に必要となるランタイムやライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリの依存関係をすべてコンテナ内で完結できる。
全ての依存関係がコンテナ内で完結するため、オンプレでもクラウドでも起動する。
ステージング環境でテスト済みのコンテナイメージをプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテストに必要な工数を削減できる。
サーバー仮想化では、仮想マシンレベルでリソースを分離し、ゲストOS上でアプリが起動する。つまり、アプリだけでなく、ゲストOSを動かすためのコンピューティングリソースが必要。
一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。
【Dockerとは】
アプリをコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。
イメージ(アプリケーションと依存関係がパッケージングされる。アプリ、ライブラリ、OS)
レジストリに保存
【Dockerfileとは】
このファイルにコマンドを記述することで、アプリに必要なライブラリをインストールしたり、コンテナ上に環境変数を指定したりする。
1章まとめ、感想
コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンドや設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。
2章
ECSとEKSがある。
オーケストレーションサービスであり、コンテナの実行環境ではない。
ECSの月間稼働率は99.99%であることがSLA として保証。
デプロイするコンテナイメージ、タスクとコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。
指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサーやタスクを実行するネットワークを指定。
2種類ありECSとFargateがある。 Fargateに絞って書く
Fargateとは
コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する
サーバーのスケーリング、パッチ適用、保護、管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる
・コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる
ECR
・App Runner
利用者がコードをアップロードするだけでコードを実行できるサービス。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の登場からしばらく経過し、有識者や経験者は増え、確保しやすい。
多数のユーザーに使ってもらう
CI/CDパイプラインを形成し、アプリリリースに対するアジリティを高める
各レイヤで適切なセキュリティ対策(不正アクセス対策、認証データの適切な管理、ログ保存、踏み台経由の内部アクセス)を施したい
2章まとめ、感想
AWSが提供するコンテナサービスにはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理が不要でインフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である。
3章
この章では運用設計、ロギング設計、セキュリティ設計、信頼性設計、パフォーマンス設計、コスト最適化設計について述べている。
Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計、不具合修正やデプロイリスク軽減のためのCI/CD設計が必要である。
モニタリングとは
システム内で定めた状態を確認し続けることであり、その目的はシステムの可用性を維持するために問題発生に気づくこと
オブザーバビリティとは
オブザーバビリティの獲得によって、原因特定や対策の検討が迅速に行えるようになる
・cloud watch logs
・Firelens
AWS以外のサービスやAWS外のSaaSと連携することも可能
Firehoseを経由してS3やRed shift やOpenSearch Serviceにログを転送できる
fluent bitを利用する場合、AWSが公式に提供しているコンテナイメージを使用できる
- ソフトウェアやライブラリの脆弱性は日々更新されており、作ってから時間が経ったイメージは脆弱性を含んでいる危険がある。
- 方法
脆弱性の有無はECRによる脆弱性スキャン、OSSのtrivyによる脆弱性スキャン
継続的かつ自動的にコンテナイメージをスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリの場合、CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャンも必要になる。
cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能)
Fargateの場合、サービス内部のスケジューラが自動でマルチAZ構成を取るため、こちらで何かする必要はない。
・障害時切り離しと復旧
ECSはcloud watchと組み合わせることでタスク障害やアプリのエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる
ALBと結びつけることで、障害が発生したタスクを自動で切り離す
AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合、ECSは新しいタスクに置き換えようとするその状態のこと。
Fargateの場合、アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ不整合などが生じて危険。
ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能
自動でクォータは引き上がらない
cloud watch メトリクスなどで監視する必要がある。
パフォーマンス設計で求められることは、ビジネスで求められるシステムの需要を満たしつつも、技術領域の進歩や環境の変化に対応可能なアーキテクチャを目指すこと
利用者数やワークロードの特性を見極めつつ、性能目標から必要なリソース量を仮決めする
FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーとターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める
既存のワークロードを模倣したベンチマークや負荷テストを実施してパフォーマンス要件を満たすかどうかを確認する
・スケールアウト
サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存のタスクを停止する必要は原則ない。
スケールアウト時の注意
・Fargate上のECSタスク数の上限はデフォルトでリージョンあたり1000までであること。
ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能なIPアドレスが消費されていく
Application Autoscaling
Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う
CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意のステップに従ってタスク数を増減させる
--
この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。
1章
【コンテナとは】
他のプロセスとは隔離された状態でOS上にソフトウェアを実行する技術
コンテナにはアプリの稼働に必要となるランタイムやライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリの依存関係をすべてコンテナ内で完結できる。
全ての依存関係がコンテナ内で完結するため、オンプレでもクラウドでも起動する。
ステージング環境でテスト済みのコンテナイメージをプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテストに必要な工数を削減できる。
サーバー仮想化では、仮想マシンレベルでリソースを分離し、ゲストOS上でアプリが起動する。つまり、アプリだけでなく、ゲストOSを動かすためのコンピューティングリソースが必要。
一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。
【Dockerとは】
アプリをコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。
イメージ(アプリケーションと依存関係がパッケージングされる。アプリ、ライブラリ、OS)
レジストリに保存
【Dockerfileとは】
このファイルにコマンドを記述することで、アプリに必要なライブラリをインストールしたり、コンテナ上に環境変数を指定したりする。
1章まとめ、感想
コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンドや設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。
2章
ECSとEKSがある。
オーケストレーションサービスであり、コンテナの実行環境ではない。
ECSの月間稼働率は99.99%であることがSLA として保証。
デプロイするコンテナイメージ、タスクとコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。
指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサーやタスクを実行するネットワークを指定。
2種類ありECSとFargateがある。 Fargateに絞って書く
Fargateとは
コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する
サーバーのスケーリング、パッチ適用、保護、管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる
・コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる
ECR
・App Runner
利用者がコードをアップロードするだけでコードを実行できるサービス。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の登場からしばらく経過し、有識者や経験者は増え、確保しやすい。
多数のユーザーに使ってもらう
CI/CDパイプラインを形成し、アプリリリースに対するアジリティを高める
各レイヤで適切なセキュリティ対策(不正アクセス対策、認証データの適切な管理、ログ保存、踏み台経由の内部アクセス)を施したい
2章まとめ、感想
AWSが提供するコンテナサービスにはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理が不要でインフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である。
3章
この章では運用設計、ロギング設計、セキュリティ設計、信頼性設計、パフォーマンス設計、コスト最適化設計について述べている。
Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計、不具合修正やデプロイリスク軽減のためのCI/CD設計が必要である。
モニタリングとは
システム内で定めた状態を確認し続けることであり、その目的はシステムの可用性を維持するために問題発生に気づくこと
オブザーバビリティとは
オブザーバビリティの獲得によって、原因特定や対策の検討が迅速に行えるようになる
・cloud watch logs
・Firelens
AWS以外のサービスやAWS外のSaaSと連携することも可能
Firehoseを経由してS3やRed shift やOpenSearch Serviceにログを転送できる
fluent bitを利用する場合、AWSが公式に提供しているコンテナイメージを使用できる
- ソフトウェアやライブラリの脆弱性は日々更新されており、作ってから時間が経ったイメージは脆弱性を含んでいる危険がある。
- 方法
脆弱性の有無はECRによる脆弱性スキャン、OSSのtrivyによる脆弱性スキャン
継続的かつ自動的にコンテナイメージをスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリの場合、CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャンも必要になる。
cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能)
Fargateの場合、サービス内部のスケジューラが自動でマルチAZ構成を取るため、こちらで何かする必要はない。
・障害時切り離しと復旧
ECSはcloud watchと組み合わせることでタスク障害やアプリのエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる
ALBと結びつけることで、障害が発生したタスクを自動で切り離す
AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合、ECSは新しいタスクに置き換えようとするその状態のこと。
Fargateの場合、アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ不整合などが生じて危険。
ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能
自動でクォータは引き上がらない
cloud watch メトリクスなどで監視する必要がある。
パフォーマンス設計で求められることは、ビジネスで求められるシステムの需要を満たしつつも、技術領域の進歩や環境の変化に対応可能なアーキテクチャを目指すこと
利用者数やワークロードの特性を見極めつつ、性能目標から必要なリソース量を仮決めする
FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーとターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める
既存のワークロードを模倣したベンチマークや負荷テストを実施してパフォーマンス要件を満たすかどうかを確認する
・スケールアウト
サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存のタスクを停止する必要は原則ない。
スケールアウト時の注意
・Fargate上のECSタスク数の上限はデフォルトでリージョンあたり1000までであること。
ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能なIPアドレスが消費されていく
Application Autoscaling
Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う
CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意のステップに従ってタスク数を増減させる
都議選に集まる批判、デンベレグリーズマン(海外セレブ)の日本人労働者への差別発言、国民感情を無視したオリンピック開催、天皇のお気持ち発表、鬼滅の刃大ヒット、全ては腐った民主主義が終了して天皇による寡頭政治が始まる布石や。自民の票田になってる国粋主義者達を本気出した天皇が掻っ攫って全部終わらせてくれ。皆がアホやから民主主義が機能せえへんって嘆いてるリベラルの本音も、優秀な人間だけで寡頭政治やって欲しい、やろ。
責任者不在の政治も当事者意識のない選挙もやめてまえ。選挙に絶望しててなるようになったもんを環境変数として受け入れる大衆とそれが出来ひんぐらい窮地に立たされて割りを食ってる一部の国民がこの国の構成員や。前者は誰が環境変数を設定したかに興味がないし、後者はいざとなったときにクーデター起こす相手がハッキリしてたほうがいいやろ。
私が悪かったので責任を取ります言うて一番目立つ席に座ってた人がひとつ下に移動して引き続き甘い汁吸って、組織自体は根本的には何も変わらんって政治をいつまでも続けるより、君主一人 対 国民全員の緊張感ある政治にしようや。