FROM ME TO YOU

oh my bizarre life !!

ClickOnce+Nlogでログファイルが生成されない話

レガシーすぎるだろと言われてもWindowsのローカルアプリケーションのデプロイにはClickOnceが便利ってことでちょくちょく使ってます。

今回は本番環境だと問題ないのに、ClickOnceで配信したアプリケーションでNlogのログファイルが生成されなかったので解決メモ。

VSのソリューションエクスプローラーから以下の設定をするだけ。

  • ビルドアクション:コンテンツ
  • 出力ディレクトリにコピー:常にコピー

尚、ClickOnceだとexeの保存先がほぼランダムなので、${basedir} は使わずにfileName="${specialfolder:folder=ApplicationData}/Program/file.txt" みたいにした方がいい。(さっきの例だとここに出力されるC:\Users\\AppData\Roaming\Program\file.txt)

codeday.me

github.com

Entity Frameworkを試す(2)

最近触れてなかったC#をリトライ。

この記事の通りにEntity Frameworkを試してみたんだけど、DBにアクセスできなくて詰まってたのが解消できたのでまとめておく。

kitigai.hatenablog.com

  1. プロジェクトを作成
  2. NugetでEntity Framework(執筆時は6.2.0)をインストール
  3. ADO.NET Entity Data Modelを追加して以下を記述
    public class BooksDb : DbContext
    {

        public BooksDb(): base("name=BooksDb"){}
        public DbSet<Book> Books { get; set; }
        public DbSet<Author> Authors { get; set; }
    }

    public class Book
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public int PublishedYear { get; set; }
    }

    public class Author
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Birthday { get; set; }
        public string Gender { get; set; }
    }

記事内には

Mainのコードは何も書いていないがとりあえず実行 初回はDBの作成等でいつものコンソールアプリケーションの 起動よりは時間がかかる気がするがすぐに完了する。

Visual Studioのメニュー[表示]からSQL Server オブジェクトエクスプローラーを選択 以下の画像のようにDBとテーブルが作成されていることを確認する。

とあったけれど、一向にDBとテーブルが作成されない。 何度かプロジェクトを作り直したけど改善されない。

ただ、Mainに何も書かなくて、どうやってDbContextを継承したBoooksDBが生成されるんだろう?と疑問に思った。 試しにMain側にプログラムを書いてみたところ正常に作成できた。

        static void Main(string[] args)
        {
            using (var EF = new BooksDb())
            {
                EF.Books.Add(new Book
                {
                    Title = "タイトル",
                    PublishedYear = 2019
                });

                EF.SaveChanges();
            }
        }

f:id:fmty_keita:20190703002113p:plain

接続先変更

App.Configのを変更して別サーバーのSQLServerにアクセスできることも確認。

<connectionStrings>
    <add name="BooksDB" connectionString="data source=127.0.0.1;initial catalog=BooksDB;User ID=sa;Password=hogehoge;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

引き続き調べていきたい

  • DataGridViewにデータを表示する
  • Entity FrameworkのDB記述方法(キーの生成やインデックスの貼り方など)

Microsoft 認定試験 「AZ-103 Microsoft Azure Administrator」の試験内容とか

2019年5月1日から新しく始まったAzureの認定資格「AZ-103」の受験を少し考えています。

まだ情報収集レベルですが、調べたことなどを時系列的に書き出してみようかなと思います。

(どんどん追記していきたい)

下調べ(2019年5月13日)

そもそもMicrosoftの認定試験そのものが初めてなので、どんな試験方法なのか、試験範囲はどの程度なのか。試験に向けての勉強はどうすればいいのか、を調べてみました。

blogs.partner.microsoft.com

相変わらず何が書いてあるのかわからないのでウェビナーを受講。

note.microsoft.com

