8月4週
土曜:
kubernates
- kubeconfigファイル
- 接続先(コントロールプレーン )のURL、認証情報、NameSpaceなどを保持している
podの削除でハマった
- 接続先(コントロールプレーン )のURL、認証情報、NameSpaceなどを保持している
kubectl delete pod nginx-pod
でやるとconnectエラーになっていた- 正しくは
kubectl delete pods nginx-pod
sが必要だった
アプリケーション運用を考えたときに作成する手順としては
System Manager
- 踏み台サーバへ入りツールをインストールしたいときなどに使える
- 踏み台サーバではgitとpostresClientをインストールする:
データベースのエンドポイントアドレスの確認
- アプリケーションで必要なのは以下3点
- データベースのエンドポイントアドレス:cloudFormationsから確認する
- データベース管理者用パスワード:
secretsmanager
から確認する - アプリケーション用データベースユーザのパスワード
PostgresqlでのDDL実行
- コンソールから
\i スクリプトの場所
で実行できる
ECRへのログイン
- パイプで繋いでshコマンドでログインできる。shコマンドの挙動はよくわかんないけど・・・
aws ecr get-login --no-include-email | sh
imageのタグ付け
- まずはローカルでビルド:
$ docker build -t k8sbook/batch-app:1.0.0 --build-arg JAR_FILE=build/libs/batch-app-1.0.0.jar .
- ecrのURIでタグ付け:
$ docker tag k8sbook/batch-app:1.0.0 ECRのURI:1.0.0
- push:
クラッシュしたら
- ログを見る(当たり前)
kubectl logs --previous YOUR-POD_NAME
サービス(ロードバランサ)の作成
apiVersion: v1 kind: Service metadata: name: backend-app-service spec: type: LoadBalancer selector: app: backend-app ports: - protocol: TCP port: 8080 targetPort: 8080
kubectl get all
するとフロントエンドから叩くべきURL(EXTERNAL-IP)が追加されている- コンソールからも確認する(ステータスが
InService
になっていることs3 + cloudFrontにてフロントエンドアプリケーションのデプロイ
- ビルド:
BASE_URL=http://ロードバランサのEXTERNAL-IP:8080 npm run build
- S3へプッシュ:
aws s3 sync dist s3://バケット名 --delete --include "*" --acl public-read
cloudFrontのキャッシュの無効化
- キャッシュを見に行かないようにする:
aws cloudfront create-invalidation --distribution-id E3DCTCVMANTC9N --path "/*"
aws-cliのバージョンによってaws ecr get-login
のオプションが異なる
- v1だと
get-login-password
が使えない(パスワードのみ出力) - とりあえずコレ使う:
aws ecr get-login | sh
全体の手順
Podを直接デプロイしない理由
- リクエスト量や処理の負荷に応じてPod数を増減させたり、Podが以上終了した際に別のPodを起動したりできない
- Deploymentを使用することでそれができるようになる
yamlファイルに変数を渡したい場合
- envsubstを使って渡すことができる
- こんな感じ
$ ECR_HOST=999999999978777.dkr.ecr.ap-northHOGEHOGHO envsubst < deployment.yaml kubectl apply -f -
Podの管理
readinessProbe
:正常性監視・・・ヘルスチェック に失敗するとServiceからのトラフィックを停止する。livenessProbe
:死活監視・・・コレに失敗するとPodの再起動をする。※readinessProbe
が成功してからコレを行わないともしlivenessProbe
に異常があった場合、再起動の無限ループになる。
月曜:
react
- オブジェクトに対するuseStateのsetの仕方
...product
を付与することでオブジェクトの要素を展開して、別々にセットできる。コレがないと初期化されてしまう。
import React, { useState } from 'react'; export const Basic = (props) => { const clickHandler = () => { alert('click') } const [product, setProduct] = useState({name: '', price: ''}) return ( <> <fonm> <input type='text' value={ product.name } onChange={evt => {setProduct({...product, name: evt.target.value})}}/> </fonm> </> ); }; export default Basic
テンプレートの挿入の仕方
- イロイロなテンプレートがWebstormに用意されているが
rsf
って打つと基本のテンプレートが展開される
useEffect
- vueでいうcomputedみたいなもの
useContext
- 親から孫のコンポーネントに直接値を渡せるようになるもの(Propsを使わないので可読性があがる)
- キーワード:
createContext
,ProviderとConsumer
,useContext
useReducer
- 単一コンポーネント内での状態管理(mutation的な)
グローバルな状態管理をするには(孫からdispatchをして親の状態を変えるには)
- useReducerとuseContextを使う
水曜:
- Docker image 全削除
docker rmi $(docker images -a -q) -f
PostmanとmodHeader(クロム拡張)で動作確認がラクになりそう
- PostmanはBodyに情報追加したりHeaderにも追加できる
- modHeaderはHeaderをセットできるのでadmin画面で認証情報を追加するときなどに使える