[{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/categories/others/","section":"Categories","summary":"","title":"Others","type":"categories"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/","section":"tenn25 blog","summary":"","title":"tenn25 blog","type":"page"},{"content":" 参考 # https://zenn.dev/kcabo/articles/c4f9b7fecc503a\nWSL2 と VSCode の拡張などはインストール済なので Docker の Python 実行環境のみ用意する。\nmain.py\nprint(\u0026#39;Hello World!\u0026#39;) Dockerfile\nFROM python:3.9-slim-buster 左下のWSL:Ubuntuをクリック →Reopen in Containerを選択\nこれで既に用意した Dockerfile で定義したコンテナが起動してアクセス済の状態。\n","date":"2022-07-07","externalUrl":null,"permalink":"/blog/%E3%81%84%E3%81%BE%E3%81%95%E3%82%89-wsl-2-%E3%81%A7-docker%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B/","section":"記事一覧","summary":"","title":"いまさらWSL2でDocker開発環境を作る","type":"blog"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/blog/","section":"記事一覧","summary":"","title":"記事一覧","type":"blog"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"2022-07-07","externalUrl":null,"permalink":"/tags/gatsby/","section":"Tags","summary":"","title":"Gatsby","type":"tags"},{"content":" 参考 # gatsby new [SITE_DIRECTORY_NAME] [URL_OF_STARTER_GITHUB_REPO] cd gatsby-site/ gatsby develop You can now view gatsby-starter-hello-world in the browser. http://localhost:8000/ メモ # ファイルを移動したりするとやたらtsconfig.jsonでエラーが出る\nhttps://dev.classmethod.jp/articles/what-to-do-when-a-file-not-found-error-occurs-in-tsconfigjson/\nバグらしいので VSCode 再起動で直りそう。\nチュートリアル # https://docs.microsoft.com/ja-jp/learn/modules/create-deploy-static-webapp-gatsby-app-service/1-introduction?source=learn\nTypeScript で書くので書き換えながら進める\nページのコンポーネントを追加したり GraphQL でデータ取得したり。\nGraphQL # http://localhost:8000/___graphql\n最近触り始めた GraphQL\nGatsby だとgatsby-config.tsに MetaData を書いておき、その情報を GraphQL で取得できたりする。\nクエリを JS でエクスポートも出来て GraphiQL 便利だ。\n","date":"2022-07-07","externalUrl":null,"permalink":"/blog/gatsby%E3%81%93%E3%81%A8%E3%81%AF%E3%81%98%E3%82%81/","section":"記事一覧","summary":"","title":"Gatsbyことはじめ","type":"blog"},{"content":"久々に記事を更新していく\nフロントの見た目も変えたいので、開発環境を用意したい。\nブランチを作成 # \u0026gt; git branch develop Netlifyの設定 # 作成したブランチを設定\nこれだけ。\nPushしたらビルドが通って、\nhttps://develop--tenn25blog.netlify.app/\nでアクセス可能になった。 すごい。\n","date":"2022-07-01","externalUrl":null,"permalink":"/blog/netlify%E3%81%AE-stg%E7%92%B0%E5%A2%83%E4%BD%9C%E6%88%90/","section":"記事一覧","summary":"","title":"NetlifyのSTG環境作成","type":"blog"},{"content":"AZ-500 の試験範囲に対して、個人的に知らなかった箇所のメモ\nAzureAD # AAD、AAD DS、オンプレ AD の違い オンプレ AD に相当するのは AzureAD Domain Servicecs ドメインコントローラーはこちらの役割 AzureADDS は AzureAD と統合されており、それ自体がオンプレ AD と同期できる。 AzureAD は単なるアカウント管理のサービスという印象。\n管理者ロール ★ AD グループ セキュリティグループ Office365 グループ MFA リアルタイム監視・アラート SaaS との MFA 連携 認証方法 電話 SMS 登録デバイスへの Push 通知 MFA アプリによるコード\nID の保護 # Azure AD Identity Protection # ID ベースのリスクの検出と修復を自動化します。\nポータルのデータを使用してリスクを調査します。\nリスク検出データをサードパーティのユーティリティにエクスポートして、さらに分析します。\n1.ユーザーリスクポリシー ユーザーベースでリスクを測る、グループリスクの高さなどで、一定のルールでアクセス制御する 2.サインインリスクポリシー 3.MFA 登録ポリシー\nAzure AD 条件付きアクセス # 条件 → 制御\nユーザーが会社のネットワーク外にいる場合 → 多要素認証を使用してサインインする必要があります\n\u0026lsquo;マネージャー\u0026rsquo; グループのユーザーがサインインする場合 →Intune に準拠しているデバイスまたはドメインに参加しているデバイスを使用している必要があります\nAzure AD またはオンプレミスの MFA (AD FS と組み合わせる) から MFA を要求します。\n信頼できるデバイスにのみアクセスを許可します。\nドメインに参加したデバイスが必要です。\nIntune App Protection ポリシーの使用をモバイル デバイスに要求します。\nAzureAD アクセスレビュー # AAD の Identity Governance から設定、実施\nエンタープライズガバナンス # ARM # スコープ\n管理グループ(入れ子可能)＞サブスクリプション＞リソース 管理グループとは…サブスクリプションをグループ化\nAzure Policy # リアルタイムの実施とコンプライアンス評価 管理グループを活用して大規模にポリシーを適用 非準拠リソースを自動的に修復する修復ポリシーを活用することで修復することです\nAzure Policy には、次の 2 つのリソース プロバイダーにおいて、いくつかのアクセス許可 (操作) を有しています。 Microsoft.Authorization Microsoft.PolicyInsights\n複数のリソースのコンプライアンスを簡単に追跡するには、 イニシアティブ定義を作成して割り当てます。 イニシアティブ定義を使用すると、複数のポリシー定義をグループ化して、1 つの包括的な目標を達成できます。\nポリシーは、デプロイ中および既存のリソースのリソース プロパティに焦点を当てたデフォルトの許可および明示的な拒否システムです。\nRBAC # リソースロック # Azure BluePrint # ブループリントは、次のようなさまざまなリソーステンプレートおよびその他の成果物の展開を調整する宣言的な方法です。\nロールの割り当て ポリシーの割り当て A- zure Resource Manager テンプレート リソース グループ Blueprints では、ブループリントの定義 (デプロイすべき内容) とブループリントの割り当て (デプロイされた内容) の関係が保持されます。この接続は、展開の改善された追跡と監査をサポートします。ブループリントは、同じブループリントで管理されている複数のサブスクリプションを一度にアップグレードすることもできます\nARM テンプレートと BluePrint と Policy の違いを理解しよう\nPIM # JIT 期限付き 承認 MFA の必須化 通知 アクセスレビュー\nPIM は AD ロール、リソースロール両方に対して行える AD ロールは管理者ロールの付与\nハイブリット ID # AzureAD Connect # オンプレ AD をクラウドに同期する。\nオンプレミスの　Active Directory 統合が必要な場合は、クラウド認証、パスワード保護、および認証要求が Azure AD によってネイティブにサポートされている必要がありますか。答えが「はい」の場合、 パスワード ハッシュ同期+シームレス SSO を使用します。\nオンプレミスの Active Directory 統合が必要でも、クラウド認証やパスワード保護を使用する必要がなく、認証要件が Azure AD でネイティブにサポートされている場合は、 パススルー認証シームレス SSO を使用します。\nオンプレミスの Active Directory 統合が必要で、既存のフェデレーション プロバイダーがあり、認証要件が Azure AD でネイティブにサポートされていない場合は、 フェデレーション認証を使用します。\nパスワードハッシュ同期(PHS) # パスワードのハッシュをクラウドに保存して、クラウド側で認証を行う。 オンプレ AD も AAD シングルサインオンではなく、同じサインイン。\nパススルー認証(PTA) # Azure AD パススルー認証(PTA) は、Azure AD パスワード ハッシュ同期の代わりとなり、組織にクラウド認証の同じ利点を提供します。PTA を使用すると、ユーザーは同じユーザー アカウントとパスワードを使用して、オンプレミスアプリケーションとクラウドにある基づくアプリケーションの両方にサインインできます。ユーザーが Azure AD を使用してサインインすると、パススルー認証は、オンプレミスの Active Directory に対してユーザーのパスワードを直接検証します。\nパスワードライトバック # パスワードの書き戻しは、クラウド内のパスワードの変更をリアルタイムに既存のオンプレミス ディレクトリに書き戻すことを可能にする　Azure AD Connect に有効にする機能です。\n→ これにより、Office365 でパスワード変更したときに、オンプレ AD に反映されている？\nAzure B2B # 外部のテナントを自分のテナントにゲストユーザーとして追加する場合(会社はこっち)\nAzure B2C # アプリケーションを使用する顧客の管理制御\n境界セキュリティ # VNET # ExpressRoute を使用してオンプレミスネットワークと Azure Virtual Network に接続します。Azure とサイト間のリンクは、パブリック インターネットを経由しない専用の接続を使用します。\nAzure Traffic Manager を使用して、アプリケーションのインスタンス間でユーザーからの要求をインテリジェントにルーティング\nネットワークアダプタ # VM は、仮想 ネットワーク アダプターを使用して、ネットワーク上のその他の VM やその他のリソースと通信します。仮想ネットワーク アダプターは、プライベート IP アドレスおよびパブリック IP アドレス (オプション) を使用して VM を構成します。VM は、異なるネットワーク構成に対して複数のネットワーク アダプターを持つことができます。\nAzure DDoS Protection # Standard: Basic サービス レベルに加えて、特に Azure Virtual Network リソースに対してチューニングされた追加の軽減機能を提供\nポリシーは、Azure Load Balancer、Azure Application Gateway、Azure Service Fabric のインスタンスなど、仮想ネットワーク内にデプロイされたリソースに関連付けられたパブリック IP アドレスに適用されますが、この保護は App Service 環境には適用されません\nアプリケーション レイヤー保護は、Azure Application Gateway Web アプリケーション ファイアウォール を通して、または Azure Marketplace からサードパーティ製のファイアウォールをインストールすることで、追加できます。\nDDoS Protection Standard で軽減される DDoS 攻撃の種類 # ボリューム攻撃: 攻撃の目的は、一見、正当な大量のトラフィックでネットワーク層を溢れさせる\nプロトコル攻撃: これらの攻撃は、レイヤー 3 およびレイヤー 4 のプロトコル スタックの弱点を悪用\nリソース (アプリケーション) レイヤの攻撃: Web アプリケーション ファイアウォールと組み合わせると、DDoS Protection Standard は、レイヤー 3 からレイヤー 7 までの完全な緩和機能を提供できます。\nAzureFirewall # NAT ルール SNAT…外に出る通信 DNAT…内に入る通信 アプリケーション ネットワーク ルールのアプリケーション順序の優先順位は、ネットワーク ルールが先に適用され、次にアプリケーション ルールが適用されます ルールのコレクションは、優先度の順序でルール タイプに従って処理され、数値は 100 から 65,000 の数値に下がっています。 FQDN タグ…たとえば WindowsUpdate で通信する FQDN などを個別で指定して許可 FQDN タグは、よく知られている Microsoft サービスに関連付けられた、完全修飾ドメイン名 (FQDN) のグループを表します。アプリケーション ルールで FQDN タグを使用して、ファイアウォールを経由する必要な送信ネットワーク トラフィックを許可できます。\nサービス タグ サービス タグは、IP アドレス プレフィックスのグループを表し、セキュリティ ルール作成の複雑さを最小限に抑えます。 Microsoft は、サービス タグに含まれるアドレス プレフィックスを管理し、アドレスの変更に応じてサービス タグを自動的に更新します。\n脅威インテリジェンス ベースのフィルタリング 関連付けられたルールは、NAT ルール、ネットワーク ルール、またはアプリケーション ルールの前に処理されます。\nルールがトリガーされたときにアラートをログに記録するか、アラートと拒否モードを選択するかを選択できます。\nVDI（リモートワーク環境)などを構成するのに Firewall が使える VDI デプロイとの間で送受信されるインターネット アクセスを保護する方法が必要です。Azure Firewall の DNAT ルールと脅威インテリジェンス ベースのフィルター機能を使用して、VDI のデプロイを保護できます。\n仮想デスクトップのサポート\nWindows Virtual Desktop は、Azure で実行されている包括的なデスクトップおよびアプリの仮想化サービスです。これは、管理の簡略化、マルチセッションの Windows 10、Office 365 用リソースの最適化、およびリモート デスクトップ サービス (RDS) 環境のサポートを提供する唯一の仮想デスクトップ インフラストラクチャ (VDI) です。\nVPN 強制トンネリング # サイト間 (S2) VPN は、トンネルを使用して、通常の IP パケット内のデータ パケットをカプセル化して IP ベースのネットワーク経由で転送し、暗号化を使用してプライバシーと認証を行い、データの整合性を確保します。\n強制トンネリングを使用すると、検査および監査のために、サイト間の VPN トンネルを介して、インターネットへのすべてのトラフィックをオンプレミスの場所にリダイレクトまたは強制的に戻すことができます。これは、ほとんどの企業 IT ポリシーの重要なセキュリティ要件です。強制トンネリングを使用しない場合、Azure の VM からインターネットへのトラフィックは、トラフィックを検査または監査できるオプションを使用せずに、常に Azure ネットワーク インフラストラクチャからインターネットへ直接トラバースします。認証されていないインターネット アクセスは、情報の漏えいまたは他の種類のセキュリティ侵害を招く可能性があります。\nフロント用の VNET はインターネットから繋ぐようにして、 バックエンド用の VNET は強制 VPN トンネリングを使用するなど。\nネットワークセキュリティ # NSG # NSG は、トラフィックが許可されるか拒否されるかを指定するルールを含みます。各規則は、送信元 IP アドレス、送信元ポート、接続先 IP アドレス、接続先ポートに基づいています。\nFirewall は外との通信のフィルタリング NSG は VNET 内の通信のフィルタリング\nVNET または仮想 NIC １つに対して１つずつ割り当てられる。 したがって、仮想マシンの場合は、最初に NSG をサブネットに関連付け、次に別の NSG を VM のネットワーク インターフェイスに関連付けることで、仮想マシンのトラフィック制限を効果的に設定できます\n優先度。複数のルールがトラフィックに該当する場合、優先度の高いルールが適用されます。\n受信トラフィックの場合、Azure はまずサブネットに関連付けられたネットワーク セキュリティ グループ内のルールを処理します。次に、ネットワーク インターフェイスに関連付けられたネットワーク セキュリティ グループ内のルールを処理します\nASG # ルールごとに、送信元と宛先、ポート、およびプロトコルを指定できます。ネットワーク セキュリティ グループ フロー ログを有効にして、ネットワーク セキュリティ グループが関連付けられているリソースとの間のネットワーク トラフィックを分析できます。\nASG を使用すると、アプリケーションの構造の自然な拡張機能としてネットワーク セキュリティを構成できます。その後、VM をグループ化し、それらのグループに基づいてネットワーク セキュリティ ポリシーを定義することができます。\nASG の制約 セキュリティー規則の送信元および送信先として、1 つの ASG を指定できます。 送信元と送信先両方の ASG 内のすべてのネットワーク インターフェイスは、同じ仮想ネットワークに存在する必要があります。\nサービスエンドポイント # Azure サービスを VNET の中に入れて保護できるイメージ\nサービス エンドポイントを使用すると、サービス トラフィックスイッチは、仮想ネットワークから Azure サービスにアクセスするときに、仮想ネットワーク プライベート アドレスをソース IP アドレスとして使用します。 のスイッチを使用すると、IP ファイアウォールで使用される予約済みのパブリック IP アドレスを必要とすることなく、サービスにアクセスできます\nセキュリティの向上と、最適ルーティングによってパフォーマンスも上がる、管理も楽になります\nプライベートリンク # サービスエンドポイント PaaS のアドレスはグローバル IP のままだけど、仮想ネットワーク内の特定のサブネットからのみにアクセスを制限できるようにする。各サービスが持っているファイアウォール側でサブネットの IP を許可してあげればつながる。\nプライベートエンドポイント 通常 PaaS の IP アドレスはグローバル IP の所を仮想ネットワークのプライベート IP アドレスを付与する Azure Storage などのサービスに仮想ネットワーク内のサブネットにあるネットワークインターフェイスがマップされて、 Azure Storage などのサービスに対して プライベート IP が割り振られ、その IP に直接アクセスできるようにする機能である。 ExpressRoute なども使えば、オンプレからもプライベートでつながるようになる。 → プライベートリンクはこちらを使う！\nApplicationGateway # Front Door # Azure サービスをリージョンをまたいだ利用をするときのロードバランサーのような役割 可用性とパフォーマンス向上が目的\nAzure Front Door 環境へのルーティングでは、DNS (ドメイン ネーム システム) と HTTP (ハイパーテキスト転送プロトコル) トラフィックの両方に Anycast が使用されるため、ユーザー トラフィックはネットワーク トポロジ (最もホップ数が少ない) の観点から最も近い環境に移動します。\nその他機能は ApplicationGateway に似ている印象\nAzure Front Door を使用すると、最高のパフォーマンスとインスタント グローバル フェールオーバーを最適化して高可用性を実現することで、Web トラフィックのグローバル ルーティングを定義、管理、および監視できます。\nユーザー定義ルート # ？？？\nExpressRoute, Express Route Direct # ？？？\nホストセキュリティ # エンドポイント保護 # IaaS のエンドポイント保護について\nステップ１ Microsoft Partner から、Microsoft Antimalware または Endpoint Protection ソリューションをインストール\nステップ２ Security Center は、 「Endpoint protection issues」 (Endpoint Protection の問題)\n特権アクセス ワークステーション # ？？？\n仮想マシンテンプレート # ARMTemplate の話 そのアクセスの制御、監査、およびタグ付け機能を使用して、デプロイ後にリソースをセキュリティで保護し、整理することができます。\nリモート アクセス管理 # Windows…RDP or Get-AzRemoteDesktopFile Linux…SSH クライアント\nAzure Bastion # Azure portal での直接 RDP および SSH TLS およびファイアウォール トラバーサルを介した RDP/SSH のリモート セッション Azure の仮想マシン上でパブリック IP アドレス不要 NSG の管理が容易…PaaS として提供されている ポート スキャンに対する保護: ゼロデイ エクスプロイトからの保護\n仮想マシンの更新 # Azure Update Management Update Management で管理されるコンピューターでは、評価と更新プログラムの実行に次の構成を使用します。\nUpdate Management は、クラウドにデプロイされた仮想マシンにのみ関連します。Update Management は、オンプレミス環境および他のクラウド環境の仮想マシンに関連します。\nWindows または Linux 用の Microsoft Monitoring Agent (MMA) Linux 用の Windows PowerShell の Desired State Configuration (DSC) Azure Automation の Hybrid Runbook Worker Windows コンピューター用の Microsoft Update または Windows Server Update Services (WSUS) ディスクの暗号化 # Windows VM 用の Azure Disk Encryption\nDM-Crypt。Azure Disk Encryption は、Windows および Linux IaaS VM ディスクを暗号化できる機能です。Azure Disk Encryption は、Windows の業界標準の BitLocker 機能と Linux の DM-Crypt 機能を活用して、データの保護に役立つ OS とデータ ディスクの暗号化を提供します。\nWindows Defender # Security Center # CIS ベンチマークを使用して Azure ワークロードを保護する # コンテナセキュリティ # Azure Container Instances のセキュリティに関する推奨事項 # プライベート レジストリを使用する コンテナー イメージを継続的に監視およびスキャンする…SecurityCenter 統合 資格情報の保護…KeyVault 脆弱性のスキャン…Push 前にパイプラインでスキャン\nランタイムでの最小特権を適用 監査のためにすべてのコンテナー管理ユーザー アクセスをログに記録\nACI # 機械学習などのコンピューティング集約型のジョブの場合、Azure Container Instances は、NVIDIA Tesla GPU リソースを使うように Linux コンテナーがスケジュールできます。\n固定ストレージ Azure Container Instances で状態を取得して持続するために、Azure Storage によってサポートされる Azure Files 共有を直接マウントします。\nACR # 統合認証、ネットワークに近接した場所にデプロイする場合の geo レプリケーションによる世界規模での分散や信頼性の確保、仮想ネットワークとファイアウォールの構成、タグ ロックなど、\nPremium SKU のセキュリティ機能には、コンテンツの信頼によるイメージ タグへの署名、ファイアウォールと仮想ネットワークによるレジストリへのアクセスの制限などがあります。Azure Security Center を Azure Container Registry と統合すると、イメージがレジストリにプッシュされるたびに、イメージをスキャンすることもできます。\nAzureAD で認証 サービスプリンシパル 管理者 ID,パスワード\nAKS # Kubernetes の ネットワーク ポリシー機能を使用すると、クラスター内のポッド間のイングレスおよびエグレス トラフィックのルールを定義できます。\nAKS の認証 # k8s は基本的に内部にサービスアカウントというのを使っており、Secret で管理している AKS の場合、AAD と統合して、ユーザーアカウントとしてアクセス許可ができる\nkubectl 構成コンテキストを取得するには、ユーザーは az aks get-credentials コマンドを実行できます。 AKS クラスターでの Azure AD 認証には、OAuth 2.0 プロトコルの上に構築された ID 層である OpenID Connect が使用されます。\nAKS と RBAC # ①Kubernetes ロールを定義する\nkubernetes ロール…名前空間のアクセス許可の付与 Cluster ロール…クラスタ全体のリソースに適用 ② ロール バインディングとクラスタ ロール バインディングで RBAC アクセス許可をバインディング\nRoleBindings ClusterRoleBindings 上記と同じくそれらをバインディングする Secret について 各 Pod のノード上に tmpfs というディスクに書き込まれない領域に保存される。 同じ名前空間の Pod のみがアクセス可能\nSecret を使うとマニフェストに機密情報を記載しなくて済む 生のマニフェストには Base64 でデータが含まれるので Git にはコミットしないように注意\nその他 # Blob アクセスキーを更新すると SasURL は無効化される？\n","date":"2021-03-18","externalUrl":null,"permalink":"/blog/az-500-%E5%AF%BE%E7%AD%96%E3%83%A1%E3%83%A2/","section":"記事一覧","summary":"","title":"AZ-500対策メモ","type":"blog"},{"content":"","date":"2021-03-18","externalUrl":null,"permalink":"/tags/azure/","section":"Tags","summary":"","title":"Azure","type":"tags"},{"content":" WSL2 # Qiita\nhttps://qiita.com/tomokei5634/items/27504849bb4353d8fef8\nすでに WSL1 が入ってたので切り替え\nhttps://qiita.com/yanoshi/items/802e586f5f939081b08a\nDockerDesktop # Docker Desktop インストール k8s 有効化 docker の確認 docker run -d -p 80:80 docker/getting-started docker stop 955 docker rm 955 kubectl の確認 kubectl run test-pod --images docker/getting-started helm(オプション) # インストール\nhttps://helm.sh/ja/docs/intro/install/\ncurl https://helm.baltorepo.com/organization/signing.asc | sudo apt-key add - sudo apt-get install apt-transport-https --yes echo \u0026#34;deb https://baltocdn.com/helm/stable/debian/ all main\u0026#34; | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm 使い方\nhttps://helm.sh/ja/docs/intro/using_helm/\nhelm repo add brigade https://brigadecore.github.io/charts WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/tenn25/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/tenn25/.kube/config 権限を 600 に変更\nhelm パッケージの検索サイト\nhttps://artifacthub.io/\nhelm search repo brigade $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm install my-release bitnami/wordpress helm delete my-release ","date":"2021-02-11","externalUrl":null,"permalink":"/blog/wsl-2-k-8-s%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/","section":"記事一覧","summary":"","title":"WSL2+k8s開発環境構築","type":"blog"},{"content":"","date":"2021-02-11","externalUrl":null,"permalink":"/tags/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/","section":"Tags","summary":"","title":"開発環境","type":"tags"},{"content":" ブログを作り直し(n 回目) # やっとまともな見た目になったと思う。\n今回は前から気になっていたヘッドレス CMS(Gatsby CMS)を使用。\n言語も Python(Django)から Node.js(TypeScript/React)に変わった。\n過去記事全部で 80 くらいあるのを手動で移行したのかなり疲れた。\n今後はずっと生の.md ファイルで管理していきたい・・・\n","date":"2021-01-31","externalUrl":null,"permalink":"/blog/%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E3%83%AA%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%83%AB%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/","section":"記事一覧","summary":"","title":"ブログをリニューアルしました","type":"blog"},{"content":"","date":"2020-04-14","externalUrl":null,"permalink":"/tags/aws/","section":"Tags","summary":"","title":"AWS","type":"tags"},{"content":" 概要 # AWS アカウントのセキュリティ向上の流れをまとめる。\n関連サービス # Security Hub CroudTrail Config CroudTrail の有効化 # SNS トピックの作成 # アラートの設定 # aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.1-UnauthorizedAPICalls --metric-transformations metricName=CIS-3.1-UnauthorizedAPICalls,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.errorCode=\u0026#34;*UnauthorizedOperation\u0026#34;) || ($.errorCode=\u0026#34;AccessDenied*\u0026#34;)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.2-ConsoleSigninWithoutMFA --metric-transformations metricName=CIS-3.2-ConsoleSigninWithoutMFA,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=\u0026#34;ConsoleLogin\u0026#34;) \u0026amp;\u0026amp; ($.additionalEventData.MFAUsed !=\u0026#34;Yes\u0026#34;)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.3-RootAccountUsage --metric-transformations metricName=CIS-3.3-RootAccountUsage,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{$.userIdentity.type=\u0026#34;Root\u0026#34; \u0026amp;\u0026amp; $.userIdentity.invokedBy NOT EXISTS \u0026amp;\u0026amp; $.eventType !=\u0026#34;AwsServiceEvent\u0026#34;}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.4-IAMPolicyChanges --metric-transformations metricName=CIS-3.4-IAMPolicyChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=DeleteGroupPolicy) || ($.eventName=DeleteRolePolicy) || ($.eventName=DeleteUserPolicy) || ($.eventName=PutGroupPolicy) || ($.eventName=PutRolePolicy) || ($.eventName=PutUserPolicy) || ($.eventName=CreatePolicy) || ($.eventName=DeletePolicy) || ($.eventName=CreatePolicyVersion) || ($.eventName=DeletePolicyVersion) || ($.eventName=AttachRolePolicy) || ($.eventName=DetachRolePolicy) || ($.eventName=AttachUserPolicy) || ($.eventName=DetachUserPolicy) || ($.eventName=AttachGroupPolicy) || ($.eventName=DetachGroupPolicy)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.5-CloudTrailChanges --metric-transformations metricName=CIS-3.5-CloudTrailChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=CreateTrail) || ($.eventName=UpdateTrail) || ($.eventName=DeleteTrail) || ($.eventName=StartLogging) || ($.eventName=StopLogging)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.6-ConsoleAuthenticationFailure --metric-transformations metricName=CIS-3.6-ConsoleAuthenticationFailure,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=ConsoleLogin) \u0026amp;\u0026amp; ($.errorMessage=\u0026#34;Failed authentication\u0026#34;)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.7-DisableOrDeleteCMK --metric-transformations metricName=CIS-3.7-DisableOrDeleteCMK,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventSource=kms.amazonaws.com) \u0026amp;\u0026amp; (($.eventName=DisableKey) || ($.eventName=ScheduleKeyDeletion))}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.8-S3BucketPolicyChanges --metric-transformations metricName=CIS-3.8-S3BucketPolicyChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventSource=s3.amazonaws.com) \u0026amp;\u0026amp; (($.eventName=PutBucketAcl) || ($.eventName=PutBucketPolicy) || ($.eventName=PutBucketCors) || ($.eventName=PutBucketLifecycle) || ($.eventName=PutBucketReplication) || ($.eventName=DeleteBucketPolicy) || ($.eventName=DeleteBucketCors) || ($.eventName=DeleteBucketLifecycle) || ($.eventName=DeleteBucketReplication))}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.9-AWSConfigChanges --metric-transformations metricName=CIS-3.9-AWSConfigChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventSource=config.amazonaws.com) \u0026amp;\u0026amp; (($.eventName=StopConfigurationRecorder) || ($.eventName=DeleteDeliveryChannel) || ($.eventName=PutDeliveryChannel) || ($.eventName=PutConfigurationRecorder))}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.10-SecurityGroupChanges --metric-transformations metricName=CIS-3.10-SecurityGroupChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=AuthorizeSecurityGroupIngress) || ($.eventName=AuthorizeSecurityGroupEgress) || ($.eventName=RevokeSecurityGroupIngress) || ($.eventName=RevokeSecurityGroupEgress) || ($.eventName=CreateSecurityGroup) || ($.eventName=DeleteSecurityGroup)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.11-NetworkACLChanges --metric-transformations metricName=CIS-3.11-NetworkACLChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=CreateNetworkAcl) || ($.eventName=CreateNetworkAclEntry) || ($.eventName=DeleteNetworkAcl) || ($.eventName=DeleteNetworkAclEntry) || ($.eventName=ReplaceNetworkAclEntry) || ($.eventName=ReplaceNetworkAclAssociation)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.12-NetworkGatewayChanges --metric-transformations metricName=CIS-3.12-NetworkGatewayChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=CreateCustomerGateway) || ($.eventName=DeleteCustomerGateway) || ($.eventName=AttachInternetGateway) || ($.eventName=CreateInternetGateway) || ($.eventName=DeleteInternetGateway) || ($.eventName=DetachInternetGateway)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.13-RouteTableChanges --metric-transformations metricName=CIS-3.13-RouteTableChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=CreateRoute) || ($.eventName=CreateRouteTable) || ($.eventName=ReplaceRoute) || ($.eventName=ReplaceRouteTableAssociation) || ($.eventName=DeleteRouteTable) || ($.eventName=DeleteRoute) || ($.eventName=DisassociateRouteTable)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-3.14-VPCChanges --metric-transformations metricName=CIS-3.14-VPCChanges,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=CreateVpc) || ($.eventName=DeleteVpc) || ($.eventName=ModifyVpcAttribute) || ($.eventName=AcceptVpcPeeringConnection) || ($.eventName=CreateVpcPeeringConnection) || ($.eventName=DeleteVpcPeeringConnection) || ($.eventName=RejectVpcPeeringConnection) || ($.eventName=AttachClassicLinkVpc) || ($.eventName=DetachClassicLinkVpc) || ($.eventName=DisableVpcClassicLink) || ($.eventName=EnableVpcClassicLink)}\u0026#39; --region ap-northeast-1 --profile ********* aws logs put-metric-filter --log-group-name CloudTrail/DefaultLogGroup --filter-name CIS-LoginsFromOutsideHome --metric-transformations metricName=CIS-LoginsFromOutsideTOC,metricNamespace=CIS-Benchmark,metricValue=1 --filter-pattern \u0026#39;{($.eventName=\u0026#34;ConsoleLogin\u0026#34;) \u0026amp;\u0026amp; ($.sourceIPAddress !=\u0026#34;***.***.***.***\u0026#34;)}\u0026#39; --region ap-northeast-1 aws cloudwatch put-metric-alarm --alarm-name CIS-3.1-UnauthorizedAPICalls --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.1-UnauthorizedAPICalls --statistic Sum --period 300 --threshold 2 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.2-ConsoleSigninWithoutMFA --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.2-ConsoleSigninWithoutMFA --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.3-RootAccountUsage --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.3-RootAccountUsage --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.4-IAMPolicyChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.4-IAMPolicyChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.5-CloudTrailChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.5-CloudTrailChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.6-ConsoleAuthenticationFailure --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.6-ConsoleAuthenticationFailure --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.7-DisableOrDeleteCMK --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.7-DisableOrDeleteCMK --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.8-S3BucketPolicyChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.8-S3BucketPolicyChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.9-AWSConfigChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.9-AWSConfigChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.10-SecurityGroupChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.10-SecurityGroupChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.11-NetworkACLChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.11-NetworkACLChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.12-NetworkGatewayChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.12-NetworkGatewayChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.13-RouteTableChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.13-RouteTableChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-3.14-VPCChanges --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-3.14-VPCChanges --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* aws cloudwatch put-metric-alarm --alarm-name CIS-LoginsFromOutsideHOME --alarm-description \u0026#39;CloudWatch Logs: https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logStream:group=CloudTrail/DefaultLogGroup\u0026#39; --metric-name CIS-LoginsFromOutsideTOC --statistic Sum --period 300 --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --treat-missing-data notBreaching --namespace CIS-Benchmark --alarm-actions arn:aws:sns:ap-northeast-1:************:Security-Alert --region ap-northeast-1 --profile ********* ","date":"2020-04-14","externalUrl":null,"permalink":"/blog/aws%E4%B8%8A%E3%81%AE%E4%B8%8D%E6%AD%A3%E6%93%8D%E4%BD%9C%E3%82%92%E6%A4%9C%E7%9F%A5%E3%81%99%E3%82%8B/","section":"記事一覧","summary":"","title":"AWS上の不正操作を検知する","type":"blog"},{"content":"","date":"2020-04-14","externalUrl":null,"permalink":"/tags/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%81%8B%E7%94%A8/","section":"Tags","summary":"","title":"システム運用","type":"tags"},{"content":"","date":"2020-04-14","externalUrl":null,"permalink":"/tags/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3/","section":"Tags","summary":"","title":"セキュリティ","type":"tags"},{"content":"","date":"2020-01-22","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":" Window の機能から Hyper-V が有効になってることを確認\nDocker for Mac のインストール PC 再起動 アカウント取得\nスタートボタンを右クリック アプリと機能 ＞(画面右上)[プログラムと機能] ＞ Windows の機能の有効化または無効化 ＞ Windows SubSystem for Linux にチェック 再起動\nスタートボタンを右クリック ＞設定 ＞更新とセキュリティ ＞(画面左メニュー)開発者向け 開発者モードに変更(リモート展開と WindowsDevicePortal はインストールされてない)というエラー\n古い WSL 環境を削除\nlxrun /uninstall Hyper-V 確認 MobyLinuxVM 上で Docker が動く\nネットワークを確認 コントロール パネル\\ネットワークとインターネット\\ネットワーク接続 vEthernet(DockerNAT) から Docker ホストにつながってる\nDocker 右クリック＞ Settings ＞ General Expose daemon on tcp://localhost:2375 withiout TLS にチェック\nhttps://nabinno.github.io/f/2017/12/10/wsl-windows_subsystem_for_linux-%E3%81%A7docker%E3%82%92%E3%81%A4%E3%81%8B%E3%81%86.html\nUbuntu の/の実態パス C:\\Users\\hoge\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\nWSL Ubuntu 設定メモ # sudo apt-get update sudo apt install awscli ln -s /mnt/c/Users/hoge/.aws/ ~/.aws aws s3 ls ","date":"2020-01-22","externalUrl":null,"permalink":"/blog/windows-10-%E3%81%AEwsl%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E5%80%8B%E4%BA%BA%E3%83%A1%E3%83%A2/","section":"記事一覧","summary":"","title":"Windows10のWSL初期設定個人メモ","type":"blog"},{"content":"ALB のアクセスログを Athena で分析したい。\nかなりはまったのでメモ\nポイントとしては\nELB のフォーマットが変わったので古いドキュメントを参考にスキーマ設定すると取り込めない カラムを使ったパーティションと、ファイルの Prefix を使ったカラム無しパーティションがある ALB アクセスログの場合、デフォルトで YYYY/MM/DD となってしまうのでカラムありパーティションにする必要がある 今回はテーブル作成時に PARTITIONED BY で year,month,day を指定（★int 型で） テーブル作成後に、別途パーティションを作成する必要がある。(仮想的なカラムが作られる) CREATE EXTERNAL TABLE `test_alb_accesslog`( `type` string COMMENT \u0026#39;\u0026#39;, `request_timestamp` string COMMENT \u0026#39;\u0026#39;, `elb_name` string COMMENT \u0026#39;\u0026#39;, `client_addrport` string COMMENT \u0026#39;\u0026#39;, `client_ip` string COMMENT \u0026#39;\u0026#39;, `client_port` int COMMENT \u0026#39;\u0026#39;, `target_addrport` string COMMENT \u0026#39;\u0026#39;, `target_ip` string COMMENT \u0026#39;\u0026#39;, `target_port` int COMMENT \u0026#39;\u0026#39;, `request_processing_time` decimal(8,6) COMMENT \u0026#39;\u0026#39;, `target_processing_time` decimal(8,6) COMMENT \u0026#39;\u0026#39;, `response_processing_time` decimal(8,6) COMMENT \u0026#39;\u0026#39;, `elb_status_code` string COMMENT \u0026#39;\u0026#39;, `target_status_code` string COMMENT \u0026#39;\u0026#39;, `received_bytes` int COMMENT \u0026#39;\u0026#39;, `sent_bytes` int COMMENT \u0026#39;\u0026#39;, `request` string COMMENT \u0026#39;\u0026#39;, `user_agent` string COMMENT \u0026#39;\u0026#39;, `ssl_cipher` string COMMENT \u0026#39;\u0026#39;, `ssl_protocol` string COMMENT \u0026#39;\u0026#39;, `target_group_arn` string COMMENT \u0026#39;\u0026#39;, `trace_id` string COMMENT \u0026#39;\u0026#39;, `domain_name` string COMMENT \u0026#39;\u0026#39;, `chosen_cert_arn` string COMMENT \u0026#39;\u0026#39;, `matched_rule_priority` string COMMENT \u0026#39;\u0026#39;, `request_creation_time` string COMMENT \u0026#39;\u0026#39;, `actions_executed` string COMMENT \u0026#39;\u0026#39;, `redirect_url` string COMMENT \u0026#39;\u0026#39;) PARTITIONED BY ( year int, month int, day int) ROW FORMAT SERDE \u0026#39;org.apache.hadoop.hive.serde2.RegexSerDe\u0026#39; WITH SERDEPROPERTIES ( \u0026#39;input.regex\u0026#39;=\u0026#39;([^ ]*) ([^ ]*) ([^ ]*) (([^ ]*):([^ ]*)|-) (([^ ]*):([^ ]*)|-) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \\\u0026#34;([^\\\\\\\u0026#34;]*)\\\u0026#34; \\\u0026#34;([^\\\\\\\u0026#34;]*)\\\u0026#34; ([^ ]*) ([^ ]*) ([^ ]*) \\\u0026#34;([^\\\\\\\u0026#34;]*)[ ]*\\\u0026#34; \\\u0026#34;([^ ]*)\\\u0026#34; \\\u0026#34;([^ ]*)\\\u0026#34; ([^ ]*) ([^ ]*) \\\u0026#34;([^ ]*)\\\u0026#34; \\\u0026#34;([^\\\\\\\u0026#34;]*)\\\u0026#34;.*$\u0026#39;) STORED AS INPUTFORMAT \u0026#39;org.apache.hadoop.mapred.TextInputFormat\u0026#39; OUTPUTFORMAT \u0026#39;org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat\u0026#39; LOCATION \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/\u0026#39; TBLPROPERTIES ( \u0026#39;has_encrypted_data\u0026#39;=\u0026#39;false\u0026#39;, \u0026#39;transient_lastDdlTime\u0026#39;=\u0026#39;1577166285\u0026#39;) 成功\nQuery successful. If your table has partitions, you need to load these partitions to be able to query data. You can either load all partitions or load them individually. If you use the load all partitions (MSCK REPAIR TABLE) command, partitions must be in a format understood by Hive. Learn more. SELECT * FROM \u0026#34;s3\u0026#34;.\u0026#34;test_alb_accesslog\u0026#34; WHERE year = 2019 AND month = 12 AND day = 9 まだ検索できない\nZero records returned. ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=9) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/09/\u0026#39; Query successful.\n検索してみる\nSELECT * FROM \u0026#34;s3\u0026#34;.\u0026#34;test_alb_accesslog\u0026#34; WHERE year = 2019 AND month = 12 AND day = 10 (Run time: 8.61 seconds, Data scanned: 10.51 MB)\n成功！！\n別の日はまだ検索できない\nSELECT * FROM \u0026#34;s3\u0026#34;.\u0026#34;test_alb_accesslog\u0026#34; WHERE year = 2019 AND month = 12 AND day = 10 Zero records returned.\n同様に日ごとにパーティションを追加する必要がある…面倒\nALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=10) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/10/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=11) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/11/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=12) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/12/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=13) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/13/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=14) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/14/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=15) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/15/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=16) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/16/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=17) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/17/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=18) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/18/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=19) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/19/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=20) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/20/\u0026#39; ALTER TABLE test_alb_accesslog ADD IF NOT EXISTS PARTITION (year=2019,month=12,day=21) location \u0026#39;s3://[Your Backet Name]/ELB/[Your ALB Name]/AWSLogs/XXXXXXXXXXXX/elasticloadbalancing/ap-northeast-1/2019/12/21/\u0026#39; 先の日付まで先に作成しておけば良いがかなり面倒…\nそのため、Athena で分析したいデータは\nS3 のファイル Prefix を year=2019/month=12/day=22 のように格納しておくと便利。\n","date":"2019-12-24","externalUrl":null,"permalink":"/blog/aws-athena%E3%81%A7-alb%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E5%88%86%E6%9E%90-%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E4%BB%98%E3%81%8D/","section":"記事一覧","summary":"","title":"AWS AthenaでALBのアクセスログ分析(パーティション付き)","type":"blog"},{"content":"","date":"2019-12-24","externalUrl":null,"permalink":"/tags/others/","section":"Tags","summary":"","title":"Others","type":"tags"},{"content":"最近は pipenv が良いよって Python できるギャル()の方に教えてもらったので早速つかってみる\n参考 URL\nhttps://qiita.com/sl2/items/1e503952b9506a0539ea\nインストール手順 # brew で入れる。いまいちこのへんのパッケージマネージャがよく分かってない。\n\u0026gt; brew install pipenv ==\u0026gt; Summary 🍺 /usr/local/Cellar/sqlite/3.29.0: 11 files, 3.9MB ==\u0026gt; Installing pipenv dependency: python Error: Xcode alone is not sufficient on Mojave. Install the Command Line Tools: xcode-select --install エラーが出たので以下を実行 \u0026gt; xcode-select --install 再度 \u0026gt; brew install pipenv which pip /Users/******/.pyenv/shims/pip which pyenv /usr/local/bin/pyenv which pipenv /usr/local/bin/pipenv この辺消す \u0026gt; brew uninstall pyenv-virtualenv \u0026gt; brew uninstall pyenv bash再起動 \u0026gt; which pip /usr/local/bin/pip which pipenv /usr/local/bin/pipenv pyenv で使ってたファイルも消す\n\u0026gt; rm -rf requirements.txt \u0026gt; rm -rf .python-version 使い方 # プロジェクトファイルで以下\npipenv install django pipenv install --dev flake8 pipenv install --dev autopep8 Pipfile と Pipfile.lock が作られる\nPipFile には以下を追記。エイリアスを指定して任意のスクリプトを設定できる。\n[scripts] start = \u0026#34;python app.py\u0026#34; lint = \u0026#34;flake8 .\u0026#34; fix = \u0026#34;autopep8 -ivr .\u0026#34; スクリプトは pipenv run コマンドで実行\nその他フォーマットや静的解析。\nインストールパッケージのセキュリティチェック\nパッケージの依存関係の確認\npipenv run lint pipenv run fix pipenv check pipenv graph Python 仮想環境を実行\nプロジェクトフォルダで以下を実行\n\u0026gt; Python -V Python 2.7.10 \u0026gt; pipenv shell 裏では以下が実行されているよう。 裏はvirtualenvなんだね。 . /Users/*******/.local/share/virtualenvs/SampleApp-Ez1U75i8/bin/activate \u0026gt; Python -V Python 3.7.4 Cntl+Dで抜けられる。 すでに Pipfile がある場合は以下\n\u0026gt; pipenv install ","date":"2019-10-13","externalUrl":null,"permalink":"/blog/pipenv%E3%81%A7-mac%E3%81%AE-python%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86/","section":"記事一覧","summary":"","title":"pipenvでMacのPythonバージョン管理","type":"blog"},{"content":"","date":"2019-10-13","externalUrl":null,"permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"今まで venv や anaconda を使ってたので pyenv を使ってみる。\nインストール手順 # \u0026gt; brew install pyenv \u0026gt; brew install pyenv-virtualenv \u0026gt; vi ~/.bash_profile 以下を追加 if which pyenv \u0026gt; /dev/null; then eval \u0026#34;$(pyenv init -)\u0026#34; ; fi if which pyenv-virtualenv-init \u0026gt; /dev/null; then eval \u0026#34;$(pyenv virtualenv-init -)\u0026#34;; fi \u0026gt; pyenv install 3.7.4 \u0026gt; pyenv versions MacBookAir:~ tenn25$ pyenv versions * system (set by /Users/ryosuke/.pyenv/version) 3.7.4 python 仮想環境を使いたいディレクトリで以下を実行\nMacBookAir:~ tenn25$ cd /Users/ryosuke/Desktop/workspace/Django/ MacBookAir:Django tenn25$ python -V Python 3.7.4 MacBookAir:Django tenn25$ cd ../ MacBookAir:workspace tenn25$ python -V Python 2.7.10 所感 # venv に比べて一度設定すれば、いちいち activate しなくて良いのはとても便利。 今後こっちメインに使ってこう。 Mac に入ってた Anaconda3 は消した・・・\n","date":"2019-10-12","externalUrl":null,"permalink":"/blog/pyenv%E3%81%A7-mac%E3%81%AE-python%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86/","section":"記事一覧","summary":"","title":"pyenvでMacのPythonバージョン管理","type":"blog"},{"content":"","date":"2019-09-15","externalUrl":null,"permalink":"/tags/ui/ux/","section":"Tags","summary":"","title":"UI/UX","type":"tags"},{"content":"ゲームデザインの Podcast がとても良き。\nNote にまとめられてない 3 章について勝手にまとめる\nPodcast はこちら\nNotes はこちら\nボードゲームのデザイン 第 3 の柱～選択～ # 1.前段：ゲーム理論 # ゲーム理論…戦略的な状況における意思決定を数学的にモデル化したもの ノイマンの伝記「ゲームというのは数字の詰まった長方形のマトリクスに過ぎない」 じゃんけんは３＊３＝９通りの結果のマトリクス プレイヤーが 3 人なら 3 次元になる → 実際のゲームになるととても複雑 もし選択がなかったらどうなる？ # 実行はするが何も意思決定が行われない。→ 坊主めくり、すごろく等 選択がなければプレイヤーはいらない。 選択の種類 # 意味のある選択 ゲームに影響する（★ こちらにゲームの主軸がある） 意味のない選択 ゲームに影響しない 根本的に無意味な選択 駒の色を決める、名前を決めるなど 結果的に等価値で無意味な選択 一見意味がありそうだが、計算してみると価値は同じ 坊主めくりの山札が 5 つあって選択するような場合もランダムなので等価 結果的に目標には影響しない選択 ゲーム終盤、これ以上勝利点が増えないのにどの資材を買うか選ぶ状況など これらはゲーム上はあっても無くても良い これらは取り除けるなら取り除いてしまって良い ただし、プレイヤーにとって意味があり必要さ(楽しさ)を生む場合は残しても良い 要点： - 単位時間あたりの「意味のある選択」の質や量が、ゲームの面白さを生み出す。 - 意味や目的がないなら除いてしまったほうが良い。 選択におけるジレンマ # アナログゲームには選択のジレンマがあるから面白いとよく言われる。\nどっちも選びたくない、どっちも選びたい、というような板挟みで悩む状態。 これらは、選択の意味がゲームの面白さに寄与している１つの例 ただし、意味のある選択の中に無意味な選択が存在する場合がある。 【注意点】支配戦略 # ゲーム理論用語 他のプレイヤーがどの戦略を選択したとしても、最適になる戦略 明らかに有利な選択肢があると他の選択肢は無意味になる 〇 × ゲームのように勝ち方が決まっているもの レベルを上げて物理で殴ったほうが強い、など 逆に、明らかに他より劣った選択肢も同様 要点： - 選択肢は等価ではいけない。また、明確な差があってもいけない。 - ゲームとしては、どれを選ぶべきか隠匿させ、手掛かりをプレイヤーに渡す必要がある。 - 等価と明確な差という両極の間にスイートスポットがある。 - ゲームデザインでは、これを調整することが大事。 - どの選択を有利と感じるかは人によって違う。 - プレイヤーがどう感じるかを考えながらデザインする。 ゲームデザインにおける３つのキーワード # 12 の柱とは別に、ゲームデザインにおける重要なキーワード 3 つ。 「選択」という要素にはこれらが詰まっており、ゲームデザインの中でかなり重要。 意味 何事にも意味が無ければならない。意味こそが問われる。 スイートスポット どんなものにも単純な正解はなく、ゲームによって最高の中間点をみつけ無ければならない。 感覚 ゲームがどのように作られても、結局は受け取り手の感覚によって変わる。 選択肢の用意の仕方 # 選択はプレイヤーのアクションとして現れる。\nアクションによってゲームへの働きかけ。\n内部処理が発生 → 新たな状況が掲示される → それを踏まえて次のアクション → 繰り返し\n選択肢の掲示パターンは以下の 4 種類\n単一の選択肢しか選べない(原始的な方法) すごろくのようなもの。サイコロを振ることしかできない すべての選択肢が用意されている メニュー式の選択 ルール上できることが、全て何でも選択可能 パンデミックのように、サマリカードをプレイヤーに渡しそれを見て選択させることが多い 限られた選択肢をプレイヤーに渡す タイミングや条件によって制限がかかる これはメリットが多いと言える 選択肢を絞ることで思考時間を抑制できる 反復的なゲームプレイを防ぐ 盤面によって選択が変われば、ゲームプレイを多様化させる 同様に、選択肢を減らすことで結果的にゲームの多様性を付ける ★ どの選択肢が可能なのかプレイヤーに明示する必要があるため、UI として表示するのでプレイヤビリティが上がる（サマリカードを見るより盤面上で表示されてる方が分かりやすいことが多い） 開かれた選択肢 選択肢を規定しない。 大喜利など。何をやっても、何を言っても良い。 プレイヤーの行動を制御するのが難しくなる。アクティビティ寄りになる。 要点： 選択をうまく制限するとゲームの多様性や円滑なゲーム進行につながる。 メリットも多く、現代的なアナログゲームの主流になっている。 アクションの層 # アクションは選択したら終わりではない。3 層に分かれる。\n選択…アクションのフロントエンド。プレイヤーはそこに働きかける。 実行…フロントのバックエンドの仲介をするもの。 解決…バックエンド。触れることができない自動的な処理によって結果が返る 実行や解決を、選択のデザインに利用する # 実行…そのアクションを取れるかどうか。\nジェンガの例…このピースを取りたいが、取れるだけの器用さがあるかどうかによって選択が変わる。 解決…選択の結果がどうなるか。\n効果の違いの例…結果が固定ではなく、未来予測できないような場合 数ターン後に 2~4 のいずれかの結果が返る。 要点： 各アクションの価値づけを単純なものにしない スイートスポットを見つけさせることに使える。 【注意点】分析麻痺 # 状況を分析しすぎて動けなくなってしまう状態 ある選択の分析につかうコストが、それによる見返りを上回る状態 例：ドミニオンで 1 金分の差しか変わらないのに 15 分も考え込んでしまう\nこれを防ぐためには、どこかで分析を諦めさせるしかない。 チェスのような完全情報ゲームの場合は持ち時間のリミットによってゲームを成り立たせている。 分析麻痺がおこる条件 # どれかに該当しないようにする\n解を出すのに相当な量の分析が必要なこと リターンを確実に コストやリスクがかからないこと 分析麻痺対策について\nリアルタイムゲームは思考時間がコストになるので対策ができている。 各プレイヤーの選択が同時選択の場合は、じゃんけん的に相手の選択次第になるから分析を打ち切る あるいは、あるラウンドで起こることは完全情報ゲーム、ラウンドの間に乱数の発生があり、そのタイミングより未来のことは考えてもしょうがないという設計にすることで分析を打ち切る。 乱数に対しても期待値で考えてしまうプレイヤーもいる。 なるべく発生を防ぐ設計にしよう。 選択の例外 # 全体に対する意味のある選択の密度が高いほうが楽しい。 しかし、ゲームの選択肢には意味がなければならないとは限らない 難しい選択の合間に、自明の選択をあえて入れることで緩急がつく。 1 つの戦略に特化していく拡大生産系では、後半につれて選択肢が縮まっていく これには批判的意見もあるが、プレイヤーが積み上げたものに対する報酬とも言える。その単調さに喜びを感じる場合は正当化される。 要点： 選択に意味がなければならないというのは自分の行いに意味を感じられなければならない。 プレイヤー自身が「やってる感」を感じられなければならない。 自分自身の行動の結果であるという実感があれば単調な選択も正当化される。 ゲームを左右する要素 # 「選択」はゲームの結果を左右する要素の１つでしかない。\nそれ以外にどのような要素があるか。\n選択 現代はここに重点を置いている 実行 プレイヤーがそれを実行できるか。反射神経、コマンド入力、ジェンガのような器用さ、器量 寄りすぎるとスポーツになってしまう 一般的なすぽーつはここに重点を置いている 運 ランダム性 ダイス、カードドロー、ルーレット 古典的なものはこの要素が強い 政治(ポリティクス) プレイヤー間の関係性によって結果が決まる 同盟、直接攻撃、交渉、協力、裏切りなど キングメーカー問題もここに含まれる 参考：キングメーカー問題というのがあるそうな 要点： 基本的に「選択」に主眼を置く必要があるが、 「選択や実行」は個人によるもののため、結果の明白なソリティア(1人ゲーム)になってしまう。 個人ではコントロールできない「運や政治」の要素を含めることでバランスを取る必要がある。 このバランスは難しい。 ","date":"2019-09-15","externalUrl":null,"permalink":"/blog/%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3-podcast%E3%83%A1%E3%83%A2-%E7%AC%AC-3-%E3%81%AE%E6%9F%B1%E9%81%B8%E6%8A%9E/","section":"記事一覧","summary":"","title":"ゲームデザインPodcastメモ-第3の柱～選択～","type":"blog"},{"content":"","date":"2019-09-10","externalUrl":null,"permalink":"/tags/%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%82%AD%E3%83%AB/","section":"Tags","summary":"","title":"ヒューマンスキル","type":"tags"},{"content":"","date":"2019-09-10","externalUrl":null,"permalink":"/tags/%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88/","section":"Tags","summary":"","title":"マネジメント","type":"tags"},{"content":"ドラッカー研修で個人の MVC を立てた。\nミッションは世の中に貢献する、という前提で VC を設定。\n###ビジョン\n現在 # 顧客：現在担当する事業\n提供するもの：\nWeb サービスの安定運用 ​ Web サービスのコスト最適化 ​ Web サービスのセキュリティ ​ 3 年後 # 顧客：多種多様なサービス事業\n提供するもの：​\nWeb サービスの運用設計構築・改善 ​ 運用の統一化とビジネスに合わせた最適化 ​ ステークホルダーとの関係性の向上 10 年後(誰になるべきか) # 顧客：\n今までにない次世代型サービス事業\n提供するもの：\n機能的価値 ​ Web サービス運用のノウハウを別形態のサービスに適用し、最適化する ​ 新しい技術や考えを現場に取り入れ標準化できる ​ 情緒的価値 ​ あの人なら任せられるという信頼と実績 ​ 外から人が寄ってくる 顧客目線のイメージ ​ # 新市場や新技術へ参入。市場・技術のイノベーションが発生 ​\n→ どうしたらよいか分からない。技術的な側面で不安 ​\n→ あの人なら何とかしてくれそうだ。(白羽の矢が立つような存在である)\nコアバリュー(行動原則 ​) # セルフブランディング ​ 自分の強みを理解し発信する。体現する。​ 企業に属していても、一個人の IT エンジニアとして行動する。​ 信頼関係を一番大切に ​ 日常の些細なことの積み重ねを大切にする。​ 外に、未来に目を向ける ​ 社外のエンジニアやビジネスマンとの交流も大切にする。​ 視野が狭くならないように気を付ける。過去に固執しない。 ","date":"2019-09-10","externalUrl":null,"permalink":"/blog/%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B3%E3%82%A2%E3%83%90%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%92%E7%AB%8B%E3%81%A6%E3%81%9F/","section":"記事一覧","summary":"","title":"ミッション・コアバリューを立てた","type":"blog"},{"content":"ゆたかさんの「私はどのようにして Linux カーネルを学んだか」を読んだ\n自分自身は Linux カーネルを読むまではする予定がないが、\n基本知識＋実際にコードを読むにあたってのノウハウが完結にまとまっていて素晴らしい。\n全体的に図が分かりやすい。\n雑多メモ # 個人的には第６章の Linux カーネルの役割がためになった。\nCPU やプロセスの動き周りは知っておきたいところ。\nメモリを共有するのかしないのか # ユーザプロセスは、メモリ空間がそれぞれ割り当てられる。 1 プロセス内のスレッドはメモリを共有する。 カーネルは１つのメモリ空間を共有する CPU が持つレジスタにどんな情報が格納されているか。 # プログラムカウンタ # CPU が次に実行する命令を指し示す 次にやることが書いてあるメモリの場所を記憶するレジスタ スタックポインタ # スタック領域の先頭部分を指し示す 次に使えるメモリにあるスタックの番地を記憶するレジスタ フラグレジスタ（ステータスレジスタ） # CPU の演算結果が反映、条件分岐の実行に使われる 計算処理中に桁あふれを起こしたとか計算結果が０になったとか処理の状態を記憶するスレジスタ 汎用レジスタ # ヒープ領域 ソフトウェアで自由に読み書きができる スタック領域 # 実態は物理メモリ ローカル変数の格納先でもある 参考 http://ponsuke-tarou.hatenablog.com/entry/2017/10/03/235932\nプロセスの切り替え # context_switch()でプロセスのページテーブル(ユーザプロセスの仮想メモリ空間)を切り替え\n__switch_to_asm()…CPU が管理する対象のスタック領域を変更\nページング # ページングによる仮想メモリの実現とメリットをあまり意識してなかった。\nユーザプロセスは仮想アドレスを指していて、直接物理アドレスで参照してるわけではない。\n","date":"2019-09-01","externalUrl":null,"permalink":"/blog/%E7%A7%81%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6-linux%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%92%E5%AD%A6%E3%82%93%E3%81%A0%E3%81%8B%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「私はどのようにしてLinuxカーネルを学んだか」を読んだ","type":"blog"},{"content":"","date":"2019-09-01","externalUrl":null,"permalink":"/tags/%E8%AA%AD%E3%82%93%E3%81%A0%E6%9C%AC/","section":"Tags","summary":"","title":"読んだ本","type":"tags"},{"content":"「デザインはストーリーテリング」を読んだ\n概要 # ストーリーとは展開を描いて、受けての興味を引き立てるもの。\nWeb サービスも機能じゃなくて体験を作るんだーみたいのはよく言われるけど、 ストーリーの中に体験がある。 そのストーリーを描くためのプロセスや伝え方をまとめた本。\n所感 # エンジニアも共感力必要\n正直難しかった。\nデザインはとても抽象的で学びにくい。\nこれこそアウトプットを伴わないと身にならないと思った。\n重要点 # 訳者のあとがきを先に読んだ方が理解しやすかった。\nここでいう Design は名詞ではなく動詞的である。\nデザインの対象はモノではなくコト(範囲が広く、無形、サービス)であり、\nコトを姿あるものとして描写することは難しい。\nデザインの対象をプロジェクトとして捉え、それを取り巻く活動や経験を含めて描き出す必要がある。\nここでストーリーテリング(物語る)という表現が重要な役割を果たす。\n以下の例が分かりやすい\n木から落ちるりんご(モノとしての表現) りんごが木から落ちる(コトとしての表現) コトになると、それを観測/経験する主観なり自己がある。 経験は、こちら側/主観の側にあり、客観と主観の間にある。 ","date":"2019-08-30","externalUrl":null,"permalink":"/blog/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%AF%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%86%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「デザインはストーリテリング」を読んだ","type":"blog"},{"content":" 事前準備とか # Python インストール　windows https://www.python.jp/install/windows/index.html\npip https://www.python.jp/install/windows/pip.html\nPython 仮想環境作成 https://www.python.jp/install/windows/venv.html\nnpm インストール\nAWS CLI のインストールと設定\n手順 # AES CDK チュートリアル https://cdkworkshop.com/30-python.html\nGit aws-cdk-examples https://github.com/aws-samples/aws-cdk-examples\nnpm install -g aws-cdk\n作業フォルダ作成\npy -m venv D:\\workspace\\AWSCDK\\aws-cdk-examples\\python\npip install -r requirements.txt\nあとでちゃんと追記します\n","date":"2019-08-24","externalUrl":null,"permalink":"/blog/aws-cdk%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B/","section":"記事一覧","summary":"","title":"AWS CDKを始める","type":"blog"},{"content":" NPO は企業に何を教えるか # アメリカで最も多くの人が働いている組織が NPO\nマネジメントの導入により成功した\n企業が学ぶべきこと # 使命をもつこと 使命をもつこと → 行動に焦点をあてる 使命、すなわち目的の定義に力を注ぐ。仕事が具体的にわかるように目標を定める NPO は経営環境、コミュニティ、潜在顧客からスタートする。(利益からスタートしない) 自分たちの成果をしるために世界に目を向ける どのような変化を起こすことが成果とするかを明らかにする 取締役会のありかた プロの CEO を擁するようになっても、理事会のほとんどは無力化されない 資金があることと、理事会地震がボランティアとして長年関わり仕事に詳しいから 異なる役割をもつ仲間である。 無給だからこそ満足を求める # NPO は無給だからこそ、大きな貢献をなし、仕事に満足してもらわなければならない 彼らの能力や知識を活用しなければならない。意義ある成果をあげる機会を提供しなければならない。 使命。活動の源泉となるべき明確な使命 訓練。古参から新人へ教育させる 責任。全体に影響を与える意思決定に意見を述べ参画する。 企業としての課題 やりがいの問題 # ボランティアから、無給の専門スタッフへの変化 使命を明らかにし、人材を的確に配置し、継続して学習を施し、目標によるマネジメントを行い、要求水準を高くし、責任をそれに見合うものとし、自らの仕事ぶりに責任を持たせる この変化は企業として課題であり、多くの場合、企業の仕事はやりがいが十分でないとされる。 企業の所有者が変わった # マネジメントの責任 # 2 つの問題 アメリカの新しい保有者(年金基金)は企業マネジメントに対しいかなる責任をもたせなければならないか。 その責任をはたさせるためには、いかなる組織構造を実現しなければならないか。 1 について # 年金基金は多くの株式を保有しており、実質企業を支配している。 正しくマネジメントしているかを年金基金が確認しなければならなくなった。 経済史上最大の権力構造の変化であり、仕事と成果の定義を変えてしまった 2 について # 年金基金と言えども、支配している企業に対して業務分析と企業におけるマネジメントの制度化が必要 これらは、活性化した取締役会が使うべきだが、強力な所有者を代表するとき初めて効果をあげることができる。 年金基金は、最も重要な存在としての大企業の仕事ぶりと成果を確実なものにする責任がある。 2 章 いかにして社会的責任を果たすか # 社会的責任の問題は、2 つの領域で発生する それぞれの組織地震が社会に与える影響から発生する 社会全体の問題として発生する 1 について、どう対処するか # 全貌を明らかにした上で、組織の使命や目的に不要なものはすべて無くすこと 原因となる活動を中止する。または影響を取り除くことを、そのまま事業化する。 2 について、どう対処するか # 社会の問題の解決を、事業場の機会に転換する 変化をイノベーションに転換することこそ企業の使命 機会に転換できないような慢性病の問題について、マネジメントの社会的責任は何か # 企業の健康はマネジメントの責任であり、企業が健康であるためには、健全な社会が必要。誰かが解決しなければいけない。 社会的責任の限界 # 経済的な能力の限界が社会的責任の限界である。 リスクを負い、将来の活動に着手するうえでの必要な利益の最低限度を知っておかなければならない 能力のない仕事を受けるのも無責任なので、欠けている能力についても知っておく 権限の限界を知る # 権限をもつものは責任を伴う 社会的責任が要求された場合、マネジメントはそれに伴う権限が正当かどうかを考える プロフェッショナルの倫理 # マネジメントの個人も、主導的な地位にあるグループの一員であり、権限を伴う地位にあるため責任が生じる\n主導的な地位にいる＝本質的にはプロフェッショナルである\nプロたるものは「知りながら害をなすことはしない」と約束をし、信じられなければならない\nプロの理論に反する例\nマネジメントの報酬、足かせとしての不可給与、利益の説明 気づき\np74 ボランティアとしての知的労働者が第三に求めているものが責任である。 より困難な仕事と責任を求める 給料を目的として従事する人がいないぶん、組織としては正しい動きができそう ","date":"2019-06-18","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E6%9D%A1%E4%BB%B6-part-3/","section":"記事一覧","summary":"","title":"ドラッカーチェンジリーダーの条件Part3","type":"blog"},{"content":"気付き p56 事業の定義も、やがては陳腐化し実効性を失う\n成功は常に、その成功をもたらした行動陳腐化する。 新しい現実をつくり出す。新しい問題をつくり出す。\n「われわれの事業は何か」は、事業の始めだけに考えるのでも、苦境に陥ったときだけでもない。 常に変化し常に陳腐化し続ける。常に考えることが大事。\nーーーー 気付き\np42 市場において目指すべき地位は、最大ではなく最適である。\n市場でパイを取るだけでなく、競争相手とともに市場を広げることの方が大事 ーーーー\np46 組織は、社会と経済が、その組織を有用かつ生産的な仕事をしているとみなしているかぎりにおいて、存続がゆるされているにすぎない。\nーーーー\n質問 p55\n事業の定義が有効であるために。\n","date":"2019-06-11","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E6%9D%A1%E4%BB%B6-part-2/","section":"記事一覧","summary":"","title":"ドラッカーチェンジリーダーの条件Part2","type":"blog"},{"content":" Part1 1 章 マネジメントは理解されていない # マネジメントとは、事業に命を与えるダイナミックな存在\nマネジメントこそ企業が持ちうる唯一の意味のある優位性である。\nマネジメントは基本的かつ支配的な存在\nマネジメントは信念の具現である。資源を組織化することによって、人類の生活を向上させることができるという信念\n資源を生産的なものとすることを託された機関、すなわち経済発展を託された機関としてのマネジメントは、現代にとって必要不可欠である。\n重要であるにも関わらず理解されていない。\n組織だけでは、意味があることを行えない。決定や行動はマネジメントが行っている。\n組織は全て生きた存在としてマネジメントを必要とする\nPart1 2 章 社会的機能および一般教養としてのマネジメント # マネジメントの地位に立つほとんどは、マネジメントがもたらした影響を理解していない 理解していないため、間違ったやり方に気付いていない。それによる問題に対処できていない。 1 つの変化 # マネジメントが成功し、肉体労働から知識労働中心に移ったため、マネジメントが変化しつつある 現代のマネジメントは、知識の基盤が必要不可欠 マネジメントは知識を生産資源に変えた もう１つの変化 # 肉体労働にマネジメントを適用することで可能となった教育訓練の発展\n科学的管理法…仕事を分析し、誰にでもこなせる作業に分解して組み立てなおした ガントチャート…計画化の手法が発展した 分析と統計…判断材料とするために経験と直感を定量化した マーケティング…マネジメントの概念を流通と販売に応用 その他、自動化、チーム制、品質管理サークル、情報型組織 これらマネジメントの革新は、知識を仕事に適用することから生まれた\nシステムや情報が体力や汗の代わりになった\n体系としての変化 # マネジメントが起業家精神とイノベーションの領域を含むようになった どちらも必要な要素であり、どちらが欠けてもいけない マネジメントが直面する問題 # マネジメントの社会的な機能について取り組むものはあまりいない 誰が責任を負うべきか、いかなる責任を負うべきか、その力の根拠は何か、正統性の根拠はなにか 成果はいかに評価すべきか、いかに実現すべきか、何に責任を負うべきか これらの問題提起がされるようになるほど、マネジメントには力が与えられ、責任が伴う。その事実を直視していない。 マネジメントとは何か # マネジメントとは人と関わることである。 それぞれの国の文化に深い関わりを持つ 共通の価値観と目標を持つ。マネジメントはこれらの検討・決定を行い示す。 マネジメントは組織とその成員を成長させなければならない。 組織は異なる技能と知識を持つ人たちから成る。 成果を組織とマネジメントの中に取り込み常に測定できるようにしなければならない。 もっとも重要なことに集中する。企業の成果は顧客の満足であり成果は外部にある。 マネジメントは人間学である。 # マネジメントとは、人間の心、すなわち人間の本質に関わるものである。 広い分野にわたる知識と洞察を身につけなければならない リーダーシップに関わりをもつ → 人格に関する 仕事に関わりをもつ → 技能に関わる ","date":"2019-06-11","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E6%9D%A1%E4%BB%B6-part-1/","section":"記事一覧","summary":"","title":"ドラッカーチェンジリーダーの条件Part1","type":"blog"},{"content":"■ApplicationInsights\nブック…有用なクエリがあらかじめ用意されている。 トラブルシューティングガイド AppSerice 単位につくるのではなく、アプリケーションごとに１つ作るのがベスト ■BlobStrage\nライフサイクル管理…コスト削減目的で何日たったら Hot から Cool へ移動、というルール設定ができる ストレージアカウント、コンテナ、Blob のサブセットの単位。最終更新日を基準に日単位で記述\nStrage に対する AAD ベースの RBAC 制御…今までは Blob のキーを使ってアプリケーションからアクセスしてた（権限強いしセキュアじゃない） アプリ登録によるサービスプリンシパルや、マネージド ID が使える。\n■ApplicationGatewayV2\nいつの間にか V2 が出てた。\n静的 VIP のサポート（今は作り直すたびに IP が変わってるので動的に IP 制限を変更している）\n自動スケールが可能になる（今はインスタンス数２に固定してる）\nSSL オフロードの速度が 5 倍になった\nデプロイ、更新時間の短縮（今まで本当に遅かった）\nWAF のリクエストサイズ制限…本文の評価 ON/OFF、リクエスト本文サイズ、ファイルアップロードサイズ\n除外リスト…要求ヘッダ名、要求 Cookie 名、要求属性名に対して完全一致・部分一致で指定\n■AzureFrontDoorServie（新サービス）\nグローバルな負荷分散。速度も速いのが特徴。地理冗長構成にするなら使いたい。 SSL オフロード、CDN などを備える レイテンシ・優先度でのルーティング、パスベースルーティング WAF もあり、IP アドレス、地理ベースでのアクセス制御が可能 ■AzureFireWall\nいまは通常の Vnet がないので使ってない FQDN,IP,プロトコル・ポート番号でのフィルタリング SNAT,DNAT サポート 脅威インテリジェンス…悪意のある IP をリアルタイムで検知・防御 サービスタグ対応…リソースにタグをつけてアクセス制御 ■AzrueMonitor\nダイナミックアラート…アラート閾値を動的に変える（過去の推移から異常を検知する） マルチリソースアラート…複数台に同じ設定の割り当て(フル PaaS だとあまり関係ない。むしろ CloudWatch に出してほしいやつ) リソース単位のログ参照…本番のログは本番環境に権限ある人しかみれないようにする機能（権限が出力元のリソースに依存する） WorkBook…プレビュー。レポートが出せる ■AzureSecurityCentor＆Centinel（新サービス）\nSecurityCentor…今まで通り脆弱性評価と保護 Centinel…新しいサービス。セキュリティログの収集分析、イベント管理、インシデント対応の自動化 ","date":"2019-05-31","externalUrl":null,"permalink":"/blog/microsoft-de-code%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%9F/","section":"記事一覧","summary":"","title":"Microsoft De:Codeに参加した","type":"blog"},{"content":"","date":"2019-05-31","externalUrl":null,"permalink":"/tags/%E5%8B%89%E5%BC%B7%E4%BC%9A/","section":"Tags","summary":"","title":"勉強会","type":"tags"},{"content":"","date":"2019-05-30","externalUrl":null,"permalink":"/tags/sre/","section":"Tags","summary":"","title":"SRE","type":"tags"},{"content":" 所感 # FaceBook の方で見れて良かった。 De:Code 優先しちゃったけど、ぶっちゃけこっちの方が為にな ry 良かったポイントまとめ # 動画見ながら社内展開用にまとめたけど、ここには貼らず、\n個人的になるほどなぁと思ったポイントだけ抜粋。\n他社事例を教えてメンバーの安心感を得る # SRE って難しそうってイメージがめっちゃ強いのでこれは大事だと思った。\n事業・ビジネス視点を持つ # ビジネス重視、ユーザ重視\nSRE にかぎらず、デザイン思考とか、ユーザ中心設計と同じだね。\n課題やリスクのスコア化。SLI 化 # この考え面白い。\n本来のサービスレベルの意味とは違うけど、数値化して可視化するのはいいね。\nSLO 超過時の通知 # これやりたい。めっちゃ SRE やってる感がある。\n定期確認作業も Toil ですしおすし。\nリスク一覧の管理は GithubIssue のラベル付 →DataDog # かっこいい。\nExcel で障害管理表の更新とか平成に置いていきたかった…\n最初から SLO ガッツリ決めるのは大変なので小さく始める # ほ ん と そ れ\n","date":"2019-05-30","externalUrl":null,"permalink":"/blog/sre-lounge-9/","section":"記事一覧","summary":"","title":"SRE-Lounge#9","type":"blog"},{"content":" 課題 # Chapter2. 汝の時間を知れ\n追加・差し込みのタスクが多い それらのほとんど全てを受けている 成果につながらない作業。表面的な問題の対応作業が多い 成果につながる作業をする時間が減る → 成果が出せない Chapter5.最も重要なことに集中せよ 全く違うタスクを平行する必要があり、優先順位、劣後順位に誤りがありそう。\nどのような貢献ができるかはわかっているが、重要なことに集中できていない アクション # 時間の使い方 成果を出すための作業の割合を増やす、その作業の質を高める 時間を確保する 成果、非精化の時間計測 勇気をもって捨てる, 成果につながらないことをやらない。勇気をもって捨てる\n予定内・予定外で時間を計測する。\n過去よりも未来 新しいものを進めるために生産的でなくなった過去のものを捨てる 状況に流されて優先順位を決定しない トップは昨日ではなく明日を見る 状況の圧力は昨日を、機会よりも危機を、外部よりも内部を重大なものより切迫したものを優先させる 優先順位ではなく、劣後順位を決める 捨てることは危険だと思われがち。勇気が必要 ","date":"2019-05-27","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A7/","section":"記事一覧","summary":"","title":"ドラッカーを読んで","type":"blog"},{"content":" SoftwareDesign 4 月号 VSCode 特集メモ # Visual Studio Code でプログラミング始めよう ③ # インフラ勉強会 VSCode 回の３回目\nhttps://hackmd.io/s/rkn4wMT2E\nDocker や Azure の話がメインになってしまったけど、\nすべての操作を VSCode から行えるってデモができたので満足。\n最後にまた LiveShare で遊んだけど、共有中にコードを書き換えられて、\nlocalhost で意図しない挙動が発生して爆笑したｗｗ\nhttps://twitter.com/tenn_25/status/1129753769217073154\nインフラ勉強会楽しいれす＾ｐ＾\nそのあとは、公開作業部屋にて「VSCode でサーバレスと IoT」まで実施。\n拡張機能が必要という記載がなかったのでハマったりしたけど一応最後までできた。\nVSCode は使いなれたので開発やっていきたい。\n","date":"2019-05-18","externalUrl":null,"permalink":"/blog/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A-visual-studio-code%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A7%8B%E3%82%81%E3%82%88%E3%81%86-3/","section":"記事一覧","summary":"","title":"インフラ勉強会-Visual Studio Codeでプログラミング始めよう3","type":"blog"},{"content":" Chapter.6 意思決定とはなにか # 意思決定とはエグゼクティブ特有の仕事である # エグゼクティブは成果をあげるために意思決定をおこなう いくつかの明確な要素と手順から成る体系的なプロセスとして意思決定を行う 問題の根本をよく理解する 意思決定は少なくし重要なものに集中する 根本的なことに考える 決定の速さを重視しない など ヴェイルとスローンの例に学ぶ # どちらも、何についての意思決定なのかを検討して原則を明らかにする。\n概念的水準で問題に取り掛かる。\n1. 問題の種類を知る # 問題を分類すると、多くは原則についての決定を通してのみ解決できることが分かる。 この分類を間違えると決定も間違える。\n基本的な問題の兆候に過ぎないもの 根本の問題から生じる問題で、何度もよく起こる 当事者にとっては例外的だが実際には基本的な問題 一般的にはよく知られる問題だが、自分は初めて対応すること 真に例外的で特殊な問題 原因が分からないこと。珍しいこと。個別に対応が必要。 これらに出会っても「本当に例外か、もしくは 4 に該当するものか」を考える必要がある。 新しい基本的な問題の最初の表れ 一度発生した基本的な問題は、以後事務的に処理できる。\nその他注意点\n即席の措置をとるときには、長期のものでもそうするかを問うこと。 より一般的・概念的・包括的な問題解決を行うこと → こうすることで意思決定は減る（包括されるから） 2. 必要条件を明確にする # 意思決定の目的、達成したい目標は何か 決定が満たす必要条件を明確にすること\n「この問題を解決するために最低限必要なことは何か」を考える → 必要条件が明確になる\n一度行った決定をいつ放棄するか を知るためにも必要条件を明確にしておく必要がある。\n3. 何が正しいかを知る # 決定においては、\n満たすべき必要条件を満足させるうえで、何が正しいかを考えなければならない。 正しい妥協と間違った妥協を見分けることはできない\n4. 行動に変える # 決定を行動に移すのは最も時間がかかる部分である。 プロセスの最初の段階から行動への取り組みを組み込んでおく\n誰がこの意思決定を知らなければならないか 特にこれが忘れがち いかなる行動が必要か 誰が行動をとるか その人の能力に合ったものか その行動はいかなるものであるべきか 5.フィードバックを行う # 決定したことを再検討する必要があるかしるためにフィードバックを講じる必要がある。\n最高、最善の決定とも限らないし、決定の前提としていたものはいずれ陳腐化していく。\nChapter.7 成果を上げる意思決定とは # 意思決定そのものについて\n意思決定とはいくつかの選択肢からの判断である。 意思決定は自分の意見からスタートするがこれは仮説でしかない。 仮説は現実に検証されなければならない。 何が事実であるかを確定するには有意性の基準、評価の基準についての決定が必要 評価測定のための基準は、自ら出かけフィードバックを得ることが最善の方法 評価測定の基準についてもいくつかの選択肢が必要 意見の不一致が大切\n選択を行い決定できるようにする為に、意見の対立は必要。\n組織の囚人になることを防ぐから 選択肢を与えるから 想像力を刺激するから ただし、意思決定は本当に必要かを考える必要がある。\n放っておいても問題ない場合は手を付けない。 行動した場合しない場合のリスクを比較する 半分の行動はない。それは必要十分を満たさない。 その他\n決定には勇気がひつよう もう一度調べよう、と臆病にならないこと 不安が心配がある場合は少し待つ。 決定は延ばしすぎてはならない p172 常に問題は一般的であるという前提に立たなければならない 注意をひく問題は、実際は症状の１つにすぎないと考えなければならない。 そして本当の問題を探さなければならない。 p176 一度行った決定を、いつ放棄するかを知るためにも、必要条件を明確にしておく必要がある。 ","date":"2019-05-14","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC-6-7-%E7%AB%A0/","section":"記事一覧","summary":"","title":"ドラッカー6~7章","type":"blog"},{"content":" Chapter4. 人の強みを活かす # 強みによる人事 # 成果を上げるには、人の強みを活かさなければならない。 いかなる貢献ができるか、何を非常によくできるか、を考えなければ低い水準の成果しかでない。 強みこそ機会、強みを活かすことは成果を要求すること できないことに気をとられ、弱みを避けてはいけない。 人の弱みを知らないで良いというわけではない。弱みは制約条件でしかない。 Q. なぜこれらはできないのか。できる人は稀なのか？ 原因\n仕事からスタートしてしまい、その次にだれを配置するかを考えてしまっているから。 間違った対策\n手元の人間に合うように職務を構築してしまう\n→ 情実となれあいに向かう。\n→ 優れたものは去る。意欲を失う。\n→ 多様性を失い、変革する能力、意思決定のための異なる見解能力を失う。 あるべき姿\n仕事は客観的に非属人的に構築されるべきでない。 人の個性ではなく、なすべき仕事によって設計されるべき。 その理由\nまた、それこそが多様な人間を確保する唯一の道であるから。 気質や個性の違いを認め助長するための唯一の方法であるから。 間違った対策に陥らないための４つの原則 # 適切に設計されているか 人にできない仕事がないか 特殊な気質を要求する仕事、不可能な仕事は人を殺す仕事となる。 不可能な仕事を行う天才を探すのではなく、仕事を設計しなおす。 多くを要求する大きなものか ★ 多くを要求するものとして仕事を設計することで、変化した状況の新しい要求にこたえることができる。 新人の最初の仕事は、いかなる強みも発揮できるものにする。 その人間にできることか 要求するものではなく、その人にできることから始める。 行うこと、評価すべきものも、現実の成果だけである。 弱みを我慢できるか 強みを活かすように人事を行い、機会を与える 上司は、部下の強みを可能な限り活かす責任がある 上司の強みを活かす # - 上司も人なので、強みも弱みもある - 部下は「何を」ではなく「いかに」を留意する。いかなる順番で掲示するかが大事。 - 人間集団の基準はリーダーの仕事ぶりによって決まる。リーダーこそ強みに基づいて仕事をしなければならない。 成果を出す # - まず強みからスタートする。何ができるか。 - 方法についても重要。成果をあげるためにどうやるか。 Chapter5.最も重要なことに集中せよ # 1 つのことに集中せよ\n真に意味のあること、最も重要なことから始める 1 度に 1 つのことしかやらない まとまった時間が必要 時間に余裕を持つ。時間と競争しない。ゆっくり進む 昨日ではなく明日を見る。 捨てる勇気を持って劣後順位をつける。 なぜ集中が必要か\n貢献を行う時間よりも、行わなければならない貢献の方が多いから 成果の上がらないひと\n1 つの仕事に必要な時間を過小評価する 急ごうとする。時間と競争しない。ゆっくり進む 同時にいくつかのことをしている 集中のための原則\n新しいものを進めるために生産的でなくなった過去のものを捨てる 状況に流されて優先順位を決定しない トップは昨日ではなく明日を見る 状況の圧力は昨日を、機会よりも危機を、外部よりも内部を重大なものより切迫したものを優先させる 優先順位ではなく、劣後順位を決める 捨てることは危険だと思われがち。勇気が必要 質問 多くを要求するものとして仕事を設計することで、変化した状況の新しい要求にこたえることができる。 具体的にどういうこと？ 感動 p149 状況の圧力は昨日を、機会よりも危機を、外部よりも内部を重大なものより切迫したものを優先させる。 過去を優先しがちだが、何をすべきか考え勇気をもって、不要なものを捨てる。 p103 - できないことに気をとられ、弱みを避けてはいけない。 - 人の弱みを知らないで良いというわけではない。弱みは制約条件でしかない。 強みを活かすだけではない。弱みを知った上で、強みがいせるように自分、部下を p128 上司が得意なことを行えるようにすることによってのみ、部下も成果をあげられるようになる 上を見て評価を決めつけてしまう。 弱みを強調すると、意欲と成長を妨げる。 ","date":"2019-05-06","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC-4-5-%E7%AB%A0/","section":"記事一覧","summary":"","title":"ドラッカー4~5章","type":"blog"},{"content":" 令和になったし Azure 始めよう # インフラ勉強会セッションの資料\nhttps://hackmd.io/s/HJC0Xv_i4\n個人的にうまくできた気がしてる。\n登壇 11 回目だし、知識的にも安定してる分野の説明はスムーズにできて良い。\n","date":"2019-05-03","externalUrl":null,"permalink":"/blog/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A-%E4%BB%A4%E5%92%8C%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%97-azure%E5%A7%8B%E3%82%81%E3%82%88%E3%81%86/","section":"記事一覧","summary":"","title":"インフラ勉強会-令和になったしAzure始めよう","type":"blog"},{"content":"「ファイシリテーターの道具箱」を読んだのでまとめ\n序章 # ファシリテーションのスキル # プロセスをデザインする 目的と成果物を分けて考える 場をコントロールする 生産的な場であることを維持する。心の知能指数 触発する、噛み合わせる フレームワークがあるよ 発散型の道具、収束型の道具、どちらにも使える道具 → 全部使えなくていいので得意なものを身につける 合意形成と行動の変化 結果に合意するだけじゃなく、一緒に考えるというプロセスも大事。納得感。 ファイシリテーターの力 # 楽観力 前向き\u0026hellip;対立のエネルギーを前進の糧に変換する気力 未来志向\u0026hellip;過去にこだわらない 外向き\u0026hellip;顧客志向 開かれた心\u0026hellip;オープンマインド 好奇心 自分たちを客観視する力 高い目的意識 システム思考力 行動力 チームの発想を促す 3 種類の問いかけ # 全体を考えさせる 分析的に考える 他の視点で考えさせる 集団思考の落とし穴に注意 # 自分 1 人手を抜いてもいいだろうという社会的手抜き →1 人 1 人の役割をはっきりさせる。ポストイットに書かせる。 → 何をするべきか。何をしてもらうべきかを尋ねる。 あいつは嫌い、による対立 → 論点を整理して板書。対面ではなくホワイトボード。感情的になったら休憩を入れる。 声が大きい人が勝つ 集団圧力・同調行動 → 思考プロセスを書き出して悪い癖を見つける。少数の尖った意見を促進する仮説を立てる。 集団愚考\u0026hellip;極端な意見対立が起きたり、や人受けする意見が採用されるなど これだけは身につけたい道具 # アイスブレーク # 色々面白いのが載ってるので参考にする。 嘘つき自己紹介 他己紹介 マイブーム　など グランドルール # うまくいかないことを解決するためにみんなで決めるルール 例)上下関係を意識しないように全員タメ口で話す。\nパーキングエリア # 話が本筋から反れそうな時に使う。\n発言者に了承をとってホワイトボードに大きく書いて残し、話を本題に戻す。\nブレーンストーミング # どんなくだらない意見でもだす。 批判しない。ポジティブに反応する。 グルーピングでアイデアを促す # テーマをホワイトボードに書いて一定時間ポストイットに意見を出させる。 貼り終わったら似た意見をグルーピングしていき名前をつける ゴールツリー # 部署の目標などを常に見えるところに貼る。\n中目標、小目標とブレークダウンして個人レベルに落とし込む\n4W1H # 会議で決まったアクションアイテムについて、Why を除いた 5 項目を考える。\n「会議は４Ｗ１Ｈで終わる」「定例会議のはじめには前回の４Ｗ１Ｈの確認から始める」\nシンプルに考えるための道具 # 頭の柔軟体操 # お題を決めてブレスト 漢字テスト など → チームの集中力をあげられる。 トークボール # ボールを持った人が話、他の人は聞くことに集中する。 → 発言が偏っている会議に導入すると良い\nできることに集中させる # できないこと、変えられないことをいくら議論してもムダ！\nコントロール可能/不可能で分類して、可能なものについて議論する。\nモア・レス イメージで簡単に共有 # ビジョン作りなどで、「将来どうなっていたいか」と聞くと漠然としているが、\n今後増えるべきもの、減らしたいものは何か？と聞くとイメージがわきやすい。 3 年後何が増えているか？と期間を指定すると尚具体性が上がる。\nプロコン分析 # 賛成か反対かについてホワイトボードを二分する。 賛成意見について時間をとって書き出す。 次に反対意見について時間をとって書き出す。\n→ ディベートをするのではなく、全員に両方の意見を考えさせるのがキモ プロセスマッピング # 見える化して、ボトルネックを見つけるのが目的 バリューストリームマッピングなんかもこれ。 ペイオフマトリックス # たくさん出たアイデアから、どれを実行するかを決める時の手法。 判断基準を２つ決めてマトリクスに当てはめる。 日の丸分析 # 定義や役割が混乱しているときに、\n含まれるもの、含まれないものに分けて図解する。\nニュースペーパーテスト # 法的にグレーなことや問題になりそうかな？ということについて、\n明日の一面にでたらどうなるか？を話す。\nマンダラート # 中心にメインテーマ、その周辺 8 辺にサブテーマを書く。 メインテーマから離れず、偏りなく同時に考えられる。 パレート分析 # 時間がなくて困ってるチーム、優先順位付けに困ってるチームに適している。 結果の 8 割は原因の 2 割作っているという法則。 精査対象について票を入れて、票の少ないものについて、(やめる、外部化する、減らす)などの対応を考える。 振り返り # もっとこうしておけば良かったとおもうこと あなたが***さんだったらどうしたか プロセスを振り返って、もっと機能したのでは、とおもうこと 成功した要因 どうすれば失敗を回避できたか コラム # 自分をファシリテートする # 困ったらプロセス分析 1 人ブレスト 落ち込んだら、コントロール可能/不可能 集中できないときはパーキングエリア 自分自身を振り返り 自分のグランドルール 中級以降はきになったものだけ載せる # チェックイン/チェックアウト # 会議のはじめに「何を達成したいか」など一言ずつ話す 終わりにイメージ通りになったかを一言ずつ話す → だらだらの解消・集中力 UP W/C シート # 得たいこと、貢献したいことを一人ずつ書いていく 2 分割リフレーミング法 # 左右に 2 分割して、他者の優れている点、自社の劣っている点を書く(ふつうはこれしかやらない) その後、他社の劣っている点、自社の優れている点を書く(これが大事) → 隣の芝は青い、の防止 ロジックツリー # MECE(もれなく、だぶりなく)\nフィッシュボーン # 問題・課題解決時に、原因をビジュアル的にまとめる手法 出てきたアイデアの因果関係をビジュアルで表現する 魚の顔の位置に解決したいことを書き、子骨ごとに名前をつけ分類していく マインドマップ # PREP # n/5 投票 # 多数の選択肢を絞り込む時にアイデア数の 1/5 の票をそれぞれ入れて候補を絞り込む。\n→ 全ての中から議論して決めるよりも、進めやすい。\n実行力を高める道具 # フォースフィールド分析 # 実行力を高めるための方法。 T の字に 3 つの領域に分け、上に議題、左右に促進する力、抵抗する力を書く。 それぞれが縦軸を押し合う形で要素を矢印で表し、力の強さは矢印の大きさで表現する。 ステークホルダーズ分析 # 実行段階で障害になるのは人。関係者を分析するために使う。 表形式で、重要性、方針に対する姿勢、なってほしい姿勢、個人的関心、対策、などを人ごとにまとめる。 弟子ジョンツリー # 意思決定のための方法 選択肢をツリー状に分岐していき、それぞれ確率、利益、損失を書いていく 思考システム図 # 思考の遷移を図示化する。 SWOT 分析 # 今後何をすべきかを考えるための手法\n自分の強みと弱み 外部環境の機会や脅威 ペイン・プレジャーマトリクス # 組織改変の際に使える手法 変わる変わらない、喜び苦痛のマトリックスを組む 後書き # 色々あるが 5 つくらいで 80%くらいはカバーできる。得意なものを見つける・ 手法の名前とかはどうでも良くて、会議などへの導入も気負わなくて良い。わかりやすくて効果的なことが大事。 十分理解してから使おうとか考えない。 道具を使うときは目的も伝えることが大事。→ メンバーからも、もっとこうしたら？という意見ももらえる なんだかんだ時間のコントロールが一番大事。 ","date":"2019-04-27","externalUrl":null,"permalink":"/blog/%E3%83%95%E3%82%A1%E3%82%B7%E3%83%AA%E3%83%86%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%E9%81%93%E5%85%B7%E7%AE%B1%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「ファシリテーターの道具箱」を読んだ","type":"blog"},{"content":" Chapter2. 汝の時間を知れ # p46~p56\n時間は普遍的な制約である # 借りたり、買ったりできない 供給量が変わらない 他のものに代替できない 成果を上げる人と「時間」 # 成果を上げる人は時間からスタートする 成果を上げる人は時間に対する愛情ある配慮がある 記録、整理、まとめる、自分の時間をどのように使っているかを知ることが大事 エグゼクティブは「話し合い」に時間をとる # エグゼクティブから知的労働者への指示 何のために、何をするのか等を理解させる。情報を与え、対話、指導が必要 話し合いには中断のないまとまった時間が必要 組織が大きいほど、さらに多くの時間をとる 人事の決定も同じ 時間への欲求は今後も増大している # 肉体労働が単純化されれば、その分知的労働が増える 高い生活水準は想像と変革する経済が前提だが、創造と変革には膨大な時間が必要とされているており時間不足は悪化している p57~\n時間の使い方を記録し、整理し、まとめる # 記録する。記憶ではなくリアルタイムに記録する。 整理して不要な時間は排除する。整理しすぎることは無いので恐れる必要はない。 自らコントロールし得る非生産的な活動 必要のない仕事、成果を生まない仕事を排除する。(No と言う) 他の人間でもやれることは何かを考える（成果を上げる人から他の人へ) 自らコントロールし、自ら取り除くことができる時間浪費の原因を排除する。 マネジメントと組織構造の違いによって起因する時間の浪費も存在する システムや先見性の欠陥からくる時間浪費　例：繰り返し起こる問題 → 予防、ルーティン化 人員過剰からくる時間の浪費　例：人間関係、摩擦、担当、協力にかかるコスト 組織構造の欠陥から来る時間の浪費 例：会議の過剰が兆候 → 理想は会議が無い組織 情報に関わる機能障害からくる時間の浪費 例：情報伝達のミスマッチ → 最適化 自由に使える時間をまとめる。細切れな時間は役に立たない。 例：朝に自宅で仕事する。 質問 p57~ 非生産的な活動を見つけ排除する３つの方法のうち、２つ目について 他人にも自分のやるべきことがあるのでは？ →エグゼクティブが非エグゼクティブに仕事を渡すということ？ p78~\nChapter3. どのような貢献ができるか # 貢献へのコミットメント # 成果をあげるには、自らができる貢献を考えなければならない 貢献に焦点を合わせ、成果を責任を持つことが大事 これにより、組織全体、外の世界、自らのスキルや部門と組織全体の目的との関係に目がいくようになる。 なすべき貢献\n直接の貢献 価値への取り組み 人材の育成 社会は変化していくので、今まで成功した方法のままでは失敗する。 貢献すべき成果も変化するが、３つの相対的な重要度も変化する\n専門家に成果をあげさせるには # 今日組織で働くものは皆何かしらの専門家である\n専門家のアウトプット(アイデア、情報、コンセプト)は他の専門家のインプットとなる\n何を知り、何を理解し、アウトプットを誰に利用してもらうのかを考えさせる。\n1 人 1 人が貢献に責任が持つには、自分のアウトプットの有用性に関心を持つ必要がある。\n組織全体に目を向けることで、他の人が何を必要とし、何を見、何を理解しているのかを知ることができる。またそれを聞くことができる。\n自らの貢献に責任を持つ者は、専門分野を真の全体に関連付け、位置付けることができる(→ ゼネラリスト)\n良い人間関係とは # 生産的であることが、よい人間関係である。 貢献に焦点を合わせ、責任を持つことで良い人間関係が持て、以下を学ぶことにも繋がる コミュニケーション(何を期待しているか、期待されているか) チームワーク(アウトプットを誰に利用してもらうか) 自己開発(自分の強みや、自らの基準を考える。自ら課す要求に応じて成長する。) 人材育成(周囲を触発する。) 会議の成果を上げる # 会議についても貢献に焦点を当てること 成果を上げるためには何を目的とした会議、報告書なのかを知ること 目的について明らかにしなければならない 貢献に焦点を合わせるとは # 貢献に焦点を合わせるとは、成果をあげることに焦点を合わせること。 意味のあるものと、雑音との識別である。 原則を知り、強みを活かしてチームを形成する。 成果が存在する組織の外部 気付き 他人の時間まで浪費していることがある。その発見として 「あなたの仕事に貢献せず、ただ時間を浪費させるようなことを私は何かしているか？」 と聞く まとまった時間をとれていない。 →その考えがなかった。 p93 貢献のためのコミュニケーション 仕事において貢献する者は、部下達が貢献すべきことを要求する。 「組織、および上司である私は、あなたに対しどのような貢献の責任を期待すべきか」 「あなたに期待すべきことは何か」 「あなたの知識や能力を最もよく活用できる道は何か」 を聞く。 これによってはじめてコミュニケーションが可能になる。 時間管理でも「聞く」ことの重要性が挙げられていた。 成果を上げるためにコミュニケーションが重要なのは頭ではわかっていたつもりだが、 「成果をあげるため」に必要なコミュニケーションをとることが大事。 ","date":"2019-04-22","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC-2-3-%E7%AB%A0/","section":"記事一覧","summary":"","title":"ドラッカー2~3章","type":"blog"},{"content":" 前書き # ほとんどの人間は組織に属し、組織社会で生きる。 成果を上げるかどうかは「組織として成果をあげられるか」にかかっている。 現代社会が機能し、生き残れるかどうかはエグゼクティブが成果をあげられるかにかかっている。 成果をあげる者は、社会にとって必要不可欠であり、新入社員・中堅問わず本人にとっても自己実現の前提である。 8 つの習慣 # 成果を上げるためにはリーダーである必要はない。\n人は千差万別だが、成果をあげる人は以下の習慣を共通して持っている。\n【知るべきことを知る】 1. なされるべきことを考える→知るべきことを知る ・手を広げすぎてはならない ・優先順位をつける ・成果を上げるには得意なことに集中 2. 組織のことを考える→知るべきことを知る ・株主、従業員、役員のために良いことを考えるのではない ・同族企業の人事において特に大事。★ 【成果を出すための準備】 3. アクションプランをつくる ・エグゼクティブは行動してこそ価値をうむ。知識だけでは無価値 ・何を、どのように、いつまでに。を考える。 ・倫理的、法律的な制約を考える。 ・成果と期待を比較し、頻繁に更新されるもの。 ・時間管理のためにも必要 【成果を出す行動フェーズ】 4. 意思決定をおこなう ・責任者、日程、理解し納得してもらうべき人、共有するべき人を決める。 ・アクションプランと同じく見直しが必要 ・どのレイヤーでも行われることを周知することが大事 5. コミュニケーションを行う ・上記のアクションプランの合意 ・自分が必要としている情報を明確にして求める 6. 機会に焦点を合わせる ・問題を対応しているだけでは成果には繋がらない。 ・変化を脅威ではなく機会と捉える ・組織の内と外に変化を見つけて、機会にならないかを考える 7. 会議の生産性を上げる ・目的を明確にする。 ・成果をあげるために行なっている。成果になることならないことを意識する。 【組織内の全員に責任をもたらす】 8. 「私は」ではなく、「我々は」を考える ・最終責任は分担したり以上したりできない。 チャプター 1 成果を上げる能力は修得できる。 # 成果を上げるものはなぜ必要か # ほとんどの人が組織に所属し、知的労働がふえたから。 知力、知識、想像力があっても、成果をあげる力がなければ成果に繋がらない。\n知的労働者は、知識・アイデア・情報を生み出す。 それらをインプットとし、別のものがさらなるアウトプットを生み出すことで価値が生まれる。 つまり、成果を他のものに供給すること。\nエグゼクティブとは # 知識労働者は皆エグゼクティブ\n知識労働者は意思決定をする。\nエグゼクティブとは、成果が出るか出ないかを握る意思決定を行う人。 エグゼクティブとマネージャーは異なり、他者を管理してるかどうかは関係ない\n定型的な知的作業はエグゼクティブの仕事ではない\nこの本の対象者は、この本で定義したエグゼクティブ全てであり、経営層だけのものではない\n働く者を取り巻く現実 # 時間が他人に取られる\n日常業務に追われる\n組織なので自分の知識のアウトプットを他人が使ってくれないと成果にならない。\n組織の内なる世界におり、内部に目が行くことが多い。 会社の目的は外に貢献することであるが、 会社が大きいほど内側の事柄が増えて本来の外への成果を忘れてしまう 外部は抽象的/定性的、内部は具体的/定量的に計測される\n組織の意思決定にとって重要な最新の外部状況はまだ定量化されたデータとしては手に入らない。 人間の感性で事実として受け止めることになる。 事実とは、誰かが分類しレッテルを貼った出来事である。\n成果を大幅に改善する方法 # 能力の飛躍ではなく働き方を変える 専門分野以外についても基礎知識は必要 専門分野を持った人をどう扱うか 成果をあげる能力は修得できるか # 成果を出す人に、気質と能力、行動と方法、性格と知識と関心は関係ない 共通点は「なすべきことをなす」のみ 成果を上げるには人並みの能力で良い 成果をあげるために身につけておくべき 5 つの習慣\n1. 何に自分の時間を取られているか 2. 外の世界に対する貢献に焦点を合わせる。仕事ではなく期待される成果に目を向ける 3. 強みを基盤とする。自分も周りも。弱みからスタートしない。 4. 成果を上げる領域に集中する 5. 成果を上げるように意思決定をする。合意ではなく対立した上で決まる。 疑問 # 8 つの習慣と 5 つの習慣の違い。 同族企業とは。組織のことを考えるときの違い。 ","date":"2019-04-15","externalUrl":null,"permalink":"/blog/%E3%83%89%E3%83%A9%E3%83%83%E3%82%AB%E3%83%BC%E5%BA%8F%E7%AB%A0-1-%E7%AB%A0/","section":"記事一覧","summary":"","title":"ドラッカー序章～1章","type":"blog"},{"content":" SoftwareDesign 4 月号 VSCode 特集メモ # Python 開発環境構築 # python3.6 が前提\nPyhton 拡張のインストール # 「python」で検索して Microsoft 公式の python 拡張をインストール\u0026amp;再起動\nVSCode で新しいプロジェクト用のフォルダを作成して開く。 # File \u0026gt; Open\npyhton3 の環境を立ち上げる # 参考\nhttps://www.python.jp/install/install.html\npipenv や virtualenv でも構わないが、 python3.3 からは python 自体に venv が含まれているので使える。\nVsCode 上でターミナルを開くと、開いてるフォルダがカレントディレクトリとなるので\nそこで以下のコマンドを実行。\nLinux $python -m venv venv Win \u0026gt;python3 -m venv venv これで、フォルダ直下に venv というこのプロジェクト専用の python 実行環境ができた！\nなお、Windows 初回は以下を実行する。\nローカルに保存されているスクリプトに実行権限を与える。\nSet-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force # 左下の歯車\u0026gt; setting \u0026gt; WorkSpace Setting タブ\n⌘ + , (Mac) Ctrl + . (WIn?) settings.json が作られる。\nワークスペースの設定は個々にこれに設定する。\n{ // PythonのPATHをワークスペースの仮想環境にする \u0026#34;python.pythonPath\u0026#34;: \u0026#34;venv/bin/python\u0026#34;, //(Mac) ////// \u0026#34;python.pythonPath\u0026#34;: \u0026#34;${workspaceFolder}\\\\venv\\\\Scripts\\\\python.exe\u0026#34;, //(Windows) // 仮想環境にインストールしたファイルは監視対象から除外する \u0026#34;files.watcherExclude\u0026#34;: { \u0026#34;**/venv/**\u0026#34;: true }, } 再起動 # setting.json が反映され、このプロジェクトで使う Python 環境が変更される\nターミナルから使う Python 環境も変更 # コマンドパレットを起動し、「インタプリターの選択(Select Interpreter)」を選択\nCtrl + Shift + P venv を選択\n一度ターミナルを閉じて(exit)、再度開く\n(venv) MacBookAir:VSCodeProject tenn25$ 環境が表示されてれば OK\n仮想環境が有効にならない場合は以下コマンド (カレントディレクトリはプロジェクトフォルダ)\n\u0026gt; source venv/bin/activate PS\u0026gt; ./venvScripts/Activate.ps1 参考\nUsing Python environments in VS Code\nLinter のインストール # PyLint が推奨されるが、かなりチェックが厳しいので Flake8 を使おう\nお好みで pip のアップグレード\npip install --upgrade pip flake8 のインストール\npip install flake8 PyLint を無効化して Flake8 を有効化する # settings.json 全体\n{ 〜上記設定は省略〜 //リンタでPyLintは使わない \u0026#34;Python.linting.pylintEnabled\u0026#34;: false, //リンタでFlake8を使う \u0026#34;Python.linting.pylintEnabled\u0026#34;: true, } 適当なコードを書いてみてリンターが機能するか確認\ndef hello(): print(\u0026#34;Hello\u0026#34;) コードフォーマッタ # pip install black settings.json を追記\n{ 〜上記設定は省略〜 // コードフォーマッタはBlackを使う \u0026#34;python.formatting.provider\u0026#34;: \u0026#34;black\u0026#34;, // Blackは貼り付け時の整形に対応していないので無効にする \u0026#34;python.formatOnPaste\u0026#34;: false, // 1行の文字数を88文字とする \u0026#34;python.linting.flake8Args\u0026#34;: [\u0026#34;--max-line-length\u0026#34;, \u0026#34;88\u0026#34;], } 試しに長い引数を持つ関数を作ってみる\ndef many_argument_function( first_name: str, middle_name: str, last_name: str, city: str, state: str, zip_code: int, country: str, phone: str ): pass フォーマットかける\nCtrl + Shift + F フォーマットされたら OK\ndef many_argument_function( first_name: str, middle_name: str, last_name: str, city: str, state: str, zip_code: int, country: str, phone: str, ): pass Jupter Notebook をつかう # 同様に VsCode では October2018 から Jupyter をサポート\nデータの可視化ができるよ\npip install matplotlib 以下のファイルを作成\n# %% import matplotlib.pyplot as plt flg, ax = plt.subplots() ax.plot([2, 1, 3]) [# %%]から次の[# %%]までが、1 つのセルと認識される。\nRunCell を実行すると、右にグラフのウィンドウが表示されれば OK。\nJupyter 形式で出力 # グラフのウィンドウの保存アイコンから、.pyinb 形式で保存\n保存した.pyinb ファイルを VSCode で開く # 開くと Python コードで開くかと聞かれるので[Import]を選択\nPython Extention for VSCodeのメリット VSCodeでデバッグやIDEの機能が使える なおかつJupyterのによる可視化やPython以外のコードも使える 正規分布の確率密度関数を描画 # 新しいファイルで同様のことを行う。\n# %% import math import random import matplotlib.pyplot as plt def pdf(x, mu, sigma): sigma_pow = sigma * 2 return ( 1 / math.sqrt(2 * math.pi * sigma_pow) * math.exp(-(x - mu) ** 2 / 2 * sigma_pow) ) # pdf関数を可視化して確認 x = [x * 0.01 for x in range(-500, 500)] y = [pdf(x_, 0, 1) for x_ in x] fig, ax = plt.subplots() ax.plot(x, y) ax.hist([random.gauss(0, 1) for _ in range(10000)], bins=20, density=True) 描画すると少し正規分布とずれているので、デバッグする。 ブレークポイントを入れて変数の値を見ながら意図した動きをしてるか確認しよう。\n誤り) sigma_pow = sigma * 2 正しい) sigma_pow = sigma ** 2 正規分布にしたがってヒストグラムが表示されたら OK!!!!\n","date":"2019-04-07","externalUrl":null,"permalink":"/blog/visual-studio-code%E3%81%A7-python%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/","section":"記事一覧","summary":"","title":"VisualStudioCodeでPython開発環境構築","type":"blog"},{"content":" SoftwareDesign 4 月号 VSCode 特集メモ # Visual Studio Code とは # Microsoft が提供しているマルチプラットフォームのコードエディタ Electron で作られており、Win/Mac/Linux で動くデスクトップアプリ コードネーム「Monaco」と呼ばれているプラットフォームに依存しない開発環境作成プロジェクトの成果物として生まれた 正式版がリリースされてこの 4 月でちょうど 3 年目 インストールはこちら\nhttps://code.visualstudio.com/download\n機能概要 # 拡張機能が豊富で自由にカスタマイズできる(1 万以上) フォルダやファイル群を「ワークスペース」として扱うことができ、ワークスペース毎に固有設定が可能 ワークスペース配下にあるファイルを判別し、「言語モード」にしたがって言語にあった機能を提供する インテリセンス デバッグ機能 パラメータヒント コードの折りたたみ、フォーマット 変数の定義場所、参照場所の表示 バージョン管理(Git,VSTS,SVN など) ターミナルとしての機能(Powershell や bash) これらの特徴によって実質 IDE(統合開発環境)と同等の機能が提供される\n基本設定 # ショートカット\nショートカット一覧の PDF が表示される。 Help \u0026gt; Keyboard Shortcuts Reference(GUI) Ctrl + K → Ctrl + R(Win) ショートカットキー設定 Ctrl + K → Ctrl + S(Windows) ⌘ + K → ⌘ + S(Mac) キーバインド\n拡張機能として様々なキーマップが用意されている。\nVim,Emacs,IntelliJ,VisualStudio,Eclipse,Atom,SublimeText など Ctrl + K → Ctrl + M(Windows) ⌘ + K → ⌘ + M(Mac) その他設定 グローバル設定とワークスペース毎の設定が可能。\n内部的には JSON ファイルで管理される。\nCtrl + ,(Windows) ⌘ + ,(Mac) ターミナル表示\nよく使うので覚えたい。\nbash や powershell のコンソールを表示。 Ctrl + @(WIndows) Ctrl + Shift + @ (Mac) ※powershell で未入力時にバックスペース打った時の音がうざいので消したい方はこちら\nhttps://qiita.com/mazu/items/4827b04ed532d33194c3\nコーディング関連の拡張機能 # 言語ごとに色々な拡張機能がある。\nよくある主な機能は以下の通り\nシンタックスハイライト 構文に色をつけて見やすくする\nコードナビゲーション 定義の移動\n参照の検索\nインテリセンス クラスのメンバー一覧\nパラメータの保管\nリンティング 静的解析\nコードの問題点を検出\nカーソル操作 # マルチカーソル 複数行にまとめて同じ文字を追加するときなど Alt + 複数行をクリック選択 ボックス選択 矩形選択 SHft + 矢印キー コードスニペット # 自分で好きな文字を登録して、決まったコードを即時に入力する。(インテリセンス一覧に含まれる)\nやりかた要確認\nリファクタリング # JavaScript や TypeScript はデフォルトで搭載。他は拡張機能で。\nリファクタリングとリンティングをまとめて「コードアクション」と呼ぶ。\nマークが出てそれをクリックすると自動でコードを直してくれるものの総称\nCtrl + .(Win) ⌘ + . (Mac) メソッドの抽出 変数の抽出 シンボルのリネーム テキストを選択して F2 デバッグ # 左メニューのデバッグアイコン Ctrl + Shift + d (Windows) ⌘ + Shift + d (Mac) launch.json # デバッグ構成の設定はこのファイルに書く。 設定は複数追加でき、異なるソース、異なる言語、SDK などを使い分けてデバッグができる デバッグの開始 # F5\n言語のサポート # 現在 51 言語 拡張子で判断するが、以下のコマンドからでも言語モードを切り替えられる。 Ctrl + K → M (Windows) ⌘ + K → M (Mac) C#/.NET Core のサンプルアプリを作る # .NET Core3.0(1 プレビュー)のインストール https://dotnet.microsoft.com/download/dotnet-core/3.0\nOmniSharp(VS Code の C#拡張)のインストール\n\u0026gt; dotnet new wpf -o myWpfCoreApp \u0026gt; cd myWpfCoreAp \u0026gt; code . \u0026gt; dotnet build tasks.json にビルドのタスクを書く { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format \u0026#34;version\u0026#34;: \u0026#34;2.0.0\u0026#34;, \u0026#34;tasks\u0026#34;: [ { \u0026#34;label\u0026#34; : \u0026#34;build\u0026#34;, \u0026#34;command\u0026#34; : \u0026#34;dotnet\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;process\u0026#34;, \u0026#34;args\u0026#34; : [ \u0026#34;build\u0026#34;, \u0026#34;${workspaceFoler}/myWpfCoreApp.csproj\u0026#34; ], \u0026#34;problemMatcher\u0026#34;: \u0026#34;$msCompile\u0026#34; } ] } F5 でデバッグ実行できれば OK!!!\nVSCode から Git を使う # Github 登録 # https://github.com/\n新規にリポジトリを作成\nGit をインストール # https://git-scm.com/download\nVSCode のターミナルからプッシュ # Gitにコミットしたいプロジェクトのルートディレクトリで実行 PS \u0026gt; git init .gitignore ファイル作成 以下は例\nbin obj 各言語の,gitignore のサンプルはググったらでてくる。 https://github.com/github/gitignore\ngithub に push するまで\nPS \u0026gt; git config --global user.email \u0026#34;メールアドレス\u0026#34; PS \u0026gt; git config --global user.name \u0026#34;ユーザ名\u0026#34; PS \u0026gt; git add . PS \u0026gt; git commit -m \u0026#34;first commit\u0026#34; PS \u0026gt; git remote add origin https://github.com/tenn25/myWpfCoreApp.git PS \u0026gt; git push -u origin master Githubのユーザ名、パスワードを入力 Githubに反映されてれば完了 .NetCore WPF のアプリに手を加える # 参考\nhttps://tech.yayoi-kk.co.jp/entry/2018/12/11/103322\nLive Share 機能を使う # 拡張機能から「Live Share」をインストール\nなにかワークスペースを開く\nVSCode 下側の「Live Share」を押す →MS アカウントか Github アカウントでログイン\nURL がクリップボードに保存されるので、シェアしたい人に共有。\nシェアされた側も同様に拡張機能をインストールして URL にアクセス。\n→ 手元のワークスペースとして表示される。\nメモ # ログインしなくれも閲覧のみとして共有を受けられる。 音声チャットもあるとかないとか・・・？ ShareServer という機能で、共有された側も localhost でデバッグ実行が確認できる？？ ","date":"2019-04-06","externalUrl":null,"permalink":"/blog/visual-studio-code%E3%81%AE%E5%9F%BA%E7%A4%8E/","section":"記事一覧","summary":"","title":"VisualStudioCodeの基礎","type":"blog"},{"content":"スライド\n皆さんのコメントから抜粋 # PDCA # 今日のTODOを朝作って、帰る前にどの程度達成できたかを確認すると日単位でPDCA回せる リリース品質とか、エンジニアの現場のPDCAを回すための目標や指標になりえないですかね？ カンバンやってっと「Doneした数」とかにできる…けど日単位じゃないかもね。 日報について 「”文字化”を重く見るか軽く見るか」という「メンバーの感覚」で、コストかわりまっせ。 →そうそう。工数かけすぎないやり方で簡易にやるのが大事。 朝会だけにしたら終わってないのにかえる人続発したので定時前にもやることにしました →じゃあ「夕回だけにする」ですね。（二回やりたい能動的な理由にならないすわそれ 毎日（夕方16時に） ・新規チケット：○件 ・クローズチケット：○件 ・残チケット：○件 は測定して、チームに共有して翌日の目標設定に使っていましたね　（運用サービスマネージャー時代） ポモドーロでまわすと、ちゃんと5分間他の人のを見る時間取れるからいい ・OJTの日報／週報 1週間で1枚。 各日は箇条書き。3,4個で予定のタスクと実績 週の最後にKPTで振り返り 上記のやり方はよかったんですが、 EXCELで作って印刷して捺印するルールは不要だったなー オープン質問・クローズ質問 # 言語化を助けられるリーダーって大事 →\u0026gt; 言語化を助けられる だから「壁打ち役」「ラバーダック」が重要だなって(最近やけど 上手いリーダーさんは、相談したときに「自分の中で表現できない思いの言語化」を良い感じに誘導してくれてたなぁ 会議だったら 「プロジェクタにメモ帳写しながら」 「聞きたいことを箇条書きにしてく(直後には答えさせない)」 とかは、わりかし皆落ち着ける…感じがする。 時間はかかるけどオープンやらないといつまでたってもお互いを知れないので一度はやっておきたいところ 上の人たちに何か決めさせるときどっちか答えて式にする（そうしないと決まんないから） 背中を見せる # ペアプロは先輩から技術とかを学びやすくていい 会議での発言の仕方、仕切り方などを見るだけでも、後輩は勉強になる 「こういうとこ見ててね」ってのは言葉で伝えなくても、例えば「同じ場に参加させる」でもよいとは思う（一緒の会議に出るとか） ","date":"2019-03-31","externalUrl":null,"permalink":"/blog/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A-%E3%83%89%E3%83%A9%E3%82%AF%E3%82%A8%E3%81%AB%E5%AD%A6%E3%81%B6%E3%83%81%E3%83%BC%E3%83%A0%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E7%AC%AC-3-%E7%AB%A0-%E5%89%8D%E7%B7%A8/","section":"記事一覧","summary":"","title":"インフラ勉強会-ドラクエに学ぶチームマネジメント第3章(前編)","type":"blog"},{"content":" ざっくりとまとめ # 漫画なのに難しくて理解に苦しんだけど、終盤の結論は理解できた。\n要は、自我は意識の一部でしかないということ。\n意識と無意識があって、表面的には意識の面しか自分にも見えていない。\nこれら両面が見えてこそ、初めて自己が見えてくる。\n自我にも影の側面があるわけだが、それを処理する必要はなく、\n両極を受け入れ、両方がそろってこそ自己が成り立つ。\n感想 # 自分は自己の精神衛生のために「固執しない、執着しない、依存しない」を意識しているけど、\n結局それができるかどうかも、いかに自分を俯瞰して、\nどれだけバイアスかけずに公平な目で見れるかだと思ってる。\nユングの言う無意識部分に気付いて、それを受け入れることが大事。\nこの本は「無意識とは」ってところにフォーカスを当ててるので、\nユングのタイプ論など、他の話は一切出てきてない。\n機会があったらもう少しユングの本を読んでみたい。\nアドラーの「嫌われる勇気」も昔読んだけど、\nトラウマは存在しないとか、ちょっと夢見てる感じだったので、\nユングの「心の二面性や影やトラウマもある。けどそれを受け入れる」\nって考え方のほうが現実的で好き。\n","date":"2019-03-21","externalUrl":null,"permalink":"/blog/%E3%81%BE%E3%82%93%E3%81%8C%E3%81%A7%E8%AA%AD%E7%A0%B4%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%88%86%E6%9E%90%E5%BF%83%E7%90%86%E5%AD%A6%E8%87%AA%E6%88%91%E3%81%A8%E7%84%A1%E6%84%8F%E8%AD%98-%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"まんがで読破シリーズ(分析心理学・自我と無意識)を読んだ","type":"blog"},{"content":" サーバ/インフラを支える技術を読んだ # 総括 # 読んでよかった。主に負荷分散やフェールオーバーの仕組みについて体系立てて理解できた。 10 年以上前の本なので、5 章以降のツールの話は読まなくていいと思う。 1 章. サーバ/インフラ構築入門 # ハードウェアは壊れるので、冗長化が必要。\n本章では、すごく原始的な冗長化から始まって、\n順を追って冗長化の仕組みについて解説してくれている。\nコールドスタンバイ\n更新が少ない、データを持たない、などのサーバは適してる ホットスタンバイ\nDB など常に同じ状態に保っておきたいならこちら フェイルオーバー\nヘルスチェックをして、VIP を切り替えるスクリプトなどで運用するのが昔ながらの方法？ Web サーバなどはスタンバイ機のリソースが無駄になるので、できれば負荷分散をしたい。 負荷分散\nDNS ラウンドロビン サーバの数だけグローバル IP が必要 通信元の DNS キャッシュによって、均等に分散されない。 バックエンドが死んでても気づけない ロードバランサー 通信元から見えるのはロードバランサーだけ。こいつがリクエストを受ける。 そのためグローバル IP を割り当てるのも LB だけで良い。 LB がバックエンドの死活監視を行う。 負荷分散アルゴリズムが複数あり柔軟に負荷分散できる。 Linux の負荷分散ソフトウェア\nIPVS(IP Virtual Server)という。 ipvsadm, keepalived などがある。 L4 と L7 ロードバランサーの違い\nL4 は TCP ヘッダなどを見て分散先を決める。 L7 はアプリケーション層の中身まで見て分散先を決める。 L4 では通信元とバックエンドサーバを直接結ぶ(分散先を紹介するだけのイメージ) L7 では通信元 ⇄L7LB,L7LB⇄ バックエンド、の２つの TCP セッションが張られる(常に通信を仲介するイメージ) パフォーマンスは L4 の方が良いが、L7 の方が柔軟な分散ができる L7のロードバランサーを使うと、画像ファイルはWebサーバではなく、 画像ファイルサーバを直接見に行くなどの設定ができそう。(AWSの事例で見たことあるかも) また、同じセッションIDの通信は同じサーバに振り分けるなどもできる。 2 章.ワンランク上のサーバ/インフラ構築 # リバースプロキシ # L4 ロードバランサは分散先を決めるだけなので、\nその後の通信はクライアントと Web サーバが直接行う。\nここで、間にリバースプロキシを挟むことでさらに柔軟な負荷分散ができる。\nL4 ではできなかった、パスベースのルーティングを行うことができる！\nよく言うプロキシサーバはLAN→WANへ出るときに間を仲介して代理で通信してくれるサーバのこと。 逆に、WAN→LANヘリクエストが来るときに間を仲介してくれるので、「リバースプロキシ」と呼ぶ。 リバースプロキシでできることの例\nIP アドレスによる制御。特定の IP からしかリクエストを受付けない等。 パスによる制御。画像ファイルなど静的ファイルは S3、動的ファイルは AP(アプリケーション)サーバへ。 URL の書き換え。リクエスト元に見える見た目上のパスと、サーバ側のパスを変えたい場合。 UserAgent による制御。 AP サーバの動き\n基本的に 1 ユーザ(1 リクエスト)を、1 プロセス(1 スレッド)で処理する。 これによって、リソースの競合を防ぐことができるので、アプリケーション実装者が楽になる。 mod_perl,mod_php,tomcat,gunicorn などがこれにあたる認識・・・。 動的リクエストの動き\nまず、動的コンテンツへのリクエストによって HTML が生成され返される。 その後、HTML に記載された画像ファイル、JavaScript、css などのリクエストが送られる。 1 動的リクエスト+30 静的リクエスト　のようになる。 よくある構成として\n上でも書いているように、リクエストのパスによって、静的なファイルは Web サーバ、動的ファイルは AP サーバが返すようにする。 リバースプロキシ自身も Web サーバなので、自分自身が返すことが多い。(nginx とか使ってるとよくわかる) HTTP の Keepalive\nユーザが Web ページを表示するのに 1 動的リクエスト+30 静的リクエストかかるとする。 31 回コネクションを張ることはせず、Web サーバ側の keepalive の設定時間はコネクションを再利用する。 Keepalive のおかげでコネクションのオーバーヘッドが減る。 keepaliveTimeout=15 なら 15 秒で切れる。一般的に 1 リクエスト 15 秒もかからないのでもっと下げても良い。 リバースプロキシを使う性能面のメリット\nリバースプロキシが無いと AP サーバが直接セッションを維持することになるのでリソースを多く食う リバースプロキシ(Web サーバ)は AP サーバに比べてリソース使用が小さいので数百〜数千プロセス保持されても大丈夫。 Web サーバ ⇄AP サーバ間は Keepalive をオフしておけば良い。 リバースプロキシを使う機能面のメリット\nHTTP リクエストの前処理/後処理ができる mod_deflate\u0026hellip;レスポンスを gzip 圧縮して通信量を下げる(gzip はブラウザ側で解凍可能) mod_dosdetector\u0026hellip;DDoS 対策のモジュール(急激なアクセス負荷から守る) リバースプロキシについてその他ノウハウ\nプロセスが大量に増えるので worker モデルが適している。 prefork は 1 クライアント 1 プロセス、worker は 1 クライアント 1 スレッド。 httpd.conf の設定で最大プロセス数(MaxCLients)と、プロセスあたりの最大スレッド数()ThreadsPerChild を設定。 ServerLimit,ThredLimit も注意。これらのデフォルト値を超えそうな場合は調整しよう。 ただしメモリがスワップしない程度を上限としてチューニングすること。 キャッシュサーバ # ブラウザ-サーバ間のキャッシュの働き\nすでにブラウザ側で画像のキャッシュを持っている 新たにリクエストを投げる時は If-Modified-Since という日付がリクエストに含められる サーバ側はその日付以降にファイルが更新されていなければ、304(Not Modified)を返す ブラウザは自身の持っているキャッシュを表示する。 squid をプロキシサーバとして用いてキャッシュを利用する例\n学内 LAN から WAN に出る時はキャッシュサーバである squid を仲介する。 他の PC から同じリクエストがあった場合、キャッシュが残っていればそれを返す。 これによって、限られたネットワーク帯域節約できる。 squid をリバースプロキシとして用いる例\n仕組みは上記と同様 別の squid とキャッシュを共有することもできるので、冗長化も可能 動的コンテンツを 30 分だけキャッシュするなども可能(※ただしログインが絡む箇所は注意が必要) memchached の利点\n上の注記で書いたように squid は、cookie によるセッション管理をする場合など、ステートレスでない場合は対応しきれない。 squid はあくまでページごとのキャッシュであるのに対し、memcached はアプリケーション内で使うデータをキャッシュする。 MySQL のレプリケーション # MySQL の非同期レプリケーションの概要\nシングルマスタ、マルチスレーブの構成が主 レプリケーションの遅延を減らすため、スレーブには、IO スレッド、SQL スレッドに別れている。 IO スレッド\u0026hellip;マスタ側が出力した更新情報(バイナリログ)を読み取り、リレーログに書き込む。 SQL スレッド\u0026hellip;リレーログを読み取りスレーブに SQL を発行する。 スレーブは「どこまで同期したか」を示す「ポジション情報」を持っている。 スレーブを読み取り専用として活用する\nリアルタイムバックアップとしてだけでなく、負荷分散のために使うことを考える。 更新処理はマスターに、参照はスレーブに送ることで負荷分散させる方法が一般的。 さらに、スレーブをスケールアウトすることで、読み取りの負荷分散が可能。 一般的に RDBMS は SELECT 操作が大部分を閉めるのでこの方法は理にかなっている。 更新 or 参照の割り振りは AP サーバ側で行う。 スレーブの負荷分散には内部ロードバランサーを使う。 高速で軽量なストレージサーバの選択 # 今の現場だと、オンプレ環境でも Amazon S3 を s3fs でマウントするとかできるので、\nよほどキツイ要件じゃなければ勉強する必要性が低そうなので飛ばす。\n3 章.止まらないインフラを目指す # DNS サーバの冗長化 # resolv.conf に複数 DNS サーバを記載しておくことはできるが、1 台目のタイムアウト待ち時間は深刻な問題になることがある。 DNS サーバ自体の冗長化 VRRP(keepAlive など)を使った冗長化が可能(VIP を付け替えることによる Active/Backup 構成) IPVS と KeepAlive などでロードバランサーによる冗長化が可能(Active/Active 構成) ストレージサーバの冗長化 # 割愛\nネットワークの冗長化 # L1/l2 の冗長化\nLAN ケーブルや NIC などの故障(リンク故障)\n→ サーバとスイッチ間を冗長化する。ボンディングによって複数の物理 NIC を１つの論理 NIC として扱う\nネットワークスイッチなどスイッチ間接続の故障\n→NIC を冗長化しても接続先のスイッチが単一だったら意味がない。\nさらなる冗長化について書かれているが、自分の業務とは遠いので割愛・・ このへんは基礎用語が分かってればいいかな・・・ VLAN の冗長化 # VLAN のメリット\n構成変更の柔軟性が上がる スイッチの有効活用ができる\u0026hellip;上位ルーター、下位ルーターの別セグメントをまとめて管理できる サーバの追加や置き換え、故障の復旧を物理的なつなぎ直しなしで行える。 Q. もしVLANを使わず同じスイッチで別セグメントで利用すると？ A. マルチキャスト/ブロードキャストフレームや、 まだスイッチが学習できていない宛先不明なユニキャストフレームなどは、 関係のないセグメントへも転送されてしまう。 無駄な帯域を消費するうえ、セキュリティ的にもよくない！ VLAN の種類 # スタティック VLAN\u0026hellip;ポート単位にグループわけをする。変更も手動。 ダイナミック VLAN\u0026hellip;ルールに基づいてグループわけをする。 ポート VLAN\nポートごとに VLANID を割り当て、グループごとに同じ ID を割り当てる。 設定はシンプルだが、複数スイッチ間でグルーピングできない。 タグ VLAN\n端末やスイッチから Ethernet フレームが送られる時に VLAN ID を挿入する。 複数スイッチ OK だが、フレームが流れる機器が全て VLAN タグに対応してないといけない。 4 章.性能チューニング # 「負荷を知るということは、OSを知るということ」 「推測するな。計測せよ。」 Webアプリケーションの負荷分散は、多くの場合ディスクIOの分散と軽減。 OSはIOを軽減するために、キャッシュの仕組みを持つ。 キャッシュが最も効くようにすることがIO分散のコツ。 ボトルネック見極めの流れ # まずロードアベレージを見る\n高い？→CPU がボトルネック top,sar\u0026hellip;カーネルかユーザーか、コア毎に見る ps\u0026hellip;プロセスの特定 strace,oprofile\u0026hellip;ボトルネックの特定 逆にいうと他がボトルネックになっていない理想的な状況\nまたは、プログラムのバグやリクエスト過多によるもの\n高くない → メモリ、IO ps でプロセスを特定 単純に入出力が多いか、スワップしてページアクセスが発生している\nそもそも負荷とは\n「複数タスクによるサーバリソースの奪い合いによって生じる待ち時間」 プロセスとは\n「プログラムの命令と、実行時に必要な情報がひとまとめになったオブジェクト」 プロセスディスクリプタ\nプロセスごとに作られる管理用のテーブル。プロセスの状態を持つ。 TASK_RUNNNING\u0026hellip;実行可能な待ち状態 TASK＿INTERRUPTABLE\u0026hellip;割り込み可能な待ち状態。スリープやユーザからの入力待ちなど。復帰可能時間が不明 TASK_UNINETERRUPTABLE\u0026hellip;割り込み不可能な待ち状態。ディスクの入出力待ち。短時間で復帰可能。 TASK_STOPPED\u0026hellip;サスペンドのシグナルを送られてリジュームされるまでスケジューリングされない TASK_ZOMBIE\u0026hellip;ゾンビプロセス。 プロセスとスレッド # スレッドの方が、メモリ空間を共有する分リソースを食わない スレッドの方が、コンテキストスイッチが発生しない分コストが低い ただし、カーネルから見ればスレッドも 1 つずつのプロセスのように見えている(LWP\u0026hellip;Light Wight Process) ps -L でマルチスレッドのスレッドも一覧で表示される。 sarコマンドのオプション sar -u...CPU(cpU) sar -r...メモリ(memoRy) sar -q...LoadAverage(キュー) 各項目の意味 usr...ユーザモードでCPUが消費された割合 nice...niceで優先度を変更していたプロセスがユーザモードでCPUを消費した時間の割合 system...システムモードでCPUが消費された時間の割合 iowait...CPUがディスクのIO待ちのためにアイドル状態で消費した時間の割合 steal...OS仮装化の場合に、他の仮装CPUの計算で待たされた時間 idle...待たされることなくアイドル状態で消費した時間の割合 チューニング # チューニングは、そのハードウェア、ミドルウェアが本来持つ性能を十分発揮できるようにすること。 限界以上の性能が出るわけではない。 遅くなった原因が明確になれば、対応方法を実施するだけ。 ボトルネックが発生したときに原因を特定するための知識が必要 チューニングのアプローチ # 頭が痛いから頭痛薬を飲もう！みたいな対処療法はやめよう 根本原因を突き止めて根本解決を。(肩凝りからの頭痛かもしれない) システムチューニングの場合は、推測ではなく計測をすること！！！ システムの性能限界以上の性能は出ない。ボトルネックが無いならサーバのスペックを上げるしかない 計測するためのツールの使い方と、OS やミドルウェアの仕組み・内部構造を理解しておくこと Web サーバ(Apache) # 並行処理の実装モデル\nマルチプロセス マルチスレッド イベントドリブン MPM(multi processing module)\nprefork\u0026hellip;あらかじめ複数プロセスを生成する worker\u0026hellip;マルチプロセスとマルチスレッドの複合技。大規模やスケーラビリティを求めるとこちら プログラミングの観点から見た違い\nマルチプロセスの方が、メモリ空間が分割されているので安全 マルチスレッドの方がリソースの競合を考慮しないといけないので実装が難しい。 結局、1クライアントあたりのレイテンシに違いはない。 大量のコンテキストスイッチがある場合をのぞいて大きな性能差は無い。 DB サーバ(MySQL) # チューニングの観点としては「いかに高速にデータの入出力を行うか」 サーバサイド ディスク IO のカーネルパラメータの設定 ファイルシステムの選択とマウントオプション パーティショニング サーバサイド以外 テーブルの設計 SQL の最適化 ","date":"2019-03-06","externalUrl":null,"permalink":"/blog/%E3%82%B5%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「サーバ・インフラを支える技術」を読んだ","type":"blog"},{"content":" Athena について # Presto という分散 SQL で書くことができる。\nPresto は標準 SQL 準拠なので、基本的な書き方は馴染みがある。\nhttps://prestodb.github.io/docs/0.172/sql.html\nクエリ例 # ALB のログを時間ごとに区切って件数を集計\nALB のログの date は timestamp 型のフォーマットに合っていないので以下の関数を使う\ndate_trunc によって足切りをして集計する。\nSELECT time,request_verb,request_url, count(time) AS count FROM ( SELECT date_trunc(\u0026#39;hour\u0026#39;,from_iso8601_timestamp(time) AT TIME ZONE \u0026#39;Asia/Tokyo\u0026#39;) AS time,request_verb,request_url FROM \u0026#34;db\u0026#34;.\u0026#34;alb_logs\u0026#34; WHERE DATE_PARSE(time, \u0026#39;%Y-%m-%dT%H:%i:%S.%fZ\u0026#39;) \u0026gt;= DATE_PARSE(\u0026#39;2019-02-14 12:50:00\u0026#39;, \u0026#39;%Y-%m-%d %H:%i:%S\u0026#39;) AND DATE_PARSE(time, \u0026#39;%Y-%m-%dT%H:%i:%S.%fZ\u0026#39;) \u0026lt; DATE_PARSE(\u0026#39;2019-02-14 13:00:00\u0026#39;, \u0026#39;%Y-%m-%d %H:%i:%S\u0026#39;) ) GROUP BY time,request_verb,request_url ORDER BY time,request_verb,request_url 画像や js,css ファイルが邪魔な場合は not like とかで除こう\nWHERE request_url not like \u0026#39;%.css%\u0026#39; and request_url not like \u0026#39;%.js%\u0026#39; and request_url not like \u0026#39;%.png%\u0026#39; and request_url not like \u0026#39;%.jpeg%\u0026#39; and request_url not like \u0026#39;%.jpg%\u0026#39; and request_url not like \u0026#39;%.ico%\u0026#39; ","date":"2019-02-15","externalUrl":null,"permalink":"/blog/aws-athena%E3%81%A7%E3%83%AD%E3%82%B0%E9%9B%86%E8%A8%88/","section":"記事一覧","summary":"","title":"AWS Athenaでログ集計","type":"blog"},{"content":"順次追記していく\nクラウドにおける負荷試験の目的 # 各種ユースケースを想定し、それぞれにおけるシステムの応答速度を推測する 大量のデータ登録 データ容量の増加 ユーザ数の増加 バッチ処理とのバッティング システムが異常系を返す 再起動直後でキャッシュが効かない場合 など\n高負荷時におけるシステムの性能改善を行う 応答速度の低下 ロックの競合 エラー発生 データ不整合\n目的の性能を提供するために必要なハードウェアをあらかじめ選定する クラウドはあまり気にしなくて良い\nシステムがスケール性をもつことを確認する\nシステムのスケール特性を把握する どこを上げれば性能が上がるのか 上げるためのダウンタイムはどれくらいか どこまで上がるのか(限界がある場合は今の構成でどれくらいのユーザ数増加まで耐えられるのかを把握する)\n性能指標 # 大きく分けて 2 つ\nスループット\n単位時間あたりに捌ける処理数\nレイテンシ\n1 の処理をさばくのにかかる時間\nユーザ目線のレイテンシ\nリクエストを投げてからレスポンスを受け取りブラウザで描画するまでの時間 システム目線のレイテンシ\n→web システムで制御可能なのはこっち。\n一般的に言うレイテンシはこっち Web のシステムがリクエストを受け取ってからレスポンスを返すまでの時間 システムは複数のサブシステムから成る(Web,API,DB など)\nシステム全体のスループット…全サブシステムのうち、もっともスループットが低い箇所に依存する システム全体のレイテンシ…待ち時間も含めた全サブシステムのレイテンシの合計値 スループットの改善 # スループットがもっとも低い箇所(ボトルネック)を特定 → 改善する → 別の場所がボトルネックになる → 改善する\nの繰り返し\nレイテンシの改善 # 待ち時間を含んでいるのがミソ 一見処理時間が長いサブシステムが原因に見えても、その先のサブシステムのスループットが低く、待ち時間が発生してるということもある。 ボトルネック関係なく、短くした分全体の性能の改善につながる\n負荷試験計画 # スケジュール\n余裕を持ったスケジュールを。改善の時間も込みで考える 目的\n各種ユースケースを想定した応答速度の推測 サービス利用開始時にユーザが大量登録 データ量の増加 \b- 急激なアクセス増加 バッチ処理とのバッティング システムが異常系を起こす 再起動後にキャッシュが揮発している 高負荷時の性能改善 ハードウェアの選定 スケール性があることの確認 スケール特性の把握 など 前提条件\n試験範囲 ユーザ数、データ量 外部システムのレイテンシ、制約 目標値の継続時間(一瞬満たせばいいのか何時間維持、など) 負荷のかけかた(ネットワーク経路など)\b 目標値\nレイテンシーとスループット 利用するツール\n試験環境\nシナリオ\n目標値の決め方 # スループットが上がる → レイテンシーが上がる、の流れ\n正常…スループットが上がってもレイテンシが上がらない 全体的に遅い…スループットが低くてもレイテンシが遅い 性能不足…スループットが上がるとレイテンシが急激に上がる スループットの目標値 一定時間にどの程度アクセスがあるか\n1 日の利用者数(A) 1 人あたりの 1 日の平均アクセス数(B) 1 日の平均アクセス数に対する最大ピーク時の倍率(C) を求める (A _ B) / 86,400 秒= 1 日の平均 rps 1 日の平均 rps _ C = 最大ピーク時の倍率 = 最大 rps\n最大 rps に安全係数(2 とか 3)をかけて数字をスループットの目標値とする。 この目標値が達成できれば想定されるアクセスを捌ける、と考える。\n例 スループット=20000DAU 1 人あたりの平均アクセス数=50 1 日平均アクセス数に対する最大ピーク時の倍率=5 倍 安全係数=2\nrps= 30,000 _ 50 / 86,400 _ 5 * 2 = 173.6rps\n高負荷シナリオの決定 # アクセス頻度の高いページ リソース消費量が高い \b ことが分かってるページ DB を参照/更新するページ 外部と通信するページ ","date":"2019-02-12","externalUrl":null,"permalink":"/blog/aws%E8%B2%A0%E8%8D%B7%E8%A9%A6%E9%A8%93%E5%85%A5%E9%96%80%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「AWS負荷試験入門」を読んだ","type":"blog"},{"content":" 事前準備 # docker hub アカウント取得\nPlayWithDocker にログイン # ブラウザ上で Docker を動かす環境をタダで使える\nhttps://labs.play-with-docker.com\nインスタンスを 1 台起動する\nコンソールから linux の操作ができる\n[node1] (local) root@192.168.0.58 ~ $ pwd /root $ ls コンソールから docker hub にログイン # $ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don\u0026#39;t have a Docker ID, head over to https://hub.docker.com to create one. Username: tenn25 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded サンプルリポジトリを clone # たまたま inductor さんのリポジトリにサンプルがあるので clone する。\ngit clone git@github.com:inductor/dockertest.git Dockerfile があるディレクトリに移動 # $ cd dockertest $ ls Dockerfile\tLICENSE\tREADME.md DockerHub からイメージを取ってくる # (tenn25 は自分の DockerHub の ID)\n(タグ名はなくても大丈夫だけど適当につける)\n$ docker build -t tenn25/dockertest:tag1 . Sending build context to Docker daemon 70.14kB Step 1/1 : FROM nginx:1.15 1.15: Pulling from library/nginx 6ae821421a7d: Pull complete da4474e5966c: Pull complete eb2aec2b9c9f: Pull complete push する(すでに 1 度 push 済みなので already exists ってなってます)\n$ docker push tenn25/dockertest:tag1 The push refers to repository [docker.io/tenn25/dockertest] 6b5e2ed60418: Layer already exists 92c15149e23b: Layer already exists 0a07e81f5da3: Layer already exists DockerHub を確認 # 自分の DockerHub のリポジトリを確認\nタグをつけた場合は dockertest:tag1 があることを確認\nタグつけなかったら dockertest:latest かな？\nDockerfile を編集してみる # 例えば Dockerfile に 1 行追加して git をインストールする\nFROM nginx:1.15 RUN apt update \u0026amp;\u0026amp; apt install -y git 改めてビルドする # 別のタグをつけてビルド\ngit のインストールだけでめっちゃエラーでるけど、\n最小構成のスリム(？)イメージだと \b こうなるっぽい 。\n$ docker build -t tenn25/dockertest:tag2 . 〜〜〜中略〜〜〜 Setting up git (1:2.11.0-3+deb9u4) ... Processing triggers for libc-bin (2.24-11+deb9u3) ... Processing triggers for ca-certificates (20161130+nmu1+deb9u1) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Removing intermediate container fe05a00373e4 ---\u0026gt; 83eb7133fc48 Successfully built 83eb7133fc48 Successfully tagged tenn25/dockertest:git 再度 push する # 追加の 4 つ目だけ新たに push されたことが分かる。\n$ docker push tenn25/dockertest:tag2 The push refers to repository [docker.io/tenn25/dockertest] 995a3e14eeff: Pushed 6b5e2ed60418: Layer already exists 92c15149e23b: Layer already exists 0a07e81f5da3: Layer already exists 再度 DockerHub を確認 # tag2 が push されてることを確認\nDocker イメージを起動してみよう # 起動するコマンドを指定できる\nbush をつければ bash が起動してコンテナ内で操作できる\ndocker run -it name/dockertest bash Q. コンテナ内でlsとか打てるけど、表示されてるディレクトリの実態はどこ？ A. コンテナの中のファイルシステム。Dockerコンテナの中。 Docker のイメージ一覧確認 # docker image ls でもおｋ\n$ docker images tenn25/dockertest latest f09fe80eb0e7 5 days ago 109MB tenn25/dockertest tag1 f09fe80eb0e7 5 days ago 109MB tenn25/dockertest tag2 d3a331ab32c9 24 minutes ago 209MB docker コンテナ起動 # docker run -it tenn25/dockertest 別コンソールでプロセス確認\n[node1] (local) root@192.168.0.58 ~ $ ps aux | grep nginx 13995 root 0:00 nginx: master process nginx -g daemon off; 14047 101 0:00 nginx: worker process 14063 root 0:00 grep nginx コメントとか所感とか # 手を動かすのはやっぱり良い\nplay-with-docker とても良い\nけどコンソールが重くて typo しまくりんぐ docker build で.(ドット)つけ忘れた人が多そうだった\ndcker build した実態は/var/lib/docker\nDocker ホストとコンテナ内で uname -a やっても表示されるカーネルバージョンは一緒\nMac は Docker for Mac は内部で linux 動かしてる？ので別のカーネル出てきた(当たり前だけど)\nMacBookAir:dockertest tenn25$ uname -a Darwin MacBookAir.local 17.7.0 Darwin Kernel Version 17.7.0: Fri Nov 2 20:43:16 PDT 2018; root:xnu-4570.71.17~1/RELEASE_X86_64 x86_64 root@e30941e321f3:/# uname -a Linux e30941e321f3 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 GNU/Linux cattle vs pet\nコンテナは家畜のように使い捨て。 オンプレは手塩にかけたペットのようだと・・なるほど w cutler さん曰く「永続化(保存しときたいやつ、DB みたいなやつ) だけはペット扱いの、使い続ける場所に置いときます」\nあー、DB がますますデリバリーの遅いボトルネックになっていく・・・ ","date":"2019-02-11","externalUrl":null,"permalink":"/blog/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A-%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AE-docker%E3%83%A1%E3%83%A2/","section":"記事一覧","summary":"","title":"インフラ勉強会-初めてのDockerメモ","type":"blog"},{"content":"","date":"2019-02-07","externalUrl":null,"permalink":"/tags/ansible/","section":"Tags","summary":"","title":"Ansible","type":"tags"},{"content":" 作業する Linux 環境を立てる # 今回は WSL(ubuntu)で実施。\nPython3.6 Ansible2.7.6 とかです。\nansible は pip で入れました。\n確か pip がすぐ入らなくて苦戦したけど ↓ で入れた。\n$ sudo apt-get install python3.6 python3.6-dev $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python3.6 get-pip.py $ pip install ansible hosts に実行対象のサーバ情報を記載 今回は踏み台サーバ経由だったので、ポートフォワードの設定を Teraterm でした後、localhost:1000*として設定する\nServerName1 ansible_host=localhost ansible_port=10001 ansible_user=centos ansible_ssh_private_key_file=../key/*******.pem ***台数分設定*** Ansible の Playbook を作成\n状態を定義するものである 冪等性を意識して書く name に日本語は良くないって聞いたけど大丈夫そう --- - name: sarとtopによるリソース監視 hosts: all become: true tasks: - name: sysstatがインストールされている yum: name: sysstat state: present - name: sysstatが起動している service: name: sysstat state: started enabled: true - name: cronが起動している become: true command: \u0026#39;/etc/init.d/crond start\u0026#39; - name: 既存のcron設定はコメントアウト lineinfile: dest: /etc/cron.d/sysstat regexp: \u0026#39;/usr/lib64/sa/sa1 1 1\u0026#39; line: \u0026#39;# */10 * * * * root /usr/lib64/sa/sa1 1 1\u0026#39; - name: 既存のcron設定はコメントアウト lineinfile: dest: /etc/cron.d/sysstat regexp: \u0026#39;/usr/lib64/sa/sa2 -A\u0026#39; line: \u0026#39;# 53 23 * * * root /usr/lib64/sa/sa2 -A\u0026#39; - name: 情報取得のcronが設定されている become: true cron: name: Run system activity accounting tool every 1 minutes minute: \u0026#34;*/1\u0026#34; user: root job: \u0026#39;/usr/lib64/sa/sa1 1 1\u0026#39; state: present cron_file: sysstat - name: ログ整理のcronが設定されている become: true cron: name: Generate a daily summary of process accounting at 23:55 minute: 55 hour: 23 user: root job: \u0026#39;/usr/lib64/sa/sa2 -A\u0026#39; state: present cron_file: sysstat playbook 実行\nansible-playbook -i hosts Atleta_SurveyMemory.yml ","date":"2019-02-07","externalUrl":null,"permalink":"/blog/ansible%E3%81%A7sar%E3%81%A8top%E3%81%AB%E3%82%88%E3%82%8B%E7%9B%A3%E8%A6%96%E3%82%92%E4%BB%95%E8%BE%BC%E3%82%80/","section":"記事一覧","summary":"","title":"Ansibleでsarとtopによる監視を仕込む","type":"blog"},{"content":" Windows10 の WSL をセットアップ手順 # 1.Hyper-V 有効化\n※Windows 10 Home エディションは使えません\nコントロールパネル＞プログラム＞プログラムと機能\n＞ Windows の機能の有効化または無効化\n2.WSL 有効化\n＞ Windows SubSystem for Linux にチェック\n3.Docker for Mac のインストール\n4.DockerHub アカウント取得\n5.再起動 スタートボタンを右クリック\n＞設定＞更新とセキュリティ＞(画面左メニュー)開発者向け\n開発者モードに変更(リモート展開と WindowsDevicePortal はインストールされてない)というエラー\n6.古い WSL 環境を削除\nlxrun /uninstall 7.Hyper-V 確認\n8.MobyLinuxVM 上で Docker が動く\n9.ネットワークを確認\nコントロール パネル\\ネットワークとインターネット\\ネットワーク接続\nvEthernet(DockerNAT)から Docker ホストにつながってること。\nDocker 右クリック＞ Settings ＞ General Expose daemon on tcp://localhost:2375 withiout TLS にチェック\n(https://nabinno.github.io/f/2017/12/10/wsl-windows_subsystem_for_linux-%E3%81%A7docker%E3%82%92%E3%81%A4%E3%81%8B%E3%81%86.html)[https://nabinno.github.io/f/2017/12/10/wsl-windows_subsystem_for_linux-%E3%81%A7docker%E3%82%92%E3%81%A4%E3%81%8B%E3%81%86.html]\nUbuntu の/の実態パス C:\\Users**\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\n","date":"2019-02-06","externalUrl":null,"permalink":"/blog/docker-for-windows%E3%81%A8-docker%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86/","section":"記事一覧","summary":"","title":"Docker-for-WindowsとDockerの環境構築手順","type":"blog"},{"content":"","date":"2019-01-21","externalUrl":null,"permalink":"/tags/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%9B%A3%E8%A6%96/","section":"Tags","summary":"","title":"システム監視","type":"tags"},{"content":" 入門監視を読んだ # 1,2 章 # 「監視は運用がやるもの」とは限らない！ OS のメトリクスだけとって満足？結局サーバ落ちた原因は不明じゃ意味ない 取得間隔が 5 分ごとじゃ何もわからない。大切な情報が抜け落ちてるかも 「システムが正常に動いてる」の定義は？？ ユーザ目線で監視を始めよう(上の定義にも繋がる) SaaS の監視サービスを使っちゃおう！楽だし！ 監視の見直しや改善って運用サービスメニューにありますか？ 3 章アラート、オンコール、インシデント対応 # アラート # 1.即時で判断/対応が必要なこと 2.参考情報としてのアラート(判断/対応は翌日朝で良い) 1,2 はそれぞれ適切な通知先がどこか考えよう ポイントとしては、アラートは「人の判断が必要なため」行う アラートには対応手順へのリンクを書こう 決まった手順になるなら自動化できるのでは？と考える 固定の閾値だけでなく、変化量を使うなどもある。統計を勉強しよう！ オンコール # オンコール担当への配慮を忘れずに 時間的、精神的な配慮 インシデント対応 # 部署やサービスにあったフローを考えよう 振り返りは忘れずに 4 章統計入門 # 平均値について # 平均を取ると識別しやすいパターンを持ったグラフになり、グラフは見やすくなる ただし。極端な値も見えるので、重要かもしれないデータを失う パーセンタイルについて # 帯域幅やレイテンシに使われる 注意点として、平均は取れない 1 時間ごとのパーセンタイル ×24 時間分の平均は、1 日のパーセンタイルとは異なる！！ 一部のデータが切り捨てられていることを忘れずに。レイテンシに使うなら最大値の計測も別途行おう 5 章ビジネスを監視する # ビジネス上の KPI から \b 落としていって監視項目を決めよう 例えば CPU 使用率、なぜその項目を監視するのか ユーザー影響があるのか？ これはユーザ目線の失敗率、レイテンシも計測して、影響の有無を判断。ないなら問題なし これはさらに突き詰めるとビジネス KPI が何かに遡る サーバ内部のレイテンシの比較 ユーザ目線は、ネットワーク JS のパース、描画 ユーザ目線の監視は GA などを使おう 6 章フロントエンド監視 # 監視は Ops がやること！！とは限らない！！ JS の動きや仕組みを理解しよう ユーザの体感している時間を監視しよう JS が吐く例外の監視 statsd,graphite,GoogleAnalytics などツールはある！ 7 章アプリケーション監視 # アプリケーションパフォーマンス監視 APM ツール StatsD が推されてる！ ビルドパイプラインの監視もしよう！！ どのデプロイからパフォーマンスが落ちたかわかる！！ 8 章サーバ監視 # 9 章ネットワーク # 10 章セキュリティ # 11 章 # ビジネス視点から決めてく\n付録 # 手順書の例 運用をサービスにあわせる OS メトリクスは結果 γGTP を測るのではなく、毎日の酒の量を計測しよう！！ ","date":"2019-01-21","externalUrl":null,"permalink":"/blog/%E5%85%A5%E9%96%80%E7%9B%A3%E8%A6%96%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"入門監視を読んだ","type":"blog"},{"content":"Windows サーバの EC2 に対してカスタムメトリクスの取得設定をした。\n参考サイト # https://dev.classmethod.jp/cloud/aws/windows-server-runcommand-custom-metrics/\n手順 # IAM ロール作成 [AmazonEC2RoleforSSM]というロールを付与 対象の EC2 に割り当て 即時反映されます runcommand から json 実行 RunCommand からは様々なことができる -今回は[AWS-ConfigureCloudWatch]を選択 IAM ロールの反映には数分かかるが、反映されたら一覧に出てくるので対象サーバを選択 { \u0026#34;EngineConfiguration\u0026#34;: { \u0026#34;PollInterval\u0026#34;: \u0026#34;00:00:15\u0026#34;, \u0026#34;Components\u0026#34;: [ { \u0026#34;Id\u0026#34;: \u0026#34;MemoryAvailableMegabytes\u0026#34;, \u0026#34;FullName\u0026#34;: \u0026#34;AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch\u0026#34;, \u0026#34;Parameters\u0026#34;: { \u0026#34;CategoryName\u0026#34;: \u0026#34;Memory\u0026#34;, \u0026#34;CounterName\u0026#34;: \u0026#34;Available MBytes\u0026#34;, \u0026#34;InstanceName\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;MetricName\u0026#34;: \u0026#34;MemoryAvailable\u0026#34;, \u0026#34;Unit\u0026#34;: \u0026#34;Megabytes\u0026#34;, \u0026#34;DimensionName\u0026#34;: \u0026#34;InstanceId\u0026#34;, \u0026#34;DimensionValue\u0026#34;: \u0026#34;{instance_id}\u0026#34; } }, { \u0026#34;Id\u0026#34;: \u0026#34;MemoryUtilization\u0026#34;, \u0026#34;FullName\u0026#34;: \u0026#34;AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch\u0026#34;, \u0026#34;Parameters\u0026#34;: { \u0026#34;CategoryName\u0026#34;: \u0026#34;Memory\u0026#34;, \u0026#34;CounterName\u0026#34;: \u0026#34;% Committed Bytes in Use\u0026#34;, \u0026#34;InstanceName\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;MetricName\u0026#34;: \u0026#34;MemoryUtilization\u0026#34;, \u0026#34;Unit\u0026#34;: \u0026#34;Percent\u0026#34;, \u0026#34;DimensionName\u0026#34;: \u0026#34;InstanceId\u0026#34;, \u0026#34;DimensionValue\u0026#34;: \u0026#34;{instance_id}\u0026#34; } }, { \u0026#34;Id\u0026#34;: \u0026#34;MonitoringFreeSpaceC\u0026#34;, \u0026#34;FullName\u0026#34;: \u0026#34;AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch\u0026#34;, \u0026#34;Parameters\u0026#34;: { \u0026#34;CategoryName\u0026#34;: \u0026#34;LogicalDisk\u0026#34;, \u0026#34;CounterName\u0026#34;: \u0026#34;% Free Space\u0026#34;, \u0026#34;InstanceName\u0026#34;: \u0026#34;C:\u0026#34;, \u0026#34;MetricName\u0026#34;: \u0026#34;DiskFreeC\u0026#34;, \u0026#34;Unit\u0026#34;: \u0026#34;Percent\u0026#34;, \u0026#34;DimensionName\u0026#34;: \u0026#34;InstanceId\u0026#34;, \u0026#34;DimensionValue\u0026#34;: \u0026#34;{instance_id}\u0026#34; } }, { \u0026#34;Id\u0026#34;: \u0026#34;CloudWatchLogs\u0026#34;, \u0026#34;FullName\u0026#34;: \u0026#34;AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch\u0026#34;, \u0026#34;Parameters\u0026#34;: { \u0026#34;AccessKey\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;SecretKey\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;Region\u0026#34;: \u0026#34;us-east-1\u0026#34;, \u0026#34;LogGroup\u0026#34;: \u0026#34;Default-Log-Group\u0026#34;, \u0026#34;LogStream\u0026#34;: \u0026#34;{instance_id}\u0026#34; } }, { \u0026#34;Id\u0026#34;: \u0026#34;CloudWatch\u0026#34;, \u0026#34;FullName\u0026#34;: \u0026#34;AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch\u0026#34;, \u0026#34;Parameters\u0026#34;: { \u0026#34;AccessKey\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;SecretKey\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;Region\u0026#34;: \u0026#34;ap-northeast-1\u0026#34;, \u0026#34;NameSpace\u0026#34;: \u0026#34;★★★カスタムメトリクス名を入れる★★★\u0026#34; } } ], \u0026#34;Flows\u0026#34;: { \u0026#34;Flows\u0026#34;: [ \u0026#34;(MonitoringFreeSpaceC,MemoryAvailableMegabytes,MemoryUtilization),CloudWatch\u0026#34; ] } } } IAM ロールで権限付与してるので、key 設定とかは不要 注意として、カスタムメトリクスは削除ができない。 間違った名前空間名で設定しないように(やってしまった) エラー調査ができるようにログを S3 に出力するように設定できる 以上です。\n","date":"2019-01-18","externalUrl":null,"permalink":"/blog/aws-run-command%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/","section":"記事一覧","summary":"","title":"AWS-RunCommandでカスタムメトリクスを設定する","type":"blog"},{"content":" SRELounge#7(2019/1/18 @メルカリ本社) # 気づき、所感 # SRE は DevOps が浸透している環境が前提となっている気がする SRE のチーム形態としては、アプリケーション開発チームとは別になってた方が良さそう 運用チームという存在についてはそれほど否定的ではなく、横串で一元化したほうが良い部分ももちろんある。(特にセキュリティ周り) とはいえ権限分離は良いことではない。サイロ化は避けるべきであり、熟知はせずとも相互理解する姿勢が必要。権限移譲なども。 部門的なアレで DevOps できないならせめて SRE だけでも独立して DevOps すべき。(開発-運用の垣根を超えないといけない) チームとしてはいろんなスキルセットを持った人が集まった方が良さそう。 Gunosy は 12 月から SRE 定義を始めてもう決まって登壇してる。スピード感と 1 点集中大事。(片手間良くない) SRE の定義の大切もだけど、周囲への共有と理解してもらうことも大事。 トイルの可視化はしたい。TImeTracker？Redmine？ やることも大事だけど、人が足りない今、やらないことを決めるのも同じくらい大事。 1on1 やりたい。SRE 策定と平行して上下の相互理解。 SRE の理解 # サービス形態や人の関わりかたによっても SRE 像は変わる でも、社内での認識の違いは埋めた方がいい 定義を共有する。公開する。 Gunosy の定義とか方針 # 「SRE はシステムにおける問題解決のプロフェッショナル集団である」 「自身がボトルネックにならない」 「 SRE しかできないことを減らす」 サイロ化 # SRE はサービスごとにサイロ化(メルカリ)\nチーム # メルカリ # 担当範囲は信頼性に関わることはほぼ対応(メルカリ) 同じ SRE でも出身分野がみんな違う → 多様性のあるチームが良い\nストレングスファインダー → 他のメンバーのも見れるようにする。すごく便利(メルカリ)\nGunosy # 1on1\nsupeee # 事業の成長に責任をもつグループ 事業の信頼性に責任をもつグループ\nサービスの成長曲線とフェーズごとの動き # 初期 # サービス開始時は成功に集中する インフラ、キャパプラ、構成管理ツールの選定、 インフラチューニングなど 成長期 # 成長曲線を事前に描けるようにする stickiness(粘着度)、Install 数、DAU,WAU,MAU これらをどうやって測るか。 非推奨、廃止の徹底\nオンボーディング # 用語の統一\nドキュメントの整備\n→ バラバラ\nポストモーテム # 開発が書いて SRE がレビュー → 障害管理台帳やめたい\nトイル # EM,PM 含めて関係者全員が理解する必要がある(50%ルール) SRE 自身がボトルネックにならないこと SRE しかできないことを減らす 自動化もいいけど、権限ごと渡すとかも考える トイルの割合はツールで可視化する toggle が良さげ。簡単に計測できる Jira や Redmine でもタグ付けするなどして漏れなく管理 エラーバジェットと同様に Toil limit を設ける。制限を厳守 Q. linit を越える時はどういう動きをする？\nA. 緊急度が高いのはしゃあない\n上に上げて人増やす、時間の調整\nSLO # 高すぎても低すぎてもいけない。 SLO を守るためリリースに 2 時間かかります →×\n自分達に必要性を感じられる目標\nSRE エンジニアの採用 # SRE をやってきた人はまだ少ないし、\nどこも重要ポジションに居る人が多いので抜けづらい。\n転職エージェントは「SRE？なにそれ？」状態 → リファラル採用しよう！\nメルカリ\nhttps://speakerdeck.com/oguma/srede-teamkai-fa-tipstobesutopurakuteisutupoihe-ka\nGunosy\nhttps://speakerdeck.com/aibou/sre-lounge-number-7-gunosyban-sremitusiyon-ce-ding\n","date":"2019-01-18","externalUrl":null,"permalink":"/blog/%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E6%96%B0%E3%81%97%E3%81%8F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/","section":"記事一覧","summary":"","title":"ブログを新しくしました。","type":"blog"},{"content":"Zabbix をたまーに使うと、そのたびに\n「あの画面に行くのどこだっけ？」と思ってなかなか行けないのでメモ\n基本的に最新データから行けば良いんだな。。覚えた。\nグラフを見たい！ # 監視データ＞グラフ＞グループ、ホスト、グラフを選択 監視データ＞最新データ＞(ホスト名検索)＞アイテム＞項目からグラフを選択\nトリガーを見たい！ # 監視データ＞トリガー＞フィルターで絞ってトリガーを検索＞名前を押して[トリガーの設定]\n設定＞ホスト＞(ホスト名検索)＞トリガー＞トリガーの名前を選択\nなんか色んな遷移経路があって、人によって違いそう。分かりづらい。。\n","date":"2018-12-26","externalUrl":null,"permalink":"/blog/zabbix%E3%81%AE%E7%94%BB%E9%9D%A2%E9%81%B7%E7%A7%BB%E3%83%A1%E3%83%A2/","section":"記事一覧","summary":"","title":"Zabbixの画面遷移メモ","type":"blog"},{"content":"Datadog と Mackerel をまとめてインストールして\nEC2 の監視設定をしてみる。\n次回は Azure の IaaS、PaaS の監視をしたい。\n1.登録 # どちらも無料期間あり。\nメールアドレスの登録や名前、Datadog は会社名の登録\nDatadog は英語、Mackerel は日本語で分かりやすい。\n2.EC2 へ Agent をインストール # どちらも説明にしたがって進める。\nOS ごとに丁寧に説明してあってどちらも分かりやすい。\nDatadog # CentOS/Redhat 7 以降\nDD_API_KEY=ac504******************** bash -c \u0026#34;$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)\u0026#34; DD_UPGRADE=true bash -c \u0026#34;$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)\u0026#34; [tenn25@ip-10-0-0-51 ~]$ sudo systemctl status datadog-agent ● datadog-agent.service - \u0026#34;Datadog Agent\u0026#34; Loaded: loaded (/usr/lib/systemd/system/datadog-agent.service; enabled; vendor preset: disabled) Active: active (running) since 火 2018-12-25 22:57:07 JST; 32s ago Main PID: 3446 (agent) CGroup: /system.slice/datadog-agent.service └─3446 /opt/datadog-agent/bin/agent/agent run -p /opt/datadog-agent/run/agent.pid 12月 25 22:57:35 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:35 JST | INFO |...e 12月 25 22:57:35 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:35 JST | INFO |...e 12月 25 22:57:36 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:36 JST | INFO |...k 12月 25 22:57:36 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:36 JST | INFO |...k 12月 25 22:57:37 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:37 JST | INFO |...d 12月 25 22:57:37 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:37 JST | INFO |...d 12月 25 22:57:38 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:38 JST | INFO |...e 12月 25 22:57:38 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:38 JST | INFO |...e 12月 25 22:57:39 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:39 JST | INFO |...u 12月 25 22:57:39 ip-10-0-0-51.ap-northeast-1.compute.internal agent[3446]: 2018-12-25 22:57:39 JST | INFO |...u Hint: Some lines were ellipsized, use -l to show in full. Mackerel # CentOS/Redhat 7 以降\nsudo su - curl -fsSL https://mackerel.io/file/script/setup-all-yum-v2.sh | MACKEREL_APIKEY=\u0026#39;4q1Wq*********************************************\u0026#39; sh [root@ip-10-0-0-51 tenn25]# systemctl status mackerel-agent ● mackerel-agent.service - mackerel.io agent Loaded: loaded (/usr/lib/systemd/system/mackerel-agent.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2018-12-25 23:00:27 JST; 1min 42s ago Docs: https://mackerel.io/ Process: 4523 ExecStartPre=/usr/bin/mkdir -m 777 -p $MACKEREL_PLUGIN_WORKDIR (code=exited, status=0/SUCCESS) Main PID: 4524 (mackerel-agent) CGroup: /system.slice/mackerel-agent.service ├─4524 /usr/bin/mackerel-agent supervise --root /var/lib/mackerel-agent └─4533 /usr/bin/mackerel-agent --root /var/lib/mackerel-agent -child Dec 25 23:00:27 ip-10-0-0-51.ap-northeast-1.compute.internal systemd[1]: Starting mackerel.io agent... Dec 25 23:00:27 ip-10-0-0-51.ap-northeast-1.compute.internal systemd[1]: Started mackerel.io agent. Dec 25 23:00:27 ip-10-0-0-51.ap-northeast-1.compute.internal mackerel-agent[4524]: 2018/12/25 23:00:27 INFO \u0026lt;... Dec 25 23:00:27 ip-10-0-0-51.ap-northeast-1.compute.internal mackerel-agent[4524]: 2018/12/25 23:00:27 INFO \u0026lt;... Dec 25 23:00:29 ip-10-0-0-51.ap-northeast-1.compute.internal mackerel-agent[4524]: 2018/12/25 23:00:29 INFO \u0026lt;... Dec 25 23:00:31 ip-10-0-0-51.ap-northeast-1.compute.internal mackerel-agent[4524]: 2018/12/25 23:00:31 INFO \u0026lt;... Dec 25 23:00:31 ip-10-0-0-51.ap-northeast-1.compute.internal mackerel-agent[4524]: 2018/12/25 23:00:31 INFO \u0026lt;... Hint: Some lines were ellipsized, use -l to show in full. 3.初期設定 # Datadog # Agent 入れたサーバが EC2 だと自動で判断したのか、\n次のステップに進んだら AWS Integration をインストールしろと言われた。\nDatadog は CloudWatch API を使用して 10 分ごとに AWS リソースを監視する。\nアクセスコントロールポリシードキュメント(信頼関係)\n{ \u0026#34;Version\u0026#34;: \u0026#34;2012-10-17\u0026#34;, \u0026#34;Statement\u0026#34;: [ { \u0026#34;Effect\u0026#34;: \u0026#34;Allow\u0026#34;, \u0026#34;Principal\u0026#34;: { \u0026#34;AWS\u0026#34;: \u0026#34;arn:aws:iam::AWSアカウントID:root\u0026#34; }, \u0026#34;Action\u0026#34;: \u0026#34;sts:AssumeRole\u0026#34;, \u0026#34;Condition\u0026#34;: { \u0026#34;StringEquals\u0026#34;: { \u0026#34;sts:ExternalId\u0026#34;: \u0026#34;DataDog側の発行されたID\u0026#34; } } } ] } IAM ポリシー(前にネットで拾ったやつ適当に。たぶん参照系もろもろ)\n{ \u0026#34;Version\u0026#34;: \u0026#34;2012-10-17\u0026#34;, \u0026#34;Statement\u0026#34;: [ { \u0026#34;Action\u0026#34;: [ \u0026#34;autoscaling:Describe*\u0026#34;, \u0026#34;budgets:ViewBudget\u0026#34;, \u0026#34;cloudfront:GetDistributionConfig\u0026#34;, \u0026#34;cloudfront:ListDistributions\u0026#34;, \u0026#34;cloudtrail:DescribeTrails\u0026#34;, \u0026#34;cloudtrail:GetTrailStatus\u0026#34;, \u0026#34;cloudwatch:Describe*\u0026#34;, \u0026#34;cloudwatch:Get*\u0026#34;, \u0026#34;cloudwatch:List*\u0026#34;, \u0026#34;codedeploy:List*\u0026#34;, \u0026#34;codedeploy:BatchGet*\u0026#34;, \u0026#34;directconnect:Describe*\u0026#34;, \u0026#34;dynamodb:List*\u0026#34;, \u0026#34;dynamodb:Describe*\u0026#34;, \u0026#34;ec2:Describe*\u0026#34;, \u0026#34;ecs:Describe*\u0026#34;, \u0026#34;ecs:List*\u0026#34;, \u0026#34;elasticache:Describe*\u0026#34;, \u0026#34;elasticache:List*\u0026#34;, \u0026#34;elasticfilesystem:DescribeFileSystems\u0026#34;, \u0026#34;elasticfilesystem:DescribeTags\u0026#34;, \u0026#34;elasticloadbalancing:Describe*\u0026#34;, \u0026#34;elasticmapreduce:List*\u0026#34;, \u0026#34;elasticmapreduce:Describe*\u0026#34;, \u0026#34;es:ListTags\u0026#34;, \u0026#34;es:ListDomainNames\u0026#34;, \u0026#34;es:DescribeElasticsearchDomains\u0026#34;, \u0026#34;health:DescribeEvents\u0026#34;, \u0026#34;health:DescribeEventDetails\u0026#34;, \u0026#34;health:DescribeAffectedEntities\u0026#34;, \u0026#34;kinesis:List*\u0026#34;, \u0026#34;kinesis:Describe*\u0026#34;, \u0026#34;lambda:AddPermission\u0026#34;, \u0026#34;lambda:GetPolicy\u0026#34;, \u0026#34;lambda:List*\u0026#34;, \u0026#34;lambda:RemovePermission\u0026#34;, \u0026#34;logs:Get*\u0026#34;, \u0026#34;logs:Describe*\u0026#34;, \u0026#34;logs:FilterLogEvents\u0026#34;, \u0026#34;logs:TestMetricFilter\u0026#34;, \u0026#34;rds:Describe*\u0026#34;, \u0026#34;rds:List*\u0026#34;, \u0026#34;redshift:DescribeClusters\u0026#34;, \u0026#34;redshift:DescribeLoggingStatus\u0026#34;, \u0026#34;route53:List*\u0026#34;, \u0026#34;s3:GetBucketLogging\u0026#34;, \u0026#34;s3:GetBucketLocation\u0026#34;, \u0026#34;s3:GetBucketNotification\u0026#34;, \u0026#34;s3:GetBucketTagging\u0026#34;, \u0026#34;s3:ListAllMyBuckets\u0026#34;, \u0026#34;s3:PutBucketNotification\u0026#34;, \u0026#34;ses:Get*\u0026#34;, \u0026#34;sns:List*\u0026#34;, \u0026#34;sns:Publish\u0026#34;, \u0026#34;sqs:ListQueues\u0026#34;, \u0026#34;support:*\u0026#34;, \u0026#34;tag:getResources\u0026#34;, \u0026#34;tag:getTagKeys\u0026#34;, \u0026#34;tag:getTagValues\u0026#34; ], \u0026#34;Effect\u0026#34;: \u0026#34;Allow\u0026#34;, \u0026#34;Resource\u0026#34;: \u0026#34;*\u0026#34; } ] } AWS 側に IAM ロールを作成\nMackerel # Mackerel では、協調してはたらくホスト群をまとめる『サービス』と、\nサービス内の役割である『ロール』を使ってホストを管理します\nサービスは最初に作ったので新規ロール(Web)を作成\n統合した EC2 に新規作成した Web ロールを設定\nこれで監視スタート\n4.アラート設定 # Datadog # Monitor から作成。\nAlert threshold: Warning threshold: Alert recovery threshold: Warning recovery threshold: という閾値を設定する。ちょっと細かい印象\nアラート先も指定。Team という表現なのでグループ設定できるっぽいが、\nデフォルトの自分個人を設定\nMackerel # こちらも Monitor から監視アラート設定をする\nWarning と Critica の 2 段階で設定可能\nアラートの宛先設定が見当たらなかったけど、最初から自分のメールに飛ぶようになってた。より親切。\n別途、Alerts からアラートグループの作成とサービス、ロールへの割り当てが可能っぽい。\n5.EC2 に負荷をかけてアラートを飛ばす # コンソール複数画面立ち上げて\nyes \u0026gt; /dev/null このやりかた初めて知った w\nみるみる CPU が上がって無事アラートが飛びました ◎\n","date":"2018-12-26","externalUrl":null,"permalink":"/blog/datadog%E3%81%A8-mackerel%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-ec-2-%E3%82%92%E7%9B%A3%E8%A6%96%E3%81%99%E3%82%8B/","section":"記事一覧","summary":"","title":"DatadogとMackerelを使ってEC2を監視する","type":"blog"},{"content":"この記事は#インフラ勉強会 Advent Calendar 2018 - Adventar の 15 日目の記事です。\n個人ブログはいいぞ # IT エンジニアの技術ブログと言えば\nQiita はてなブログ あたりが主流なんでしょうか。\n最近は、主語がでかくて炎上したり、\n記事の内容が薄くてクソ記事と言われたり、\nポエムは技術記事じゃねぇ、とかとか\n生きづらい世の中ですよねホント・・・\nでも大丈夫！\nそんな貴方にぴったりの方法があります。\n個人ブログです！\nちょっと伸びた ↓ のツイートに\n私の伝えたいことが詰まってます。\n最近は自分の中で技術日記と読んでます。\n基本スタンス # 自分のためにやる 知識の定着のため。忘れないため。未来の自分のために残す 人に見せることが第一目的ではない 見せたい記事の時だけツイートする SEO とかアクセス数は気にしない 質より量を重視する たくさんの人に見て欲しい記事は別途 Qiita などに投稿して使い分ける 興味のあるプラットフォーム、ミドルウェア、言語を使って好きに構築する ブログ自体の構築・運用ごっこをしてみる サイトのデザインも自分でいじってみる お金は気にしない こんな感じで始めて、早 3 ヶ月経とうとしています。\n3 日に 1 記事くらいは投稿できてるので良いペースで飽きることなく続けています。\nこのブログについて # Mezzanine という Python 版 WordPress みたいなものを使って AWS 上に建ててます。\nLinux、AWS、Python、Postgresql あたりを使えるようになりたくて始めました。\nテーマがうまく当てられなくて今はデフォルトの状態だけど、\nもう少しデザイン周りもいじりたいです。\nあと、ボーナスでカメラを買ったらギャラリーページを作ります(笑)\nそんな感じで自分のなかで楽しみながら日々学べています。\nおそらく、インフラ勉強会に入っていなかったら、\n今でも何もしてなかったと思います。\nというわけで、ここからはインフラ勉強会との出会いから、\n自分がブログを始めるまでを振り返ります。\n(ここからは完全ポエムです。)\nインフラ勉強会と私 # 2018 年は#インフラ勉強会に大きく影響を受けた 1 年でした。\n少し自分の話をすると、\n新卒入社後 3 年間は、レガシー集計システムの処理ロジックを解明しながら\nひたすらシステム保守開発とサーバ移行をしていました。(SQL 黒魔術はそこで得たものです)\n2018 年の 1 月、新卒入社 4 年目\nシステム運用に移ったものの、\nまともな開発スキルもインフラスキルもなく、\n圧倒的劣等感を感じていた時期でした。\nちょうど、オンプレ →VPS に移行する案件を担当して、\nインフラエンジニアさんと仕事する機会が増えていたこともあって、\nTwitter で見かけた「#インフラ勉強会」というワードに釣られて参加するようになりました。\n参加して分かったこと # インフラ勉強会のような外部のコミュニティに参加するのは初めてでした。\n多くの人と知り合い、たくさん刺激を受けました。\n1.自分でも外に発信ができる # 自分は根っからのインドア人間です。\n初対面の人との交流も正直得意じゃないです。\nそれもあって、オンラインコミュニティというのは 家から気軽に参加できる上、\n良い意味でドライな関係性で参加できるので自分に合っていました。 (リアル勉強会は親睦会参加したいけど怖い！)\n登壇も、1 回目のハードルは高いけど、みんなが助けてくれます。\n初回はネットが切れまくって半分くらい聞き取れないという残念な感じで終わりましたが、\n失敗しても許されるし、何も失うものはないな、と気付かされてのです。\n**「安全に失敗できる最高の環境」**だと思いました。\nそれもあって、2 回目以降は安心して話せたし、合計 6,7 回くらい継続して登壇できています。\n2. 世の中には優しい人がたくさんいる # 初心者歓迎を掲げるコミュニティはだいたいフォローや後押しをしてくれます。\nインフラ勉強会に限らず、\n自分から質問したら快く答えてくれる人がたくさん居ます。\n大切なのは、感謝の気持ちは忘れないことです。\n3.年齢はマジで関係ない # 下は高校生、上は自分の親の世代まで、\nスキルと年齢、何かを始めるタイミング、\n一切関係ありません。\nまだ 20 代な自分にとってはそれだけで励みになりました。\n4. 外の世界と自分の世界の色 # IT かどうかを問わず、全く違う環境の話が聞けるのは単純に面白いです。\n価値観や考え方も違うので、今の会社の色に染まりたくない人は外の世界をもっと知るべきです。\n隣の芝は青く見えるものなので、\n絶対に転職したみが増すのだと思っていたのですが、\n意外とその気持ちだけでなくて、\n結果として、今の環境は「自分にとってホワイトかも」と気付かされることになりました。\n今の現場でもたくさん学びがある 積極的に学ぶ機会を与えてくれる 自分の裁量で好きな勉強ができている など、気づいていないだけで、今の環境でもまだまだ得られることは多そうだと思えたのです。\nITIL を知らずに ITIL に則った仕事をしていたので、\nその辺りに気づいて、改善する側に回れるようになったのはインフラ勉強会のお陰だし本当に最近のことです。\n5. 自分が何者なのか # 広い IT 業界の中で自分がどんな位置にいるのか。\nそして何に興味があるのかを考えさせられました。\n同じ IT エンジニアにもいろんな人がいること、\n職種的/働き方的に横方向への視野も広がったし、\n技術的にもっと縦方向に深い世界も知ることができました。\nいろんな方の話を聞いて、\n1 つでも「好きかも」「得意かも」と思えるものができたら\nあとはそこを軸に深掘るか横に広げるかしていけば自分の中で良いサイクルが回りはじめそうです。\nそして自分がどう変わったか # 自分に自信が持てるようになった インプットとアウトプットのバランスを気にするようになった データベースを軸に、システム全体のパフォーマンスを見れる人になりたいと思った 技術以外の視野も広げようと思い始めた。 書いてて自分で笑いましたが、\n決して「スキルが身についた」では無いのがミソです・・w\n自信が付いたので、アウトプットに抵抗がなくなりました。\nまた、せっかく覚えたことも 1 ヶ月も立てば忘れるので、\n備忘録的に残しておける場所が欲しいと思いました。\nそこでこの記事の最初に書いた「Qiita などは気軽に書きづらい」という所に繋がります。\nあとは、インフラ勉強会を通じて、少しずつ自分の興味が見えてきました。\n直近はデータベース・クラウドあたりを専門でやらせてもらえてるので、\n今はそのあたりを強みにしたいです。\nプログラミングは苦手だけど、OR マッパーの処理とかから対応できるレイヤーを広げていきたいです。\n世の中ギークな人がたくさん居て尊敬するばかりだけど、\n自分の中では、「技術は手段だ」としか思えない側面もあります。\n本当のギークにはなれないなぁと思ってます。\n最終的には技術だけじゃなく、サービスの企画側の仕事もやっていきたいです。\nそんな感じで、色んな影響を受けました！！\nインフラ勉強会にすごく感謝しています！！\nこれからもよろしくお願いします！！\n","date":"2018-12-15","externalUrl":null,"permalink":"/blog/%E5%80%8B%E4%BA%BA%E3%83%96%E3%83%AD%E3%82%B0-%E6%8A%80%E8%A1%93%E6%97%A5%E8%A8%98-%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/","section":"記事一覧","summary":"","title":"個人ブログ(技術日記)のすすめ","type":"blog"},{"content":"体験をデザインする UX デザインについて学んだ。\nマクドナルドとスタバのコーヒーはなぜあんなに値段が違うのか ⇒「スタバはコーヒーを売っているのではなく、体験を売っている」\nUX の階層 # 下から考える。戦略から順に一貫していることが重要。 実際のプロダクトに反映されていることが大事。\n表面 視覚的なデザイン(ビジュアルデザイン) 骨格 画面に表示される情報の優先順位、配置の設計 インターフェースデザイン インフォーメーションビジュアルデザイン 構造 インタラクティブデザイン 情報アーキテクチャ 要件 機能仕様 コンテンツ要件 戦略 ユーザの概要 サイトの目的 UX を考えるのは誰か # リードは企画の人や UX デザイナーがしていても関係者全員が考える。 レイヤーによって担当が違ったりするので各関係者の相互理解のために必要がある UI # User Interface の略 画面表示、操作感 目に見えるもの UX を満たすための手段 UX の一部 UX # User eXperience 得られた体験や感情 画面の速度、データの持ちかたなども含む ユーザビリティの構成要素 # 学習し易さ 初めてでもわかる 効率性 一度覚えたら素早く操作できる 記憶のしやすさ 久々に使う時にすぐ思い出せる エラー 致命的なエラーがでない 主観的満足 好きになれるか UX を考える上でひつようなこと # 誰に向けたサービスなのか考える\n顧客の声を鵜呑みにせず、言葉の裏にある真意を拾う\n各関係者が同じ視点に立っていること。\nユーザ視点になる\nそのために UXD のフレームワークがある クックパッドの画面ロックさせない仕様 UXD のプロセス # 利用と状況の把握 ユーザ体験の設計 プロダクトの設計実装 プロダクトの評価 以下 PDCA サイクル。プロセスの UXD 手法がある\nかけられる時間や状況によって、 そのとき最適な手法を選ぼう。\n理想の体験を考える # カスタマージャーニーマップ 好きになってもらい、継続してもらうためのもの 各工程でおさえるポイント(KSF)を導き出す マーケティングと UXD はどこでやるの？ # PEST,3C,SWOT 分析～４ P まで前提から広く行う UXD は顧客にフォーカスしている マーケティングに UXD をうまく組み込む ペルソナの例 # 年齢や性別だけではターゲット像があいまいになる ターゲットがどんな人なのかを分かりやすく「人の形に見える化」したもの なぜ必要か ⇒ データからは顧客をイメージできない(人間味がない) 顧客視点に立ちやすくなる。誰がターゲットなのか明確になる。関係者が共通認識を持てる 調査結果のデータをもとに考察して作られる。 データが無ければ探す、聞く 都合のいい人物像を妄想で作るのは NG ペルソナを作るメリット # ペルソナがあるとブランドの整合性がとれる\nペルソナがあると主観が入らなくなる(常にユーザ視点)\nペルソナには 1 言くらいのキャッチコピーをつけると、他のペルソナとの差異が分かりやすくなる。\nターゲットを 1 人絞っていいのか…人物像は 1 人だが、同じようなニーズを持ったグループの代表者。\n複数人つくってもいい。第 1 第 2 ターゲット・・\n明確にターゲットにしないペルソナも用意すると、ターゲットがより明確になる\n聞き方 # こんなサービスが欲しいと聞くのではなく\n普段の行動をきく\nユーザの声はニーズの 5%程度。\n事実 ⇒ ～したい、～したくないを考察\n求めていること ⇒ ニーズにつながる\n不満・怖いこと\n行動に紐づく\nカスタマージャーニーマップ # ユーザの体験をユーザ視点で時系列化したもの\n今のサービスの課題は何か知りたいとき、ペルソナにとっての理想のサービスにしたい時に使う\nストーリーとして俯瞰できるので、重要ポイントや躓き/課題が見えてくる\nいきなりブレストをしても意見が出ない。ユーザがおざなりになって自分たち都合の意見が出てしまうことを防ぐ。ユーザ視点で考えられる\nサービスには色々な役割の担当がいるが、ぶつ切りで考えてしまいがち。前後の文脈を踏まえてアイデアを出せる。\n企画がファシリテートするかもしれないが、企画、プロモーション、開発、運用の各視点で見れる\n価値 ⇒ 機能の順番に考えられる。顧客視点 ⇒ サービス視点\n機能の話ではなく、価値や体験のストーリー\n知る ⇒ 検討 ⇒ 試す・購入 ⇒ 使用 ⇒ 使用後といった、利用前～利用後まで全体の体験を考える必要がある。\nビジネスゴールだけでなく、ユーザーゴールを考える\n具体的な機能は書かない\n常にペルソナを意識する。主語はペルソナ「●● さんは～」\n横軸 ⇒ ペルソナの行動ステップ 縦軸 ↓ 理想の行動 感情や思考 KSF(KeySuccessFactor)\n行動ステップごとに出していく。\n現状の体験(AsIs) # 現在の課題の発見が目的 でっちあげでなく、事実から作成 定性、定量の事実 事前準備 # 行動ログのデータ。ユーザタイプ別、KPI 別にとるべき数字は？ インタビュー そもそもの仮説 point\n良く閲覧される画面は 閲覧や購入方法 脱落ユーザと継続ユーザの違いは 利用者の属性は 理想的体験(ToBe) # KSF の発見 誰にとってのサービスなのかを明確にしてから行う。ターゲットペルソナ サービスコンセプトを決める。一貫性がないといけない。 事前準備 # ターゲットペルソナ サービスコンセプト 現状ジャーニーがあれば ビジネス上の制約を明確にしておく。キャリア、コンテンツホルダーなど ジャーニーマップ作成後 # KSF を元に体験を実現できる機能要件を出す 機能は複数思いつくはず！なのでジャーニーマップで機能は出さないこと\nユーザ体験をもとに UI を決める\n","date":"2018-12-11","externalUrl":null,"permalink":"/blog/uiux%E5%8B%89%E5%BC%B7%E4%BC%9A%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%9F/","section":"記事一覧","summary":"","title":"UI・UX勉強会に参加した","type":"blog"},{"content":"システム運用をしていく中でサービスレベルを考えることが多い。\nSLA 作成法という本を少し読んだので、知識を整理する。\n顧客とユーザ # 図を入れたいところ。\n顧客とユーザは異なる。\nIT サービスを使って事業を行う人が顧客 そのサービスを利用する人たちがユーザ IT サービスマネジメントの目的 # そもそも、ITIL の「サービスレベル管理」の考えがベースになっている。\nITIL のサービスマネジメントの目的は以下の通り。\nビジネスおよび、その顧客 \b の現在と将来のニーズに一致した IT サービスの提供 IT サービスの品質の向上 IT サービス提供の長期的コストの削減 SLA とは # SLA(サービスレベルアグリーメント)とは\nIT サービス委託者(顧客)と提供者(プロバイダ)の間で、\n提供される IT サービスの内容と品質基準などを明確に定めた合意文書。\nなぜサービスレベル策定が必要か # 一言でいうと、製品志向から顧客志向へ時代が変わったから。\n製品志向 # 製品志向は「顧客はより高品質・高性能な製品を好む」という考えを前提としたコンセプト。\n経営者は製品を今よりもより品質を高める、より性能を上げることを重視している。\n顧客志向 # マーケティング志向ともいう。\n供給が需要を上回り、競合間の競争が激しくなった市場でのコンセプト。\n顧客のニーズには顕在したニーズと、潜在しているニーズがある。\n顕在ニーズ：潜在ニーズは 1:9 とも言われる。\nマーケティング志向において重要な課題は潜在しているニーズ。\n潜在しているニーズは顧客自身も自分の本来のニーズが分かっていない。\nつまり # 製品志向には、企業が製品の質ばかり見ているため、\n顧客が本来必要としているモノに気が付かなくなってしまうという限界がある。\nそこで、従来のシステム管理だけでなくサービス管理の文化が必要。\nSLA の効果 # 役割と責任の明確化 目標の明確化 サービス品質の可視化 サービスメニュー毎のコストの可視化 改善活動につながる IT サービスマネジメントと SLA # 顧客の期待は変化する。SLA/SLM にて顧客の期待を管理する必要がある システム管理からサービス管理へ、SLA の重要性が増加している SLA は ITIL のキーファクターである まとめ # もう少し内容を追加してまとめようと思います。\n","date":"2018-12-09","externalUrl":null,"permalink":"/blog/sla%E4%BD%9C%E6%88%90%E6%B3%95%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「SLA作成法」を読んだ","type":"blog"},{"content":"","date":"2018-12-09","externalUrl":null,"permalink":"/tags/itil/","section":"Tags","summary":"","title":"ITIL","type":"tags"},{"content":"はじめて awk をつかった。\n3 秒間隔でメモリの使用状況をログに吐くコマンドを作った。\n作ったコマンド # top -b -d 5 -n 12 | awk -v \u0026#39;OFS=\\t\u0026#39; \u0026#39;($8 ~ /[A-Z]/){if($10\u0026gt;1.0) print strftime(\u0026#34;%Y/%m/%d %H:%M:%S\u0026#34;),$8,$10,$12}\u0026#39; top -b -d 5 -n 12 バッチモードにて 5 秒おき 12 回 top コマンドを実行\nawk -v \u0026lsquo;OFS=\\t\u0026rsquo;\n出力フィールドをタブ区切り\n($8 ~ /[A-Z]/)\ntop コマンドの 8 つ目(プロセスの状態)が A~Z の１文字(top コマンドのヘッダを省くための対応)\n{if($10\u0026gt;1.0) print strftime(\u0026quot;%Y/%m/%d %H:%M:%S\u0026quot;),$8,$10,$12}\n$10(メモリ使用率)が 1.0%以上のプロセスを表示。\n現在時刻、プロセス状態、メモリ使用量、プロセス名\n感想 # awk は慣れれば直感的でとても便利！\nこのコマンドを 1 分単位で cron 実行すれば監視ができそう。\nただ、1 分間のログをまとめて awk で処理してログに出力する形になるので、個人的にいまいち。 top じゃなくて、他のコマンドでも良かったかも。。\n","date":"2018-12-05","externalUrl":null,"permalink":"/blog/top%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%92%E5%8F%96%E3%82%8B/","section":"記事一覧","summary":"","title":"topコマンドのログを取る","type":"blog"},{"content":"Linux コマンドはちょこちょこ触ってメモしていきたい。\nAWS の t3.micro(CentOS7)を使用\nSwap ファイルを作る # メモリ使用量を確認\nそもそも Swap がない！！\n[tenn25@ip-10-0-0-51 /]$ free -m total used free shared buff/cache available Mem: 963 301 99 65 562 402 Swap: 0 0 0 dd コマンドは、ファイルをブロック単位で読み込み\n指定通り変換して標準出力をファイルに吐くことができる。\nHDD のパーティションをコピー USB メモリや CD-ROM のバックアップを取る サイズを指定して任意のサイズのファイルを作る などに使うらしい。 bs は M だと1024 らしいので count は 1000 で良かった模様(1.1GB になってしまった)\n1MB だと count1000 の計算になったっぽい。\n[tenn25@ip-10-0-0-51 /]$ sudo dd if=/dev/zero of=/swap bs=1M count=1024 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 4.46212 秒、 241 MB/秒 作成したファイルをスワップ領域として使用できるようにする\n[tenn25@ip-10-0-0-51 /]$ sudo mkswap /swap スワップ空間バージョン1を設定します、サイズ = 1048572 KiB ラベルはありません, UUID=3a114cfa-ea19-4f46-8be3-e64ef1327de5 スワップ領域を有効にする\n[tenn25@ip-10-0-0-51 /]$ sudo swapon /swap swapon: /swap: 安全でない権限 0644 を持ちます。 0600 がお勧めです。 [tenn25@ip-10-0-0-51 /]$ sudo chmod 600 /swap 再度確認\n[tenn25@ip-10-0-0-51 /]$ free -m total used free shared buff/cache available Mem: 963 274 79 65 609 458 Swap: 1023 0 1023 起動時に自動でスワップを有効にする設定を行う。\n一番下に１行追加\n# # /etc/fstab # Created by anaconda on Tue Jun 5 14:06:12 2018 # # Accessible filesystems, by reference, are maintained under \u0026#39;/dev/disk\u0026#39; # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=8c1540fa-e2b4-407d-bcd1-59848a73e463 / xfs defaults 0 0 /swapfile none swap sw 0 0 おわり。\n","date":"2018-12-05","externalUrl":null,"permalink":"/blog/linux%E3%81%AEswap%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%82%8B/","section":"記事一覧","summary":"","title":"linuxのswapファイルを作る","type":"blog"},{"content":" 本書について # 今日買って今日読みました(笑)\n下北沢のヴィレバンで出会って、軽めだったので買いました。\nアイデアのつくり方 ジェームス W.ヤング https://www.amazon.co.jp/dp/4484881047/ref=cm_sw_r_tw_dp_U_x_qZ.aCbV19QB1H\n価格も 800 円、1 時間あれば読める内容です。\n以下、簡単に内容のまとめと、個人的に考えたこと。\nパレートの学説 # この世には 2 種類の人間がいる。\n投機的な人…常に新しいものの組み合わせに夢中になっている そうでない人…想像力に乏しく、投機的な人に操られる人間 まずはこの投機的人間になること。\n投機的な人はごく一部の限られた人ではなく、多くの人が該当しているはずである。\n重要なのは、「才能が無いとそういった人間になれない訳ではない」ということ。\nアイデアを出す方法 # 何かを生み出すには\nそれが生まれる「原理」を把握する それを作り出す「方法」を訓練する\nこれらはアイデアにも言えることだし、それ以外の事にも言える。 最も大切な事実は\n「アイデアとは既存の要素と新しいものの組み合わせ」でしかない。\nということ。\nそして、２つ目に大切な原論 は\n「既存の要素を新しい１つの組み合わせに導く才能は、\n物事の関連性を見つけ出す才能に依存する」 ということ。\n断片的な既存の要素をいくら持っていても、\n決してアイデアには繋がらない。\nアイデアが作られる工程 # アイデアが作られるのには明確な工程があり、\n途中から始めたり、飛ばすことはできない。\n資料集め\n資料(アイデアの元となるデータ)には２種類ある。\n課題のための専門的な資料 - 一般的な知識 資料に手を加える 情報を整理したり、グルーピングすること\n孵化段階\n考えるのを放棄して想像力や感情を刺激するものに目を向ける\nアイデアが降ってくる瞬間\nアイデアを具体化させる\n現実の優位性に合わせてアイデアを形にして、展開する\n所感 # 「アイデアを出す」って\nかなり高度なスキルだし取っつきづらいけど、\n道筋を示してくれただけでも安心する。\n長年読まれてるのも納得でした。\n自分は漠然と「すげー人になりたい」というのがあって、\nなんで？って考えると、根本には\n一目置かれたり尊敬されたい 承認欲求を満たしたい みたいなものがやっぱりあって笑\n周りが思いつかないことをしたい それを自分で作りたい が、その手段なんだよね。\nだからエンジニアとしてもモチベーションが保ててるんだと思う。\n(かなり不純だけど)\nなので、ものを作るスキルだけじゃなくて\n自分でアイデアを出すスキルも欲しい。\nその取っ掛かりとして読めて良かったです。\nそして、やっぱり「技術は手段」としか思えなくて、\n自分は純粋に技術が好きでエンジニアやってる訳じゃないなとも思うわけです。\nとは言え楽しいと思えるから IT エンジニアは適職だと思うしその狭間で揺れたりもします。\nゆくゆくは企画とかアイデア出す側もやってみたいな。\nこの本は、半世紀以上昔に書かれたものだけど、\n今の時代はネットもあるので情報収集は簡単になったよな、と思いました。\n(情報の集計や分析だってデータベースや BI ツールがある！)\nその分アイデアがたくさん出てきても良さそうなものだけど、\n情報が多すぎて、情報の取捨選択と整理は難しくなってるのかなって。\n人々のニーズも間違いなく多様化してるし、色々世の中分かりづらくなってる感じはする・・。\nアイデアが出尽くして飽和してる感じも受けるし・・。\nとりあえず、自分が足りてないと思ったのは、\n第 1 段階の、一般的な知識 第 2 段階の、情報を整理する力 です。\niT 以外の情報も気にしようと思った。\nあとは、情報整理能力をつけたい。\n広い意味で、情報設計の勉強がしたい。\nデータベースやってるし、その辺スキルがうまくコラボしたらもっと良いよね。\n以上！そんな感じです。\n","date":"2018-12-03","externalUrl":null,"permalink":"/blog/%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0/","section":"記事一覧","summary":"","title":"「アイデアのつくり方」を読んだ","type":"blog"},{"content":"","date":"2018-11-25","externalUrl":null,"permalink":"/tags/csharp/","section":"Tags","summary":"","title":"CSharp","type":"tags"},{"content":"昨日は会社の同期とネイティブアプリ作成\n1 人は非エンジニアなので色々教えながら、まぁ楽しければいいかなと言う感じでやっている。\n前から準備はしてたんだけど、やっと環境構築が終わった。\n進捗あってよかった。。\nまず、チーム開発を始めるに当たってやったことを書いておく。 設定やったの何ヶ月も前だけど、メモしてあったので。 他の時に開発始める時に参考にできそう。\n各種アカウント作成 # gmail Slack AWS(New クレカなので無料枠おいしいです^p^) Trello Trello と Slack の連携 # Slack のワークスペース作る Trello のボード作る Slack のアプリ設定画面 Trello(Slack 上からコマンドで Trello を操作) Trello アラート(Trello 上の操作を Slack に通知) git の準備 # 1.AWS 上でメンバーの IAM ユーザ作成\n2.適切なポリシーを適用\n3.各自、自分の IAM ユーザの画面で CodeCommit 用の IAM \u0026gt; ユーザー \u0026gt; [ユーザ名] \u0026gt; 認証情報 \u0026gt; AWS CodeCommit の HTTPS Git 認証情報 \u0026gt; 生成されたアカウント名とパスワードを控えておく\n4.AWS の CodeCommit の画面から、東京リージョンのリポジトリ「リポジトリ名」を選択 \u0026gt; コード \u0026gt; 接続 \u0026gt; リポジトリ URL を控える\n5.各自、PC に Git と Git クライアント(SourceTree とか？)インストール\n6.ローカルにリポジトリをクローン\nコマンドの場合\n$ git init $ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/OlympicCharter OlympicCharter $ 3のID,Passwordを入れる。 ※なぜかこの後 SourceTree 上で認証が通らなかった。\nSourceTree 上で clone し直した。\nCodeCommit の ssh キー認証設定 # 1.aws cli をインストール 2.自分の IAM で accesskey を取得 3.aws configure 参考 https://qiita.com/ryuzee/items/e3ce493f132f1981f57a https://qiita.com/toshihirock/items/5f748e785fdd3b463b6a $ aws configure --profile [任意の識別名] AWS Access Key ID [****276A]: AWS Secret Access Key [****jF+d]: Default region name [ap-northeast-1]: Default output format [json]: 4.SSH 公開鍵を作成 省略\n5.IAM の認証情報に、SSH 公開鍵をアップロード\n6.codecommit のフィンガープリントを登録(ssh-rsa は登録した公開鍵)\n$ echo \u0026#34;git-codecommit.ap-northeast-1.amazonaws.com ssh-rsa AAAAB3NzaC1y*\u0026#34; \u0026gt;\u0026gt; ~/.ssh/known_hosts 7.ssh_config の設定 $ vi ~/.ssh/config Host git-codecommit.*.amazonaws.com User APK******************* IdentityFile ~/.ssh/id_rsa 8.接続確認 $ ssh git-codecommit.ap-northeast-1.amazonaws.com You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.ap-northeast-1.amazonaws.com closed by remote host. Connection to git-codecommit.ap-northeast-1.amazonaws.com closed. 昨日はここから\nVisualStudio for Mac のインストール # community は無料 Windows 版よりかなりしょぼいこれからの進化に期待 インストール時に、追加のモジュールとして iOS,Android を選択 Web アプリの開発もしたければ.NetCore も XCode のバージョンアップ # これやらなかったせいでサンプルアプリが変なエラーでまくった サンプルプロジェクトを作成 # Xamarin Forms を作成 XCode をバージョンアップしてなかったせいで、色々 Nuget の更新とかパッケージ追加を求められたけどサンプルプログラムは必要ない .gitignore ファイル追加 # プロジェクト作る時にチェックつければ勝手に作られるかも ビルド # iOS は仮想の端末を自分で設定した エミュレータで起動 # 無事サンプルアプリを起動できた。やったぜ。 ","date":"2018-11-25","externalUrl":null,"permalink":"/blog/xamarin%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-1-%E6%BA%96%E5%82%99%E3%81%8B%E3%82%89%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%81%BE%E3%81%A7/","section":"記事一覧","summary":"","title":"Xamarinアプリ開発 1.準備からサンプルアプリまで","type":"blog"},{"content":"","date":"2018-11-17","externalUrl":null,"permalink":"/tags/database/","section":"Tags","summary":"","title":"Database","type":"tags"},{"content":"Mezzanine ブログの記事データをみたくて DB の中を見てみた。\n…が、DB には大した情報は何も入ってなかった。\n投稿履歴とかどこにあるんだろ・・？\nログイン # -U でユーザ名指定\n-d で接続先 DB も指定可\n[tenn25@ip-10-0-0-51 ~]$ psql -U postgres psql (11.0) \u0026#34;help\u0026#34; でヘルプを表示します。 postgres=# psql は\\に続けてコマンドを実行するスタイル。 DB 一覧を表示\nblog=# \\l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 ------------+----------+------------------+----------+-------------------+----------------------- blog | postgres | UTF8 | C | C | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | tenn25=CTc/postgres postgres | postgres | UTF8 | C | C | template0 | postgres | UTF8 | C | C | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C | C | =c/postgres + | | | | | postgres=CTc/postgres tenn25blog | postgres | UTF8 | C | C | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | tenn25=CTc/postgres (5 行) DB に接続\npostgres=# \\c blog データベース \u0026#34;blog\u0026#34; にユーザ \u0026#34;postgres\u0026#34; として接続しました。 blog=# テーブル一覧を表示\nblog=# \\dt リレーション一覧 スキーマ | 名前 | 型 | 所有者 ----------+----------------------------+----------+-------- public | auth_group | テーブル | tenn25 public | auth_group_permissions | テーブル | tenn25 public | auth_permission | テーブル | tenn25 public | auth_user | テーブル | tenn25 public | auth_user_groups | テーブル | tenn25 public | auth_user_user_permissions | テーブル | tenn25 public | django_admin_log | テーブル | tenn25 public | django_content_type | テーブル | tenn25 public | django_migrations | テーブル | tenn25 public | django_session | テーブル | tenn25 (10 行) クエリ実行 # SQL の実行。改行もできる。 ; をお忘れなく。。\nblog=# select * from django_migrations ; id | app | name | applied ----+--------------+------------------------------------------+------------------------------- 1 | contenttypes | 0001_initial | 2018-10-21 21:08:51.960126+09 2 | auth | 0001_initial | 2018-10-21 21:08:52.124047+09 3 | admin | 0001_initial | 2018-10-21 21:08:52.14754+09 4 | admin | 0002_logentry_remove_auto_add | 2018-10-21 21:08:52.15789+09 5 | admin | 0003_logentry_add_action_flag_choices | 2018-10-21 21:08:52.180188+09 6 | contenttypes | 0002_remove_content_type_name | 2018-10-21 21:08:52.223051+09 7 | auth | 0002_alter_permission_name_max_length | 2018-10-21 21:08:52.229096+09 8 | auth | 0003_alter_user_email_max_length | 2018-10-21 21:08:52.239269+09 9 | auth | 0004_alter_user_username_opts | 2018-10-21 21:08:52.248465+09 10 | auth | 0005_alter_user_last_login_null | 2018-10-21 21:08:52.25856+09 11 | auth | 0006_require_contenttypes_0002 | 2018-10-21 21:08:52.260297+09 12 | auth | 0007_alter_validators_add_error_messages | 2018-10-21 21:08:52.271062+09 13 | auth | 0008_alter_user_username_max_length | 2018-10-21 21:08:52.28448+09 14 | auth | 0009_alter_user_last_name_max_length | 2018-10-21 21:08:52.294218+09 15 | sessions | 0001_initial | 2018-10-21 21:08:52.305047+09 (15 行) DB ごとのサイズ確認\nblog=# SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database; datname | pg_size_pretty ------------+---------------- postgres | 7947 kB template1 | 7947 kB template0 | 7947 kB blog | 8611 kB tenn25blog | 7947 kB (5 行) テーブルごとの件数を確認\nblog=# select relname, n_live_tup from pg_stat_user_tables where schemaname=\u0026#39;public\u0026#39;; relname | n_live_tup ----------------------------+------------ django_session | 1 auth_group | 0 auth_group_permissions | 0 django_content_type | 6 django_admin_log | 0 auth_user_user_permissions | 0 auth_user | 1 auth_user_groups | 0 auth_permission | 24 django_migrations | 15 (10 行) 気になったこと ① シーケンス # ちょっと気になって調べた。\n\\dt だとテーブル一覧、\\ds でシーケンス一覧が見れる\nblog=# \\ds リレーション一覧 スキーマ | 名前 | 型 | 所有者 ----------+-----------------------------------+------------+-------- public | auth_group_id_seq | シーケンス | tenn25 public | auth_group_permissions_id_seq | シーケンス | tenn25 public | auth_permission_id_seq | シーケンス | tenn25 public | auth_user_groups_id_seq | シーケンス | tenn25 public | auth_user_id_seq | シーケンス | tenn25 public | auth_user_user_permissions_id_seq | シーケンス | tenn25 public | django_admin_log_id_seq | シーケンス | tenn25 public | django_content_type_id_seq | シーケンス | tenn25 public | django_migrations_id_seq | シーケンス | tenn25 (9 行) シーケンスってのは、名前のとおり、自動採番するための仕組み。\nhttp://sql55.com/query/how-to-use-sequence.php\n単純なインクリメントではないものにも対応できそう。\n学科ごとに接頭辞付けて学籍番号にするとか？ (他の RDBMS にもあるっぽいけど知らなかった。)\nログアウト # \\q でお k。おつかれさまでした\nblog=# \\q [tenn25@ip-10-0-0-51 ~]$ ","date":"2018-11-17","externalUrl":null,"permalink":"/blog/postgresql%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/","section":"記事一覧","summary":"","title":"Postgresqlの基本操作","type":"blog"},{"content":"忘れそうなことはメモしていきたい。\nリストの代入の注意点 # 数字や文字は値渡し(別変数に代入したら実態として別物) 配列は参照渡し(配列を別変数に入れたら同じ実態を指す) id(変数)でオブジェクトの内部的な番号が出力される リストの使用例\n\u0026gt;\u0026gt;\u0026gt; l = [1,2,3,4,5] \u0026gt;\u0026gt;\u0026gt; l [1, 2, 3, 4, 5] \u0026gt;\u0026gt;\u0026gt; l[0] 1 \u0026gt;\u0026gt;\u0026gt; l[0:2] [1, 2] \u0026gt;\u0026gt;\u0026gt; l[:] [1, 2, 3, 4, 5] \u0026gt;\u0026gt;\u0026gt; len(l) 5 \u0026gt;\u0026gt;\u0026gt; l2 = [\u0026#39;a\u0026#39;,\u0026#39;b\u0026#39;,\u0026#39;c\u0026#39;] \u0026gt;\u0026gt;\u0026gt; x = [l, l2] \u0026gt;\u0026gt;\u0026gt; x [[1, 2, 3, 4, 5], [\u0026#39;a\u0026#39;, \u0026#39;b\u0026#39;, \u0026#39;c\u0026#39;]] \u0026gt;\u0026gt;\u0026gt; x[1][2] \u0026#39;c\u0026#39; リストの操作 # \u0026gt;\u0026gt;\u0026gt; s = [\u0026#39;a\u0026#39;,\u0026#39;b\u0026#39;,\u0026#39;c\u0026#39;,\u0026#39;s\u0026#39;] \u0026gt;\u0026gt;\u0026gt; s[0] = \u0026#39;X\u0026#39; \u0026gt;\u0026gt;\u0026gt; s [\u0026#39;X\u0026#39;, \u0026#39;b\u0026#39;, \u0026#39;c\u0026#39;, \u0026#39;s\u0026#39;] \u0026gt;\u0026gt;\u0026gt; s[0:2] = \u0026#39;A\u0026#39;, \u0026#39;B\u0026#39; \u0026gt;\u0026gt;\u0026gt; s [\u0026#39;A\u0026#39;, \u0026#39;B\u0026#39;, \u0026#39;c\u0026#39;, \u0026#39;s\u0026#39;] \u0026gt;\u0026gt;\u0026gt; s.append(\u0026#39;Z\u0026#39;) \u0026gt;\u0026gt;\u0026gt; s [\u0026#39;A\u0026#39;, \u0026#39;B\u0026#39;, \u0026#39;c\u0026#39;, \u0026#39;s\u0026#39;, \u0026#39;Z\u0026#39;] \u0026gt;\u0026gt;\u0026gt; s.pop(0) \u0026#39;A\u0026#39; \u0026gt;\u0026gt;\u0026gt; s [\u0026#39;B\u0026#39;, \u0026#39;c\u0026#39;, \u0026#39;s\u0026#39;, \u0026#39;Z\u0026#39;] \u0026gt;\u0026gt;\u0026gt; del s[0] \u0026gt;\u0026gt;\u0026gt; s [\u0026#39;c\u0026#39;, \u0026#39;s\u0026#39;, \u0026#39;Z\u0026#39;] \u0026gt;\u0026gt;\u0026gt; a = [1,2,3,4,5] \u0026gt;\u0026gt;\u0026gt; b = [6,7,8,9] \u0026gt;\u0026gt;\u0026gt; a += b \u0026gt;\u0026gt;\u0026gt; a [1, 2, 3, 4, 5, 6, 7, 8, 9] \u0026gt;\u0026gt;\u0026gt; x = [1,2,3,4] \u0026gt;\u0026gt;\u0026gt; y = [5,6,7,8] \u0026gt;\u0026gt;\u0026gt; x.extend(y) \u0026gt;\u0026gt;\u0026gt; x [1, 2, 3, 4, 5, 6, 7, 8] \u0026gt;\u0026gt;\u0026gt; id(x) 4458526088 タプル # リストに似ているが変数に新しい値を代入できない 値を変更できない help(tuple)で確認するとデータ操作のメソッドは count と index しかない 値を入れて参照する用途くらいにしか使わない これらは全部タプル t = (1,2,3,4,5) t = 1,2,3,4,5 t = 1, t = ([1,2,3],[4,5,6]) t = () t =(1,) これはタプルじゃ無い t =(1) t = (\u0026#39;test\u0026#39;) タプルのアンパッキング # 基本の使い方\n\u0026gt;\u0026gt;\u0026gt; num_tuple = (10, 20) \u0026gt;\u0026gt;\u0026gt; print(num_tuple) (10, 20) \u0026gt;\u0026gt;\u0026gt; x, y = num_tuple \u0026gt;\u0026gt;\u0026gt; print(x, y) 10 20 \u0026gt;\u0026gt;\u0026gt; x, y = 10, 20 \u0026gt;\u0026gt;\u0026gt; print(x, y) 10 20 文字の入れ替え(これ便利)\n\u0026gt;\u0026gt;\u0026gt; a, b, c = \u0026#39;Hello\u0026#39;, \u0026#39;World\u0026#39;, \u0026#39;!!!\u0026#39; \u0026gt;\u0026gt;\u0026gt; a, b, c = b, a, c \u0026gt;\u0026gt;\u0026gt; print(a, b, c) World Hello !!! ディクショナリー # キーと値を持った配列みたいなやつ リストと同じく参照渡し リストと異なり、キーで値を取ってきたい場合につかう ハッシュテーブルによりキーへのアクセスが速い リストの検索は先頭から見ていくプログラムを自分で書くことになる \u0026gt;\u0026gt;\u0026gt; d = {\u0026#39;x\u0026#39;: 10, \u0026#39;y\u0026#39;:20} \u0026gt;\u0026gt;\u0026gt; d[\u0026#39;x\u0026#39;] 10 \u0026gt;\u0026gt;\u0026gt; d[\u0026#39;z\u0026#39;] = 200 \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 10, \u0026#39;y\u0026#39;: 20, \u0026#39;z\u0026#39;: 200} \u0026gt;\u0026gt;\u0026gt; d[1] = 10000 \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 10, \u0026#39;y\u0026#39;: 20, \u0026#39;z\u0026#39;: 200, 1: 10000} \u0026gt;\u0026gt;\u0026gt; dict(a=10, b=20) {\u0026#39;a\u0026#39;: 10, \u0026#39;b\u0026#39;: 20} \u0026gt;\u0026gt;\u0026gt; dict([(\u0026#39;a\u0026#39;, 10),(\u0026#39;b\u0026#39;, 20)]) {\u0026#39;a\u0026#39;: 10, \u0026#39;b\u0026#39;: 20} ディクショナリー型のメソッド # 一覧は help(d)で見よう \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 10, \u0026#39;y\u0026#39;: 20, \u0026#39;z\u0026#39;: 200, 1: 10000} \u0026gt;\u0026gt;\u0026gt; d.pop(1) 10000 \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 10, \u0026#39;y\u0026#39;: 20, \u0026#39;z\u0026#39;: 200} \u0026gt;\u0026gt;\u0026gt; d.keys() dict_keys([\u0026#39;x\u0026#39;, \u0026#39;y\u0026#39;, \u0026#39;z\u0026#39;]) \u0026gt;\u0026gt;\u0026gt; d.values() dict_values([10, 20, 200]) \u0026gt;\u0026gt;\u0026gt; d2 = {\u0026#39;x\u0026#39;: 1000, \u0026#39;j\u0026#39;: 500} \u0026gt;\u0026gt;\u0026gt; d.update(d2) \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 1000, \u0026#39;y\u0026#39;: 20, \u0026#39;z\u0026#39;: 200, \u0026#39;j\u0026#39;: 500} \u0026gt;\u0026gt;\u0026gt; d[\u0026#39;x\u0026#39;] 1000 \u0026gt;\u0026gt;\u0026gt; d.get(\u0026#39;x\u0026#39;) 1000 存在しないものを取得 \u0026gt;\u0026gt;\u0026gt; r = d.get(\u0026#39;t\u0026#39;) \u0026gt;\u0026gt;\u0026gt; type(r) \u0026lt;class \u0026#39;NoneType\u0026#39;\u0026gt; \u0026gt;\u0026gt;\u0026gt; del d[\u0026#39;y\u0026#39;] \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 1000, \u0026#39;z\u0026#39;: 200, \u0026#39;j\u0026#39;: 500} \u0026gt;\u0026gt;\u0026gt; d.clear() \u0026gt;\u0026gt;\u0026gt; d {} \u0026gt;\u0026gt;\u0026gt; d = {\u0026#39;x\u0026#39;: 1000, \u0026#39;z\u0026#39;: 200, \u0026#39;j\u0026#39;: 500} \u0026gt;\u0026gt;\u0026gt; d {\u0026#39;x\u0026#39;: 1000, \u0026#39;z\u0026#39;: 200, \u0026#39;j\u0026#39;: 500} \u0026gt;\u0026gt;\u0026gt; \u0026#39;x\u0026#39; in d True \u0026gt;\u0026gt;\u0026gt; \u0026#39;t\u0026#39; in d False ","date":"2018-11-15","externalUrl":null,"permalink":"/blog/python%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%BF%E3%83%97%E3%83%AB%E3%83%87%E3%82%A3%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AA/","section":"記事一覧","summary":"","title":"Pythonのリスト・タプル・ディクショナリ","type":"blog"},{"content":"性能問題を起こしにくい信頼されるクラウド RDB のつくりかた 講演者のスライド https://www.slideshare.net/Tomoyuki_Oota/rdb-122256139\n概要 # 本セッションは劣化予防(構築、運用)がターゲット\nストレージ構成 アクセスパスの最適化 パフォーマンス監視 パフォーマンスのメンテナンス ■ ストレージ構成 # 1. Azure VM # Azure リソース毎にスループット上限あり ディスク、ストレージアカウント、VM これらのバランスを取ることが大事 2. Azure ManagedInstance # DB ごとに単一のプレミアムディスクが割り当てられる。 DB のファイルサイズによって自動で決まる。 temp db は localSSD 3. DWH の DataWarehouse # OLTP…局所的なアクセス DWH…広範囲にアクセス ← こっち 物理的にどうデータを配置するかが大事。\n60 個のリモートストレージに分散される。(数が固定)\nそのためリモートストレージ間でデータ移動を抑えることが大事。 分散ルールが選べる # ラウンドロビンが規定だが、ファクト表もディメンジョン表も可能な限りハッシュ分散に変更するべき ハッシュ分散のキーの選び方は？\nデータ移動を最小化する データの不均衡を最小化する → この両立は難しいので DMV とか見ながら(詳細は資料参照)\n■ アクセスパスの最適化 # 適切なインデックスを定義 正しいクエリを書く 統計情報の高い鮮度と制度を保つ 目的は性能向上、インデックスを使うことが正解とは限らないし、データ変化によって状況も変わる。\n→ 不要なインデックス削除、デフラグなどメンテナンスが必須\nDWH には列インデックスが適してる。\nOLTP、少数の行の検索にはクラスタ(非クラスタ)インデックスが最適。\nインデックスが使われないケース、クエリの一般ガイドラインは資料参照。\n■ パフォーマンス監視 # 1.IaaS VM # 基本的にはオンプレと同じツール使える。\nPerformance Diagnostics によるパフォーマンス診断(機能の有効かが必要) 2.Managed Instance # 診断設定から Intelligent Insights を有効化 ログは LogAnalytics などに出力(可視化用の拡張あり) → これ超絶良さげ・・ 3.SQL Database # クエリ実行統計の可視化が規定で ON(Query Performance Insight) 実行回数。スロークエリ、リソース消費の推移が見える 実行プランはクエリストアに飛んで見える。 4.Data Warehouse # DMV の詳細を分析する AzureMonitor for Warehouse がある。 ■ パフォーマンスのメンテナンス # 統計情報のメンテナンスの挙動把握が重要 # インデックス作成、検索条件で使われた等 20%に相当するレコードが変更された場合 ※手動更新が必要な場合もある。 統計情報の更新フロー初めて見た・・\nこのセッション結構深い解説もあって良いな・・\nインデックスの断片化 # Pass だとしてもデータは自分で管理するんだよ！\n内部断片化(FillFactor で極力防止したり) 外部断片化 ※B-Tree インデックスの深さにも注意しよう\n所感 # モニタリングの機能ありすぎだろ！！(褒めてる)(統一感がないとも言う) 登壇者「DB 単体だとデモ映えしない」→ わかりみ w Azure のモニタリングのツールは極めたい・・ ","date":"2018-11-11","externalUrl":null,"permalink":"/blog/ms-tech-summit-%E6%80%A7%E8%83%BD%E5%95%8F%E9%A1%8C%E3%82%92%E8%B5%B7%E3%81%93%E3%81%97%E3%81%AB%E3%81%8F%E3%81%84%E4%BF%A1%E9%A0%BC%E3%81%95%E3%82%8C%E3%82%8B%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89rdb%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%8B%E3%81%9F/","section":"記事一覧","summary":"","title":"MSTechSummit-性能問題を起こしにくい信頼されるクラウドRDBのつくりかた","type":"blog"},{"content":"Redmine のユーザコミュニティである「Redmine Tokyo」に参加してきた。\nこういう勉強会久々だったけど、最後にグループディスカッションもあって、他の会社の使い方とかも聞けてよかった。\nメインのセッションの内容をメモったので自分用に残しておく。\nRedmine4.0 について # 新機能 # 色々 # プレビューのタブ化 右クリックのコンテキストメニューがアイコン化 他の人のウォッチャーチケットも見れる ロック中ユーザの抽出(退職者一覧を見るとか) プロジェクトを切り替えなくても子プロジェクトを作成できる コメントを新しい順(降順)にしても編集フォームは上のままになるように改善 ##1234 とするとトラッカーと題名も表示(#1 つだとチケット番号だけだった) 複数の添付ファイルを連続してプレビュー(前へ、次へボタンでプレビュー) CSV エクスポート時に UTF-8 が選べる。 ユーザの一覧が CSV でエクスポートできる ガントチャート # ガントチャート画面上でステータス変更や担当者変更ができるようになった ガントチャートの表示幅のリサイズができる マイページ # 新しいブロック「活動」　昨日何やったかなど見れる 特定コミットのファイル一覧と差分の行き来がタブでできるようになった テキスト書式 # シンタックスハイライトの対応言語大幅増加(CodeRay から Rouge に変更) C#や Shell に対応 Apahe や Nginx の設定ファイルにも対応 動作環境の変更 # MySQL # MySQL5.1 以前、Postgres9.1 以前がサポート外に mysql gem2 のアップデートの影響 CentOS6 のデフォルトは 8.4 なので注意 Ruby # Ruby2.2.1 以前はサポート外 プラグイン # 上記のため、多くのプラグインがそのままでは動かない まとめ # たぶんもうすぐリリースされる\n修正・追加は 200 件以上\n動作環境も刷新される\nRedmine について気になることがあったら redmine.org にチケットを起票\n日本語と Google 翻訳で OK(コミュニティの人がすぐに誰かが見てくれて英語直してくれる)\nViewCustomize Plugin # 画面をカスタマイズする Plugin\nHTML,CSS で手軽に\nプロジェクトごとにヘッダの色を帰る\nサイドバーを閉会式に\nバージョン 1.2.0 の詳細についてはググろう\nhttp://blog.enjoyxstudy.com/entry/2018/10/01/000000\n所感 # Redmine のプラグインで一番有名な気がした。 弊現場でもたぶん使ってる。(どの機能がプラグインかわからずに使っていた) 効果的な Redmine の導入のヒント # マズローの欲求 5 段階説 # 自己実現の欲求 承認欲求 所属・愛欲求 安全欲求 生理的欲求 TOC の抵抗の 6 階層 # 問題に対して同意しない 解決の方向性に同意しない 解決策が問題を解決することに同意しない 解決策を実行すると新たな問題が発生する 解決作実行前の障害を克服できない 未知の問題や障害に対する不安と恐れ 今を考えよう\nできてること、可能なこと やりたいこと、実現したいこと やりたいことまでの問題点 問題点を解決するために実施していること 抵抗の種類の洗い出しと区分け\n資料公開あり Redmine エバンジェリストの会 Redmine をもっと効果的に利用できる方法を検証・伝達していく会 所感 # Redmine も課題解決のために導入されるとおもうけど、その時の障壁を心理学的に分解するのは面白い。\nちょっと時間あったら調べてみたいな。\nRedmine 使いが気になった JIRA の機能 # 敵を知り己を知れば・・・ JIRA のいけてる機能 # JQL # JQL UI じゃなくてクエリで解決しようのスタイル AND,OR をはじめ色々ある WAS…今、または過去にその値が設定されていたか 関数…相当複雑なフィルタも可能 アジャイル機能 # かんばん バックログとスプリント。ドラッグアンドドロップで移動 レポート機能が充実。分析。アジャイルのプロマネは嬉しい。 イベントと通知 # チケットの作成や更新のフックができる。その他ユーザ定義イベント それぞれのイベントごとにメール通知のカスタマイズが可能。(必要な時に必要な通知だけにできる) ワークフローは Redmine と同じだが、ワークフローのダイアグラム表示ができる。 Wiki の代わりに Confluence(別ツール)との連携が可能 # アップデート機能 # JIRA とアドオンの購入、インストール、アップデート アドオンを登録すると、サブスクリプションで収益を得られる 保守がしんどい → 優勝サポートにしよう。 アップデートでプラグインが死ぬことが少ないらしい。 まとめ # ####いいところ\nチケット操作や通知のカスタマイズ性が高い JIRA 本体やアドオンの管理コストが低い JIRA のつらいとこ # WBS が組みづらい\n機能が多すぎて稼働までに時間がかかる フィールド、ワークフロー、イベント、画面、通知・・・ 業務プロセスを JIRA のどの機能に割り当てるか。案件進めながら使ってみようは危険\n大半はシステム管理者しか触れない。不可が集中する。 アップデートや保守は楽だが、プラグインの追加やその他変更は管理者頼み\nアジャイル特化なので、それ以外では足りない\nボトムアップで始めるにはライセンス費が高い\n所感 # JIRA は全くわからないけど、ライセンスが高いのはちょっとネックかな・・ ある工場の Redmine2018 私が愛用しているプラグイン # プラグインはバージョンアップの障害になることがある。\nバージョンアップ検証が超大変。でも使いたい\nいいプラグイン # 評価のいいもの 多く使われているもの 有料、サポートのあるもの メンテナンスされている作者が熱心なもの View Customize Plugin # JS と CSS でいろんな改造ができる 位置変えたり 金額の桁区切り 入力項目に default 値入れたり カレンダーに色をつけたり 印刷ボタン バナー表示 Redmine Wiki Extention # オートプレビュー PJ ごとに異なるテーマ Wiki ページのタブ化 iframe 埋め込み Google カレンダー 写真、動画 スプレッドシート JS Toolbar Button Extention(ちょっとマイナー) # ツールバーボタン作成(Redmine 記法の簡略化) 赤、青文字ボタン コード検索画面呼び出し 折りたたみボタン WIki UNC Plugin # ファイルサーバ上のパスへのリンクを作れる Wiki Lists Plugin # チケットや WIki の中に特定の条件で抽出したチケットの一覧を作れる 「最近更新したチケット」→ 自分が ○ 日医ないにん更新したチケット一覧を表示 Default Custom Query # チケット一覧画面でしようするカスタムクエリ Redmine issue Templates(akiko さん作成) # チケットのテンプレートを作れる 項目を入れておくことで記載漏れが減る Banner Plugin(akiko さん作成) # 全体や PJ にお知らせバナーを表示 不在、メンテ告知 メニュー表示 ClipBoard image paste # クリップボードから画像を晴れる Checklist Plugin # チケットにチェックリストが作れる チケットないで Sidebar Hide # 右のサイドバーを隠す まとめ # プラグインの作成者のかたに感謝を 日本人開発者が多い 所感 # いろんなプラグインが聞けてよかった。 検証環境早く作って色々使ってみたい。 ","date":"2018-11-11","externalUrl":null,"permalink":"/blog/redmine-tokyo%E7%AC%AC-15-%E5%9B%9E%E5%8F%82%E5%8A%A0%E3%83%A1%E3%83%A2/","section":"記事一覧","summary":"","title":"RedmineTokyo第15回参加メモ","type":"blog"},{"content":"11/10 にインフラ勉強会で Ansible AWX の講座をやっていたので個人メモ Ansible についてまとめる。\n基本概要 # 構成管理ツールの一種 冪等性がある 変更が必要ない場合はスキップされる 部冪等性が担保されないものもある。(注意点) Inventory # Ansible が管理する対象(ホスト名や IP)を定義する グループ分けも可能 AWS の EC2 の情報を動的にとってくるなど、DynamicInventory もある Module # Ansible から実行するコマンド郡 ファイルの操作やミドルウェアに対する設定変更など 実行時に現在の状態を確認し変更がある場合は実施、ない場合はスキップする 一部冪等性が担保されないものもある(command,shell など) Plugin # Ansible がコアとなる機能を提供するために呼び出すもの ConnectionPlugin\u0026hellip;ホストと接続する機能 CallbackPlugin\u0026hellip;Ansible のイベントをフックに呼び出せる機能 PlayBook # YAML で記述する こういうことをしたい、このファイルをここに置きたいなどの操作を書く 色々やろうとすると分量が増え 1 つにまとめるのは大変 機能ごとに Role で細分化すると良い Role # PlayBook を細かく切り出したもの 肥大化すると後々一部を抜き出すのが大変なので、Role としてまとめておくと便利 似たようなツールとの違い # おそらく対象とするレイヤーが違う Terraform や Cloudformation はインフラの構築を行う Ansible,Chef は各サーバ内のミドルウェアや設定を行う AWX とは？ # Ansible 単体だと色々手間だったり手が届かないことをやってくれる AnsibleTower のアップストリームプロジェクト(OSS で無料) 権限管理、Git などとの統合、クラウドとの連携、ワークフロー管理など コンテナベースで動作 更新頻度がとても高い AWX はどんな時に便利？ # 組織として権限やログイン情報の管理が必要 RBAC,Credential SCM(ソースコントロールマネジメント) 複数の Playbook を繋げて処理を分岐させたい！(GUI でできるワークフローという機能) 所感 # 基本用語も知らなかったので Ansible の概要がキャッチアップできた AWX の UI がシンプルで好みだった。 Ansible をがんがん使ってる現場では必須だと思った。便利そう。 とりあえずローカルの VM に対して実行してみるとこからはじめます。。 ","date":"2018-11-11","externalUrl":null,"permalink":"/blog/ansible%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98/","section":"記事一覧","summary":"","title":"Ansibleの基礎知識","type":"blog"},{"content":"今日の学び。SQLDatabase について少し調べた。\nスケールアップ時の動き # シングル構成の SQLDatabase の場合、レプリカが作成されて内部的に DNS が切り替えられる。 数秒の停止が発生するので注意が必要っぽい。 https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-single-database-scale\nエラスティックプール # 負荷タイミングが違う複数 DB を同じエラスティックプールとしてハードウェアリソースを共有させることで、リソースの使用を効率化できる。 あくまでリソース共有による効率化が目的であって、性能が上がるとかではない。 https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-elastic-pool\n","date":"2018-11-07","externalUrl":null,"permalink":"/blog/sql-database%E3%81%AE%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E6%8C%99%E5%8B%95%E3%81%A8%E3%82%A8%E3%83%A9%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%97%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/","section":"記事一覧","summary":"","title":"SQLDatabaseのスケールアップ挙動とエラスティックプールについて","type":"blog"},{"content":" 第 0 回…AWS の設定 第 1 回…サーバ設定 第 2 回…ブログ作成 第 3 回…https 化などのその他対応**← この記事** Markdown でかけるようにする # [参考サイト](https://pypi.org/project/mezzanine-pagedown/ https://www.monotalk.xyz/blog/mezzanine%E3%81%AEpagedown%E3%81%ABcodehilite%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/)\nインストールと settings.py への追加 (py36) [tenn25@ip-10-0-0-51 tenn25blog]$ pip install mezzanine-pagedown (py36) [tenn25@ip-10-0-0-51 mezzanine_pagedown]$ pip install Pygments (py36) [tenn25@ip-10-0-0-51 mezzanine_pagedown]$ sudo vi /opt/blog/tenn25blog/tenn25blog/settings.py 以下を設定 ################ # APPLICATIONS # ################ INSTALLED_APPS = ( \u0026#34;django.contrib.admin\u0026#34;, \u0026#34;django.contrib.auth\u0026#34;, \u0026#34;django.contrib.contenttypes\u0026#34;, \u0026#34;django.contrib.redirects\u0026#34;, \u0026#34;django.contrib.sessions\u0026#34;, \u0026#34;django.contrib.sites\u0026#34;, \u0026#34;django.contrib.sitemaps\u0026#34;, \u0026#34;django.contrib.staticfiles\u0026#34;, \u0026#34;mezzanine.boot\u0026#34;, \u0026#34;mezzanine.conf\u0026#34;, \u0026#34;mezzanine.core\u0026#34;, \u0026#34;mezzanine.generic\u0026#34;, \u0026#34;mezzanine.pages\u0026#34;, \u0026#34;mezzanine.blog\u0026#34;, \u0026#34;mezzanine.forms\u0026#34;, \u0026#34;mezzanine.galleries\u0026#34;, \u0026#34;mezzanine.twitter\u0026#34;, # \u0026#34;mezzanine.accounts\u0026#34;, \u0026#34;mezzanine_pagedown\u0026#34; ) #################### # mezzanne-pagedown # #################### RICHTEXT_WIDGET_CLASS = \u0026#39;mezzanine_pagedown.widgets.PageDownWidget\u0026#39; RICHTEXT_FILTER = \u0026#39;mezzanine_pagedown.filters.custom\u0026#39; RICHTEXT_FILTERS = (RICHTEXT_FILTER,) PAGEDOWN_MARKDOWN_EXTENSIONS = (\u0026#39;extra\u0026#39;,\u0026#39;codehilite\u0026#39;,\u0026#39;toc\u0026#39;) RICHTEXT_FILTER_LEVEL = 3 PAGEDOWN_SERVER_SIDE_PREVIEW = True urls.py の設定 sudo vi /opt/blog/tenn25blog/tenn25blog/urls.py 以下を設定 # Add for Markdown import mezzanine_pagedown.urls urlpatterns += [ # For Markdown Preview url(\u0026#34;^pagedown/\u0026#34;, include(mezzanine_pagedown.urls)), 201811/19 追記\n追加後にマークダウンプレビューが見れない問題があったが、\nstatic ファイルの集約をし直して無いからだった。 (py36) [root@ip-10-0-0-51 tenn25blog]# python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /opt/blog/tenn25blog/static This will overwrite existing files! Are you sure you want to do this? Type \u0026#39;yes\u0026#39; to continue, or \u0026#39;no\u0026#39; to cancel: yes Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/pagedown/Markdown.Converter.js\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/pagedown/Markdown.Sanitizer.js\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/pagedown/Markdown.Editor.js\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/pagedown/wmd-buttons.png\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/pagedown/LICENSE.txt\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/css/pagedown.css\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/js/jquery.cookie.js\u0026#39; Copying \u0026#39;/opt/blog/py36/lib64/python3.6/site-packages/mezzanine_pagedown/static/mezzanine_pagedown/js/jquery.ba-throttle-debounce.min.js\u0026#39; Found another file with the destination path \u0026#39;admin/js/actions.js\u0026#39;. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path. Found another file with the destination path \u0026#39;admin/js/actions.min.js\u0026#39;. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path. 8 static files copied to \u0026#39;/opt/blog/tenn25blog/static\u0026#39;, 412 unmodified. Django プロジェクトを Lets Encrypt で HTTPS 化する # AWS のセキュリティグループで 443 ポートを解放する。\ncertbot のインストール\n必要だったらやる $ sudo yum install epel-release CertBotのインストール $ sudo yum install certbot $ pwd /opt/blog/tenn25blog/static $ ls admin css filebrowser fonts grappelli img js media mezzanine robots.txt test Djnagoの場合静的ファイルはstaticに\bまとめてるので、そこを指定する。 $ sudo vi /etc/nginx/conf.d/blog.conf location /.well-known { root /opt/blog/tenn25blog/static; } $ sudo certbot certonly --webroot -w /opt/blog/tenn25blog/static -d www.tenn25.com 規約に同意しますか→(A)gree 電子フロンティア財団からの連絡を受け取りますか→(N)o - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/www.tenn25.com/fullchain.pem と出たらOK!!! nginx.conf の設定 server { listen 80; server_name www.tenn25.com; return 301 https://$host$request_uri; } server { listen 443 default ssl; server_name www.tenn25.com; location = /favicon.ico {access_log off; log_not_found off;} location /static/ { root /opt/blog/tenn25blog; } location / { include proxy_params; proxy_pass http://app_server; # proxy_pass http://localhost:8000; } location /.well-known { root /opt/blog/tenn25blog/static; } ssl_certificate /etc/letsencrypt/live/www.tenn25.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.tenn25.com/privkey.pem; } ","date":"2018-11-06","externalUrl":null,"permalink":"/blog/mezzanine%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E4%BD%9C%E6%88%90-3-https%E5%8C%96%E3%81%A8-markdown%E5%AF%BE%E5%BF%9C/","section":"記事一覧","summary":"","title":"Mezzanineでブログ作成 3.HTTPS化とMarkdown対応","type":"blog"},{"content":"","date":"2018-10-31","externalUrl":null,"permalink":"/tags/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A/","section":"Tags","summary":"","title":"インフラ勉強会","type":"tags"},{"content":"今日使った資料\n「緊張」と「疲労」が「達成感」と「解放感」に Swap されました。\nいまの気持ちを残そう。\n配信の慣れてなさがすごい # 今日は 70 人弱くらい見に来てたっぽいけど、CrankWheel の上限超えてたと思う。申し訳ないっす。 全画面共有とかウィンドウ共有じゃなくてずっとタブ共有してた。。。 遅延は数秒だったけど、別タブ開いてるだけとか、ポップアップ画面が共有されてないとかで止まってると勘違いしてしまった。 メールアドレスとか本名モロバレだとおもったけど、解像度が低かったから見られてない(ということにしておこう w) やりたいこと全部話せてよかった # AzureDevOps の説明 インフラのデプロイ アプリケーションのデプロイ ブルーグリーンデプロイ いや、ほんとよかった w\n時間があれば DevOps の他の機能も紹介したかったけどまた別の機会に。。\nインフラ勉強会登壇時のテクニック # Discord は別 PC で開きながら見るのが良さそう。 画面が止まってもなんか話続けた方がいい。(質問受け付けるとか) Mixer を使え ","date":"2018-10-31","externalUrl":null,"permalink":"/blog/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%8B%89%E5%BC%B7%E4%BC%9A-azure%E3%81%A7-cicd%E3%81%99%E3%82%8B%E3%81%8B%E3%82%89%E3%81%BF%E3%81%A6%E3%81%A6%E3%81%8F%E3%82%8C/","section":"記事一覧","summary":"","title":"インフラ勉強会-AzureでCI・CDするからみててくれ","type":"blog"},{"content":" AWS Reserved Instance # 要は前払いすることで、トータルで割安になるよ、というやつ。 権利を買うだけなので、インスタンスとの紐づけは不要 コストチューニングの方向性 # クラウドネイティブなアーキに変える(PaaS、サーバレス)⇒ 影響大 大変 クラウドネイティブなアーキに変える(ECS、スポットインスタンス)⇒ 効果大 大変 割引オプション ⇒ 効果中　簡単 その他(EBS など)⇒ 効果小　簡単 基本の考え方 # 常時稼働分は固定で RI を買ってしまう ピーク時に増減する分はオンデマンドで増やしたり減らしたり ここ１年くらいの機能アップデート # RI の柔軟性があがった # サイズの柔軟性 EC2,RDS に対して適用されてる。\nm4.2xlearge1 台分購入 ⇒m4learge×4 台。\n同じファミリーないのサイズ変更なら既存の RI が無駄にならない\nAZ の柔軟性\nリージョン指定は必要だが、AZ は固定ではない。\nConvertible RI # 後からインスタンスタイプのファミリーも変更が可能 m4→m5 に移行など、単価が下がるような変更の場合は購入数を増やして支払い額が減らないようにしないといけない 支払う料金の増える分だけ払えば変更が可能 割引率は普通の RI と比べて若干(10%くらい)下がる ElastiCache に RI が出た # EC2 と RDS くらいだったが、今後も増えるかも 支払い方法 # 全額前払い 効果大 一部前払い 効果中 前払い無し 効果小 この 3 種類だが、「全額前払いコースをリースで支払う」は可能らしい。\nAWS コンソール上から RI の状況を確認方法 # コストエクスプローラから以下の２つを見る。\nカバレッジレポート RI の一覧を見る機能。\nサービスごとの割合が見れる。\nView Recommendations からおすすめの RI の買い方を教えてくれる。\nUtirization 所有してる RI を何％使ってるかが見れる。\nちなみに Azure は？ # あるっぽい\nAzure Reserved VM Instances (RIs)\n","date":"2018-10-29","externalUrl":null,"permalink":"/blog/aws%E3%81%AE-reserved-instance%E3%81%8C%E8%89%B2%E3%80%85%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%A6%E3%81%9F/","section":"記事一覧","summary":"","title":"AWSのReserved Instanceが色々変わってた","type":"blog"},{"content":" 基本知識 # AzureDevOps には組織＞プロジェクトという単位がある。 1 プロジェクトごとに人数やビルド時間の制限があるが、基本無料 作っただけだとサブスクリプションとも連携されてない。課金するには連携が必要 AzureDevOps は AzureAD との連携が必要。 手順だけ箇条書きでメモ # Azure 上のアカウント(必ずしも MS アカウントである必要はない)でAzureDevOpsにアクセス\n(AzureDevOps 側)Organization(組織)を作成する。\n(AzureDevOps 側)Project を作成する。\n(Azure ポータル側)Organization を作ったユーザログインして[Devops]で検索。すると作った組織が表示されてる。\n(Azure ポータル側)AzureAD の連携ができてなければする。サブスクリプションの連携ができてなければする。\n(AzureDevOps 側)AzureAD と連携が完了すると、他ユーザを追加できるようになる。[Organization Settings]から[Security]を選択。\n(AzureDevOps 側)権限 hogehogeAdministrators に[Add]から AzureAD 上のユーザかグループを追加できる。\n(AzureDevOps 側)他ユーザでログインすると、Organization が一覧に表示されてるので利用できる。\n(AzureDevOps 側)その他 ProjecSettings から User 追加など可能(無料枠 5 人まで)\n番外編 # (Azure ポータル側)DevOps で検索して、そこからプロジェクトのテンプレートを選んで作成することもできるっぽい(やったことない) 以上です。\n","date":"2018-10-29","externalUrl":null,"permalink":"/blog/azure-dev-ops%E3%81%A8-azure-ad%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%A8%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A/","section":"記事一覧","summary":"","title":"AzureDevOpsとAzureADの関係と初期設定","type":"blog"},{"content":"こんばんは。\n10/31(水)にインフラ勉強会で登壇するにあたり、\nAzure 環境を整備してました。\nAzureAD、ディレクトリ、サブスクリプション\nこの辺がよくわかってなかった。\n方法: Azure Active Directory ポータルを使用してカスタム ドメイン名を追加する\nAzure サブスクリプションを Azure Active Directory に関連付けるまたは追加する方法\nAzure サブスクリプションと Azure AD の管理者\n今日理解したこと\nルートアカウントにあたる MS アカウント以外を作るには、先にカスタムドメインの追加が必要(最初から MS アカウント名みたいなドメインは付与されてる) [ユーザ名]@[カスタムドメイン]で Azure 上のユーザが作れる。 ユーザを作ったら個人か、グループに入れてサブスクリプション側に権限設定をしないといけない。(サブスクリプション＞アクセス制御) AzureAD とサブスクリプションに判官関係はない。それぞれ独立した概念。 ディレクトリは複数のサブスクリプションを包括できるが、サブスクリプションは 1 つのディレクトリしか信頼できない。 ここでいうディレクトリは AzureAD と同等の意味で良さそう。ディレクトリの切り替え=AD の切り替え。と言う認識。 MS のドキュメントをちゃんと読もう。\n読まずに分からんって言いがち。\n","date":"2018-10-28","externalUrl":null,"permalink":"/blog/azure%E3%81%AE%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E5%91%A8%E3%82%8A%E3%81%AE%E8%A9%B1/","section":"記事一覧","summary":"","title":"Azureのサブスクリプション周りの話","type":"blog"},{"content":"こんにちは。\nMarkdown で記事書けるようになって喜んだのも束の間、\n画像の添付できなくなってました・・・\n一進一退の攻防が続く・・・\n第 0 回…AWS の設定 第 1 回…サーバ設定 第 2 回…ブログ作成**← この記事** 第 3 回…https 化などのその他対応 Mezzanine のインストール # 前回の記事で、一通り Django プロジェクトの建て方が分かりました。\n今回は、改めて Mezzanine を使ったプロジェクトを作りましょう。 前回作った Django プロジェクトはお試しなのでもう使いません w\nmezzanine インストール 参考 https://hatebu.me/entry/mezzanine (py36) [tenn25@ip-10-0-0-51 blog]$ pip install mezzanine (py36) [tenn25@ip-10-0-0-51 blog]$ pip list ~~以下抜粋 Django (1.11.16) django-contrib-comments (1.9.0) gunicorn (19.9.0) Mezzanine (4.3.1) Mezzanine プロジェクトの作成\n任意のディレクトリで以下のコマンドを実行します。\n私の場合は、/opt/blog です。\n前回は[blog]というプロジェクトを作りましたが、\n今回は[tenn25blog]という名前にします。 (py36) [tenn25@ip-10-0-0-51 blog]$ mezzanine-project tenn25blog (py36) [tenn25@ip-10-0-0-51 blog]$ ls blog py36 tenn25blog DB の作成\n基本的には今までやったことをやるだけ $cd tenn25blog $python3 manage.py createdb --noinput なんかエラーが出る・・・ Invalid HTTP_HOST header: \u0026#39;www.tenn25.com:8000\u0026#39;. You may need to add \u0026#39;www.tenn25.com\u0026#39; to ALLOWED_HOSTS. [21/Oct/2018 22:47:41] \u0026#34;GET /favicon.ico HTTP/1.1\u0026#34; 400 62798 どうやって直したか忘れた・・・ ALLOW_HOSTSを1つにしたり、シングルクォートに変えたり？ いつの間にかエラー解消してました。 そのほか前回の記事を参考に設定を進めましょう。\nデータベースの作成 setting.py の設定 nginx.conf の設定 Admin ページの設定 mezzanine プロジェクトも、中身は Django なので、\nプロジェクトのパスが変わっただけでです。\n2.Mezzanine の設定 # static な file を１箇所に集める mezzanine プロジェクト内のページ(アプリ？)ごとに static ファイルがバラバラ。\nなので以下のコマンドで１箇所に集める。(管理が楽になる。)\n(py36) [tenn25@ip-10-0-0-51 static]$ python manage.py collectstatic (py36) [tenn25@ip-10-0-0-51 static]$ pwd /opt/blog/tenn25blog/static (py36) [tenn25@ip-10-0-0-51 static]$ ls admin css filebrowser fonts grappelli img js media mezzanine robots.txt test static ファイルへのパスはここに指定しましょう。\nちょっと手抜き記事ですが、ドメイン指定でブラウザからアクセスできれば OK です。\nお疲れ様でした。\n","date":"2018-10-27","externalUrl":null,"permalink":"/blog/mezzanine%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E4%BD%9C%E6%88%90-2-%E3%83%96%E3%83%AD%E3%82%B0%E6%A7%8B%E7%AF%89/","section":"記事一覧","summary":"","title":"Mezzanineでブログ作成 2.ブログ構築","type":"blog"},{"content":"プラグインを入れて Markdown で投稿できるようになった！！（これも後々記事にする）\n今回は、このブログを立てるにあたってやったことをまとめるよ。\n第 0 回…AWS の設定 第 1 回…サーバ設定**← この記事** 第 2 回…ブログ作成 第 3 回…https 化などのその他対応 概要 # 今回は CentOS7 を使っています。\nAmazon Linux2 を使ったら extra でのインストール苦しんだので諦めました。\nWeb サーバ(Nginx) アプリケーションサーバ(Gunicorn) DB サーバ(Postgresql)\nのインストールを行う。 つまづくポイントが多いので、段階を踏んで確認していきます。\nPython 内蔵のサーバで動作確認 Gunicorn を起動して動作確認 Nginx をリバースプロキシとしてドメインからアクセスして確認 ここまで問題なければ、次回の記事で Python 製 CMS の Mezzanine を入れて再度 0 からプロジェクトを作成し直します。\n1.Nginx のインストール # $ vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1 $ yum install nginx $ nginx -v nginx version: nginx/1.15.5 $ sudo systemctl enable nginx Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. 2. Postgresql11 のインストール # 実は Postgres をちゃんと使うのは初めて。せっかくだから新しい 11 を入れる。 参考： https://soudai.hatenablog.com/entry/2018/10/08/023918\n$ sudo yum update $ sudo yum localinstall https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm $ sudo su postgres bash-4.2$ /usr/pgsql-11/bin/initdb -E UTF-8 --no-locale -D /var/lib/pgsql/11/data bash-4.2$ exit $ sudo systemctl start postgresql-11.service $ sudo systemctl enable postgresql-11.service Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-11.service to /usr/lib/systemd/system/postgresql-11.service. $ psql -V psql (PostgreSQL) 11.0 psql コマンドで DB に接続 $ sudo passwd postgres $ su postgres パスワード: bash-4.2$ cd bash-4.2$ pwd /var/lib/pgsql bash-4.2$ psql DB 内の設定 注意: DB 名を大文字にしたけど、小文字で登録されたみたい。(\b ポスグレは大文字小文字が区別される？？)\npostgres=# CREATE DATABASE [DB名] LC_COLLATE \u0026#39;C\u0026#39; LC_CTYPE \u0026#39;C\u0026#39; ENCODING \u0026#39;UTF8\u0026#39; TEMPLATE template0; CREATE DATABASE postgres=# CREATE USER [ユーザ名] WITH PASSWORD \u0026#39;******\u0026#39;; CREATE ROLE postgres=# ALTER ROLE [ユーザ名] SET client_encoding TO \u0026#39;utf8\u0026#39;; ALTER ROLE postgres=# ALTER ROLE [ユーザ名] SET default_transaction_isolation TO \u0026#39;read committed\u0026#39;; ALTER ROLE postgres=# ALTER ROLE [ユーザ名] SET timezone TO \u0026#39;UTC+9\u0026#39;; ALTER ROLE postgres=# GRANT ALL PRIVILEGES ON DATABASE BLOG TO [ユーザ名]; GRANT postgres=# \\q bash-4.2$ 3. Python のインストール # 参考: https://qiita.com/tinaba/items/01bc72c100f97438a36e\nまずは Python3 系と pip をインストール $ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm $ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip psycopg2-binary $ python3.6 -V Python 3.6.5 $ pip3.6 -V pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6) Python3.6 の仮想環境を作る 今回、ブログ関係のファイルは/opt/blog/に配置します。\nまた、CentOS7 自体には python2 系のパスが通ってしまっているため、\nvenv で Python3 系の仮想環境を作って、その上で Django のプロジェクトを動かします。\n[tenn25@ip-10-0-0-51 blog]$ pwd /opt/blog [tenn25@ip-10-0-0-51 blog]$ sudo python3.6 -m venv py36 [tenn25@ip-10-0-0-51 blog]$ ll 合計 0 drwxr-xr-x. 5 root root 74 10月 21 21:01 py36 [tenn25@ip-10-0-0-51 ~]$ source py36/bin/activate (py36) [tenn25@ip-10-0-0-51 ~]$ (py36) [tenn25@ip-10-0-0-51 ~]$ sudo chown tenn25:tenn25 py36 -R (py36) [tenn25@ip-10-0-0-51 ~]$ ll 合計 0 drwxr-xr-x. 5 tenn25 tenn25 74 10月 21 01:51 py36 (py36) [tenn25@ip-10-0-0-51 ~]$ pip install django gunicorn psycopg2 Pillow Installing collected packages: pytz, django, gunicorn, psycopg2, Pillow Successfully installed Pillow-5.3.0 django-2.1.2 gunicorn-19.9.0 psycopg2-2.7.5 pytz-2018.5 Django プロジェクトを作成 インストールができたので、Django のプロジェクトを作成します。\nコンソールの左に(仮想環境名)が表示されてる状態で行います。\n仮想環境の起動は source [インストールパス]/py36/bin/activate\n仮想環境の停止は deactivate です。\n(py36) [tenn25@ip-10-0-0-51 ~]$ django-admin startproject blog (py36) [tenn25@ip-10-0-0-51 ~]$ ll 合計 0 drwxrwxr-x. 3 tenn25 tenn25 35 10月 21 02:03 blog drwxr-xr-x. 5 tenn25 tenn25 100 10月 21 01:55 py36 プロジェクトファイルを編集 プロジェクトルートの名前も blog にしてしまったせいで\n階層が非常にわかりづらくなってしまった。。\n/opt/blog は自分で作成した作業ディレクトリです。\nその下に Django プロジェクト[blog]を作成しました。\n(py36) [tenn25@ip-10-0-0-51 blog]$ pwd /opt/blog (py36) [tenn25@ip-10-0-0-51 blog]$ sudo vi blog/blog/settings.py 以下の 3 項目を編集 今回は Postgresql を使うので ENGINE は以下のように記載する。\nALLOWED_HOSTS = [\u0026#39;tenn25.com\u0026#39;] LANGUAGE_CODE = \u0026#39;ja\u0026#39; TIME_ZONE = \u0026#39;Asia/Tokyo\u0026#39; DATABASES = { \u0026#39;default\u0026#39;: { #\u0026#39;ENGINE\u0026#39;: \u0026#39;django.db.backends.sqlite3\u0026#39;, \u0026#39;ENGINE\u0026#39;: \u0026#39;django.db.backends.postgresql_psycopg2\u0026#39;, #\u0026#39;NAME\u0026#39;: os.path.join(BASE_DIR, \u0026#39;db.sqlite3\u0026#39;), \u0026#39;NAME\u0026#39;: \u0026#39;blog\u0026#39;, \u0026#39;USER\u0026#39;: \u0026#39;tenn25\u0026#39;, \u0026#39;PASSWORD\u0026#39;: \u0026#39;**********\u0026#39;, \u0026#39;HOST\u0026#39;: \u0026#39;localhost\u0026#39;, \u0026#39;PORT\u0026#39;: \u0026#39;\u0026#39;, } } マイグレーションを実施 アプリケーションで使うデータベースの定義を自動的に作成して DB に反映する機能を migration と言うらしい。\nmakemigration→migrate の順に行う。\n(py36) [tenn25@ip-10-0-0-51 blog]$ pwd /opt/blog/blog (py36) [tenn25@ip-10-0-0-51 blog]$ ls blog manage.py (py36) [tenn25@ip-10-0-0-51 blog]$ python manage.py makemigrations /opt/blog/py36/lib64/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use \u0026#34;pip install psycopg2-binary\u0026#34; instead. For details see: \u0026lt;http://initd.org/psycopg/docs/install.html#binary-install-from-pypi\u0026gt;. \u0026#34;\u0026#34;\u0026#34;) No changes detected エラーが出たので、[psycopg2-binary]をインストール。 (py36) [tenn25@ip-10-0-0-51 blog]$ pip install psycopg2-binary 再度マイグレート準備 (py36) [tenn25@ip-10-0-0-51 blog]$ python manage.py makemigrations No changes detected マイグレート実施 (py36) [tenn25@ip-10-0-0-51 blog]$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK 一旦 Python 内蔵サーバで Web アプリケーションを起動 アプリケーションサーバをいれなくても、\nPython 自体にその機能がある。一旦それで起動。\n(py36) [tenn25@ip-10-0-0-36 blog]$ python manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). October 21, 2018 - 02:33:54 Django version 2.1.2, using settings \u0026#39;blog.settings\u0026#39; Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. 動作確認\n[IP 直打ちの:8000 番ポート] へアクセス →OK!!! 4. Django の設定 # Django アプリケーション上の Admin ユーザを作成 Django には元から Web ページの管理者用ページが用意されている。\nその管理者ユーザを作成する。\nDjango は manage.py からいろんな作業を行う。\nmanage.py がある階層で以下のコマンドを実行。\n(py36) [tenn25@ip-10-0-0-51 blog]$ python manage.py createsuperuser ユーザー名 (leave blank to use \u0026#39;*****\u0026#39;): ********** メールアドレス: **********@*****.*** Password: Password (again): Superuser created successfully. Admin 画面に入れることを確認 5. Gunicorn での起動 # 次はアプリケーションサーバの gunicorn つかう。\nフォルダ内の wsgi.py を使うという指定をする\n(py36) [tenn25@ip-10-0-0-51 blog]$ which gunicorn opt/blog/py36/bin/gunicorn (py36) [tenn25@ip-10-0-0-51 blog]$ gunicorn --version gunicorn (version 19.9.0) (py36) [tenn25@ip-10-0-0-51 blog]$ pwd /opt/blog/blog/blog (py36) [tenn25@ip-10-0-0-51 blog]$ gunicorn --bind 0.0.0.0:8000 blog.wsgi [2018-10-21 21:15:36 +0900] [1484] [INFO] Starting gunicorn 19.9.0 [2018-10-21 21:15:36 +0900] [1484] [INFO] Listening at: http://0.0.0.0:8000 (1484) [2018-10-21 21:15:36 +0900] [1484] [INFO] Using worker: sync [2018-10-21 21:15:36 +0900] [1487] [INFO] Booting worker with pid: 1487 ブラウザから動作確認\nAdmin ページの CSS が適用されない。\nアプリケーションサーバが変わって、\b ルートディレクトリが変わったからっぽい。\nDjango の static ファイルの扱いがなんか難しい。あとで調整しよう。\ngunicorn\b の自動起動設定\n.service ファイルを作ってサービスとして登録しよう\n(py36) [tenn25@ip-10-0-0-51 ~]$ sudo vi /etc/systemd/system/gunicorn.service [Unit] Description=gunicorn daemon After=network.target [Service] User=tenn25 Group=tenn25 WorkingDirectory=/opt/blog/blog ExecStart=/opt/blog/py36/bin/gunicorn --access-logfile - --workers 3 --bind 0.0.0.0:8000 blog.wsgi:application [Install] WantedBy=multi-user.target いったん上記の設定をして確認しよう。\n注意点として、blog.wsgi というのは[blog/wsgi.py]を意味している\nwsgi.py へのパスが通るように /opt/blog/blog/blog/wsgi.py となるように WorkingDirectory にも注意すること。\nサービスの再読み込みと自動起動設定 [tenn25@ip-10-0-0-36 system]$ sudo systemctl daemon-reload [tenn25@ip-10-0-0-36 system]$ sudo systemctl restart gunicorn [tenn25@ip-10-0-0-36 system]$ sudo systemctl enable gunicorn [tenn25@ip-10-0-0-36 system]$ sudo systemctl status gunicorn ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: disabled) Active: active (running) since 日 2018-10-21 12:36:40 JST; 9s ago 問題なければ、bind をソケットファイルに変更しよう。\nWeb サーバとアプリケーションサーバは同じサーバを想定してるので、http ではなく、\nUnix ドメインソケットを使ったサーバ内部のソケット通信にすることで、通信速度が早くなる。\n(gunicorn はこれに対応している。)\nそのために、上記の bind 設定を以下のように変更する。\n# ExecStart=/opt/blog/py36/bin/gunicorn --access-logfile - --workers 3 --bind 0.0.0.0:8000 blog.wsgi:application ExecStart=/opt/blog/py36/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/tenn25/blog/blog.sock blog.wsgi:application こうすることで、8000 番ポートは使わずに 80 番 →Nginx→Unix ドメインソケット →gunicorn\b という流れになる。　サービスファイルを変更したら、改めて systemctl で再読み込み/再起動をしよう。\n6. Nginx 経由でアクセスするための設定 # 元の設定ファイルは要らないので反映されないようにする cd /etc/nginx/conf.d/ sudo mv default.conf default.conf.org sudo cp default.conf.org blog.conf blog.conf を編集 upstream app_server { server unix:/opt/blog/blog/blog.sock; } server { listen 80; server_name www.tenn25.com; location = /favicon.ico {access_log off; log_not_found off;} location / { include proxy_params; proxy_pass http://app_server; # proxy_pass http://localhost:8000; ←8000番でgunicornが受ける場合はこう } } ソケット通信をするには proxy_params モジュールのインポートが必要\nproxy_params が無い場合は作成 $vi /etc/nginx/proxy_params proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; https://webcurtaincall.com/articles/1\n7. 詰まったところ # nginx と gunicorn は同じ実行ユーザで!!!\nSELinux によるエラー\n安易な SELinux 無効化は反対なんだけど、エラー出るしうまく回避できなかったので、慈悲はなかった・・・・\n(py36) [tenn25@ip-10-0-0-51 nginx]$ sudo cat /var/log/audit/audit.log | grep nginx | grep denied type=AVC msg=audit(1540124576.312:226): avc: denied { name_connect } for pid=1618 comm=\u0026#34;nginx\u0026#34; dest=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket type=AVC msg=audit(1540124576.312:227): avc: denied { name_connect } for pid=1618 comm=\u0026#34;nginx\u0026#34; dest=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket type=AVC msg=audit(1540124719.818:241): avc: denied { name_connect } for pid=1618 comm=\u0026#34;nginx\u0026#34; dest=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket type=AVC msg=audit(1540124719.818:242): avc: denied { name_connect } for pid=1618 comm=\u0026#34;nginx\u0026#34; dest=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket 階層間違えやすいから注意 どこのパスを示してるのかは、常に注意すること。\nここまでで、各サービス再起動してあげればブラウザの 80 番ポートからアクセスできるはず。\nお疲れ様でした。\n","date":"2018-10-27","externalUrl":null,"permalink":"/blog/mezzanine%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E4%BD%9C%E6%88%90-1-%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/","section":"記事一覧","summary":"","title":"Mezzanineでブログ作成 1.サーバ構築","type":"blog"},{"content":"3 日目。大満足でした。\nサーバーレスアーキテクチャ # Azure のサーバーレスサービスにも色々あるが、\nそれぞれの使いわけやコンポーネントの分け方が難しい。\n「これをやるには、このサービスを使わないといけない」というのはないので\n適材適所でベストな物を選択する必要がある。\nまずは LogicApps をベースに使ってくのが良さそう。\nプログラミングしなくても、ループや条件分岐を含めながら、\n様々な Azure リソースを繋いでワークフローを作成できる。\nGUI による設定なので、文字列と変数アイコンが混在する独特な見た目。\n正直、最初は非常にとっつきにくい。これはこれでつらい。\n文字列操作や関数を使うときに記述方法がわからず、みんな躓くと思う。\n（公式リファレンスをくまなく読み込むと分かってくる気がする）\nノウハウとしては、\nLogicApp で難しそうな処理を FunctionApp として外に出して\nLogicApp から呼び出してあげると良さそう。\n非同期処理や、複数処理を待機するような処理は悩むが、\nLogicApp の Batch message でフロント、バックエンドと処理を 2 つに分けたり\nDurable Function を使うと実現できそうだった。\n(参考：Azure Logic Apps でのメッセージの送信、受信、バッチ処理)\nhttps://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-batch-process-send-receive-messages\nとは言え、これも方法が色々考えられそうなので、適材適所。\nそれぞれのサービスの得意不得意を抑えると良い判断ができそう。\n正直 AWS にも全然負けてないと思う。\nEventGrid、EventHub、Logic App、FunctionApp あたりは\n研究の余地ありだと思いました。\nOpenHack、行ってよかったです。\n","date":"2018-10-25","externalUrl":null,"permalink":"/blog/ms-open-hack-3-%E6%97%A5%E7%9B%AE/","section":"記事一覧","summary":"","title":"MS OpenHack3日目","type":"blog"},{"content":"昨日に引き続き。Azure まみれな日々。\nAzureDevOps の仕様変更に怯えないために # AzureDevOps(旧 VSTS)は 3 週間周期くらいで UI や機能のアップデートがかかる。\nたまに UI の変化っぷりがえげつないので、完全に使い方が分からなくなる。\nそんな時は、Twitter で愚痴らず右上の自分のアイコンから[Preview Features]を開こう。\n該当の新機能を OFF にすれば、とりあえず前の UI に戻る。\n本機能として取り込まれる前に使い方を確認するべき。\n仕様変更とは別で、Azure 界隈は UI 上のバグもたまにある。。\n今日は AzureDevOps のビルドパイプライン作成中に不具合らしいものと遭遇した。\nテンプレートからパイプラインを作ったところ、プルダウンメニューに表示されるはずのものが出なかった。\n手動で作り直したら大丈夫だったので、\nテンプレートを選択してある程度の型が構築されるような機能は気をつけたほうがいいという知見を得た。\nAppInsights のデータ分析 # AWS でいう CloudWatch みたいなやつ。ただ、取れる情報の幅がかなり広い。\n個人的に Azure で一番評価されるべきだと思ってる(運用目線でかなり頼りになる)\n何もしなくてもグラフィカルにいろんなデータが取れるが、\nAppInsights ＞概要＞分析　から、KQL という独自のクエリ言語で好きにログ分析する方法を学んだ。\n今回 FunctionApp の監視ログに対して実行した例\n10 時間以内に実行された Function ごとの実行回数と、平均実行時間を棒グラフで表示。\nrequests | project timestamp, name, duration | where timestamp \u0026gt; ago(3d) | summarize count() ,avg(duration) by name| render … kind=unstacked\n公式で解説動画が無料で見れるらしい。英語だけど\nhttps://azureupdatesj.wordpress.com/2018/07/24/free-query-language-course-la-ai/\nいまいち、句ごとに|が入る記法に納得いかない w\nAPI Management による API 管理 # AWS でいう API Gateway みたいなやつ。\nエンドポイントがバラバラの LogicApps や AppFunction などを\nREST API チックにまとめることができる。(フロントエンドとバックエンドの紐付けをして整理整頓する感じかな)\nSwagger でインポート、エクスポートできるあたりは他と一緒。\n特別ここが凄い！と思った点は今の所ないのだけど、Azure は FunctionApp が強いのでそれらを使ってくなら必然的に使うことになると思う。\nDurable Function について # AWS でいう、Lambda みたいなやつ。\nLambda わかる人は以下の公式ドキュメントの図だけで良いので流し見してほしい。\nhttps://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-overview\n基本的に Funtion は 1 機能(数秒から数分)を処理するのみだけど、\n複数の処理を簡単に繋げる仕組みが備わってる。全体で数時間かかるような一連の処理も作成できそう。\n・関数チェーン…A→B→C という決まった順序で複数実行する。\n・ファンイン/ファンアウト…A,B,C すべて終わったら D を実行するという処理が作れる。\n・非同期 HTTP API…時間のかかる処理を非同期で行うことができる。\n参考： https://blog.shibayan.jp/entry/20180130/1517301227\n・監視…特定の条件を満たすまでポーリングする。\n・人による操作…人間の「承認ボタンポチー」を Function と Function の間に挟める。\nこういうピタゴラスイッチってお手製だと大変だったけど\n中身のロジックだけ作れば良くなるので楽だし、できることの幅も広がった。\n","date":"2018-10-24","externalUrl":null,"permalink":"/blog/ms-open-hack-2-%E6%97%A5%E7%9B%AE/","section":"記事一覧","summary":"","title":"MS OpenHack2日目","type":"blog"},{"content":"MS OpenHack に行って来た。\nMicroSoft の外人イケメンエンジニアが付いてくれてアドバイスをもらいながらチームで課題を解決していくスタイル。\nAzure の FunctionApps と LogicApps について # FunctionApp は AWS Lambda みたいな FaaS のサービス\n言語は基本的に C#,JavaScript とか他プレビューの言語もあるけど C#一択だと思う。\nLambda のような従量課金プランもあるけど、暖気に時間がかかるという点は一緒。\nAppService の中の１機能なので WebApps(IIS の PaaS サービス)と同じように AppService プラン上で実行することもできる。\nこっちの方が起動が速いんだと思う(未検証)。ただしこっちは時間制で常時課金されてく。\nトリガーは Timer Trigger、HTTP Torigger など複数から選択する。\nVSCode に Extention を入れることで簡単にローカルのデバック実行可能。\nAzure 上へのデプロイも VSCode から可能。便利。\nPOST の動作確認は何かしらツールを使って確認するといい。Postman とか。\nLogicApp は、Function やそれ以外の処理などを GUI 上で繋げるような形で一連のロジックを形成できる。\n今回は、[リクエストの受付]→[FunctionApp の実行]→[レスポンスを加工して返す]\nという 3 ステップのロジックを組んで、LogicApp から Function を呼べた。\nちょっと操作に癖があるので最初とっつきにくい。\n慣れればとても簡単に組めると思う。\nVSCode と Azure の連携 # VScode は[Command]+[Shift]+[L]で色々なコマンド操作ができる。\nAzure の Extention を入れてサブスクリプションと連携しておけば\nAzure:とか AzureFunction:と打つと Azure に対しての操作ができる。\nサブスクリプションの連携を切るときも[Azure: Sign Out]で可能。\nAzureDevOps の Git を使う。Clone から Push まで # AzureDevOps は、Wiki と Git と CI ツールとタスク管理がオールインワンになったすごいやつ\nそこに Git リポジトリを作成。\nAzureDevOps にアクセスするユーザ作って権限は Basic にしとこう。\nWindows の人は HTTPS で Clone できたけど、\nMac 勢は SSH 公開鍵を登録して git@のパスで Clone した。\n$ git clone git@ssh.dev.azure.com:v3/[組織名]/[プロジェクト名]/[リポジトリ名]\nAzureDevOps の Git のパスは ↑ みたいな構成になってる。\nコマンドを打ったディレクトリの直下に[リポジトリ名]のフォルダが作られる。それと同じ階層に.git も作成される。\nメモ：Git のコマンド # ごちゃごちゃやってて一度.git ファイルが壊れてしまったので\n.git を消して以下の通りやり直した。\n普段 GUI なので CLI からだと全く分からなくて助けてもらった・・\nここら辺は最低限コマンド覚えときたい・・\n$ git init\nこのコマンドでリポジトリフォルダの直下に.git が改めて作られる。\n$ git add .\n以下の階層のファイル全てをステージングへあげる。\nアスタリスクだっけと思ったらドットだった。\n$ git status\n状況をみたい時はこのコマンドで逐一確認。\n$ git commit -m \u0026ldquo;Create Rating\u0026rdquo;\nコミット時はコメント必須だった。message の m なんだろうか・・\n$ git remote add origin git@ssh.dev.azure.com:v3/[組織名]/[プロジェクト名]/[リポジトリ名]\n.git 削除したので Clone 先が分からなくなってる。\nリモートリポジトリを再度指定。\n$ git push -u origin master\n初回だったので Origin の master ブランチに push\n","date":"2018-10-23","externalUrl":null,"permalink":"/blog/ms-open-hack-1-%E6%97%A5%E7%9B%AE/","section":"記事一覧","summary":"","title":"MS OpenHack1日目","type":"blog"},{"content":" ・Mezzanine への GoogleAnalytics の導入 # Mezzanine Blog に Google Analytics タグ を組み込む\nhttp://tk2-202-10693.vs.sakura.ne.jp/blog/mezzanine-blog%E3%81%AB/\nsettings.py に 1 行追加するだけ。\nGOOGLE_ANALYTICS_ID= \u0026lsquo;***\u0026rsquo;\nAnalyticsID=トラッキング ID のこと。UA から始まる ID。\ngunicorn(アプリケーションサーバ)再起動だけしたらアクセス検知できてた。簡単。\n・VSCode で AzureFunction を開発する準備 # https://code.visualstudio.com/tutorials/functions-extension/getting-started\nMac なので brew でローカル実行環境をインストール。\nCode の拡張で「AzureFunction」「C#」が必要。C#入れないとデバッグでこける。\nAzure Function は秒単位の cron 指定が可能\nVSCode 上から Function のプロジェクト選んで、TImer 以外にもトリガーが選べる。\nF5 でデバック実行\nConsole にアクセス URL が発行された。デフォルトプロジェクトなので GET でパラメータ渡してアクセス。\nルートディレクトリの画面こんなん。実際の AppFunction そのまんま\nローカル実行できるのは便利だな\n","date":"2018-10-23","externalUrl":null,"permalink":"/blog/mezzanine%E3%81%AB-ga%E5%B0%8E%E5%85%A5-%E4%BB%96-azure%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/","section":"記事一覧","summary":"","title":"MezzanineにGA導入-他Azureあれこれ","type":"blog"},{"content":"Python 製 CMS「Mezzanine」でブログをはじめました！\nUdemy で Django の講座を受けはじめて 2 週間くらい経ってしまったし、\nいろいろ力不足で構築までかなり手こずった・・・\nひと段落したら手順とか諸々まとめるつもりです。\nこのブログを作りながら、AWS,Linux,Python,DB,HTML,CSS とかとか\nサーバサイドからフロントエンドあたりまで手広く勉強したいです。\n(まだテーマの変え方すらよくわかってない)\n","date":"2018-10-22","externalUrl":null,"permalink":"/blog/hello-mezzanine/","section":"記事一覧","summary":"","title":"Hello Mezzanine!!","type":"blog"}]