80分くらいのオンラインセッションでした。わかりやすい。具体的な例問題や解答方法を学べたので、試験が具体的にイメージしやすくなった。

  • 旧来試験のAZ-100やAZ-101との関連はウェビナー見たらわかる
  • 合格するとマイクロソフト認定のAzure 管理者アソシエイツの認定が受けられる
  • 従来のAZ-100が廃止される
  • 従来のAZ-101+AZ-102の範囲が新しくAZ-103として設立された
  • AZ-103は日本語!(重要
  • テストは150分、選択問題とAzurePortalの操作が必要。出題数が多いので時間がかなりタイト。
  • 試験は日本円で2万円ちょい。

出題範囲

参考→AZ-103 OD with Alignment to AZ-100 and AZ-101.pdf

試験内容(原文)

  1. Manage Azure subscriptions and resources (15-20%)
    1. Manage Azure subscriptions
    2. Analyze resource utilization and consumption
    3. Manage resource groups
    4. Managed role based access control (RBAC)
  2. Implement and manage storage (15-20%)
    1. Create and configure storage accounts
    2. Import and export data to Azure
    3. Configure Azure files
    4. Implement Azure backup
  3. Deploy and manage virtual machines (VMs) (15-20%)
    1. Create and configure a VM for Windows and Linux
    2. Automate deployment of VMs
    3. Manage Azure VM
    4. Manage VM backups
  4. Configure and manage virtual networks (30-35%)
    1. Create connectivity between virtual networks
    2. Implement and manage virtual networking
    3. Configure name resolution
    4. Create and configure a Network Security Group (NSG)
    5. Implement Azure load balancer
    6. Monitor and troubleshoot virtual networking
    7. Integrate on premises network with Azure virtual network
  5. Manage identitiess (15-20%)
    1. Manage Azure Active Directory (AD)
    2. Manage Azure AD objects (users, groups, and devices)
    3. Implement and manage hybrid identities
    4. Implement multi-factor authentication (MFA)

試験内容(Google翻訳とか意訳とか)

  1. Azureのサブスクリプションとリソースの管理 (15-20%)
    1. Azureサブスクリプションの管理
      管理者権限の割り当てやコストセンターの割り当て。サブスクリプションポリシーなど。
    2. リソースの利用状況とコストの分析
      リソースの診断設定の構成やリソースアラート、LogAnalyticsでのアラートや定期購読アクショングループ、ログ検索クエリなど。
    3. リソースグループの管理
      リソースポリシーの設定、タグ付けやリソースグループの移動や解除など。
    4. ロールベースのアクセス制御(RBAC)
      カスタムロールを作成し、Azureへの管理アクセスの構成、RBACの実装やトラブルシューティングなど。
  2. ストレージの実装と管理 (15-20%)
    1. ストレージアカウントの実装と管理
      ストレージアカウントへのネットワークアクセスの構成、共有アクセスキーの設定、AzureStorageのインストール、LogAnalyticsによるアクティビティログの監視。
    2. Azureへのデータのインポートとエクスポート
      Azureジョブからデータのインポートとエクスポート、BLOBストレージの構成、AzureCDNの構成とエンドポイントなど。
    3. Azureファイルの設定
      Azureファイル共有やAzure File Syncサービスの作成、同期、トラブルシューティングなど。
    4. Azureバックアップの実装
      Azureバックアップやバックアップポリシーの構築と実行。リカバリーサービスバリューの作成及び復元の実行。
  3. 仮想マシンのデプロイと管理 (15-20%)
    1. 仮想マシンWindows and Linux)のデプロイと設定
      高可用性の構成やモニタリング、ネットワークの設定、ストレージ、オートスケールセットの設定など。
    2. 仮想マシンの自動デプロイ
      Azure Resource Manager(ARM)テンプレートの構成、VHDテンプレートの設定とデプロイ。
    3. 仮想マシンの管理
      サイズやデータディスク、ネットワークインタフェースの追加と自動化。PowerShellのDesired State Configuration(DSC)およびVMエージェントを使用した管理。リソースグループの移動、再デプロイなど。
    4. 仮想マシンバックアップの管理
      VMバックアップを構成、バックアップポリシーの定義、VMの復元の実行とAzureサイトリカバリーの設定など
  4. 仮想ネットワーク(VNET)の実装と管理 (30-35%)
    1. VNET同士の接続
      VNETピアリングの作成と構成、仮想ネットワークゲートウェイの作成と接続の確認。
    2. 仮想ネットワークの実装と管理
      プライベートIPアドレス、パブリックIPアドレス、ネットワークルート、ネットワークインターフェース、サブネットの実装と管理
    3. 名前解決の構成
      Azure DNSやカスタムDNS設定の構成。プライベートおよびパブリックDNSゾーンなど。
    4. ネットワークセキュリティグループの作成と管理 (NSG)
      セキュリティルールの作成、サブネットまたはネットワークへのNSGの関連付け、ポート制限やセキュリティルールの評価など。
    5. Azureロードバランサーの実装
      内部及びパブリックなロードバランサーの設定、ロードバランサーのルール設定、トラブルシューティングなど。
    6. 仮想ネットワークの監視とトラブルシューティング
      オンプレミスとの接続の監視、ネットワークリソースの使用監視、ネットワークウォッチャーを利用した仮想ネットワークの監視とトラブルシューティングなど
    7. オンプレミスネットワークとAzureネットワークの統合
      Azure VPN Gatewayの作成と構成、サイト間VPNやExpress Routeの設定、オンプレミスとの接続の確認とトラブルシューティング
  5. ID管理 (15-20%)
    1. Azure Active Directory (AD)の管理
      カスタムドメインの追加、 Azure ADへの参加、セルフサービスの設定、パスワードのリセットと複数ディレクトリの管理。
    2. ユーザー、グループ及びデバイスの管理
      ユーザーおよびグループの作成やプロパティ、デバイス設定の管理。一括でのユーザー更新やゲストアカウントの管理など。
    3. ハイブリッドIDの実装と管理
      パスワードハッシュとパススルー同期を含むAzure AD ConnectのインストールとオンプレミスADとのフェデレーション構成。ディレクトドメインサービス(AD DS)やAD Connectの管理やパスワード同期管理など。
    4. 多要素認証(MFA)を実装
      MFA用のユーザーアカウントの構成と有効化、不正アラートの設定、バイパスオプションの設定、許可IPアドレスの設定や検証方法など

(翻訳疲れた、英語力ほしい)

次のステップ

次はどうやって勉強していくか、ですね。

MicrosoftのLearningBlogには「Microsoft Learnの無料学習コンテンツは、2019年7月1日に完成する予定です」とあったので、少し待機が必要かも? とはいえ待ってるのも時間がもったいないので、MicrosoftLearnの「Azureの基礎」は進めておこうかな。

Azure SQLDatabaseにサービスエンドポイントを追加してVNETからアクセスする

サービスエンドポイントをAzureのSQLDatabaseやStorageといったPaaSサービスをVNETと接続することができます。

パブリックなインターネットを経由せずにVNETからアクセスすることで安全に利用することができます。

docs.microsoft.com

やってみる

①まずはVNET側にサービスエンドポイントを追加し、アクセスするPaaSサービスと接続を許可するサブネットを選択します。今回はサービスは「Micorosoft.sql」を選び、サブネットの1つを選択します。

f:id:fmty_keita:20190513001406p:plain

②次にSQLDatabase側のサーバーファイヤウォール設定から、「既存の仮想ネットワークを追加」します。

f:id:fmty_keita:20190513001840p:plain

これだけ

パブリックインターネット経由からはアクセスできませんが・・・

f:id:fmty_keita:20190513002357p:plain

サブネット上のVMからはアクセスすることができます

f:id:fmty_keita:20190513002158p:plain

本当は

SQLDatabaseへのアクセスにグローバルIPを利用したくないという背景があって、サービスエンドポイントとポイント対サイトVPNを組み合わせたらグローバルIPでファイヤウォールしなくても大丈夫なのでは!?と目論んでたのがあえなく失敗・・・

Microsoft Azureとポイント対サイト(P2S)VPNを構築

前回はAzureと拠点をVPN接続するサイト対サイトVPNを構築しましたが、今回はAzureと端末をVPN接続するポイント対サイトVPNを構築してみました。

前回の記事と参考URL

fmty.hateblo.jp

docs.microsoft.com

docs.microsoft.com

自己署名ルート証明書とクライアント証明書の作成

powershellを開いて以下のコマンドを実行して自己署名ルート証明書の作成

$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-Subject "CN=P2SRootCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign

②そのままpowershellを閉じずに以下のコマンドを実行

New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature `
-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")

自己署名ルート証明書をエクスポート

①ファイル名を指定して実行で「certmgr.msc」を実行して証明書マネージャーを起動

②個人>証明書と開き、先程作成した「P2SRootCert」を右クリックして「エクスポートを選択」

f:id:fmty_keita:20190508003540p:plain

③証明書をエクスポートします。

④「いいえ、秘密キーをエクスポートしません」を選択

f:id:fmty_keita:20190508003615p:plain

⑤「Base-64 encoded X.509 (.CER)」を選択

f:id:fmty_keita:20190508003719p:plain

⑥任意のファイルにエクスポート

仮想ネットワークゲートウェイにポイント対サイトVPNの設定

仮想ネットワークやゲートウェイの構築は前回記事で作成しましたので割愛。

① 仮想ネットワークゲートウェイを開き、「ポイント対サイトの構成」で各情報を入力します

f:id:fmty_keita:20190508004420p:plain

※アドレス プールは既存のVNETのアドレスと重複しないように設定する

②「公開証明書データ」は先程エクスポートしたcerファイルをメモ帳で開き、キーデータをコピー&ペーストします

f:id:fmty_keita:20190508004652p:plain

③設定が完了すれば、「VPNクライアントのダウンロード」を実行します

f:id:fmty_keita:20190508004949p:plain

④64bitOSであれば「WindowsAmd64\VpnClientSetupAmd64.exe」を実行します。

⑤Windows10であれば設定の「VPN」に仮想ネットワーク名と同じVPN設定が生成されていますので接続します

f:id:fmty_keita:20190508005210p:plain

以上で接続が完了しました。

クライアント証明書を作成した端末以外で利用する場合はクライアント証明書のエクスポートと、該当端末へのセットアップが必要です(今回は検証端末がないため手順は割愛します)

かなり簡単に接続設定できますね。

課題

  • SQLDatabaseへVNET経由でアクセスしたい

Azureのアイコンセットを利用してネットワーク構成図を書いてみた

Azureのネットワーク構成図を書くときは標準で提供されているアイコンがあるので便利ですね。

www.microsoft.com

ネットワーク構成図

ということで、この連休中に構築してみたAzureのネットワーク構成図を書いてみました。

VPNを構築した以外は普通のVM構成です。

f:id:fmty_keita:20190506232500p:plain

NSGやストレージアカウントについては載せてません。

ネットワーク構成図を格好良く書けるようになりたい…