「The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.」の対処方法

SQL Serverで以下のエラーが発生した場合の対処方法になります。

メッセージ 242、レベル 16、状態 3、行 1

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.

 

環境

SQL Server 2019(RDS)

 

対応

・接続ユーザーの規定言語を「Japanese - 日本語」とする

 

手順

1、SSMSを起動する

2、「セキュリティ ⇒ ログイン ⇒ 対象のユーザー」を選択し、右クリックし、「プロパティ」をクリックする

 

3、左ペインから「全般」を選択し、既定の言語を「Japanese - 日本語」として、「OK」ボタンを押下する


以上になります。

 

[参考]

stackoverflow.com

 

Windows Server 2019でFTPSを利用する手順

Windows Server 2019でFTPSを利用する手順になります。

いろんなサイトを参考にしたのですが、自分の環境では正しく動作しなかったので、備忘録として残します。

結果から言うとFTPの設定変更を反映させるには、

「自分で Microsoft FTP Service サービスを再起動する」

というのを知らなかったので、路頭に迷いました。

 

サービスの再起動をしなかったので、

WinSCP接続時にずっと以下のエラーで悩んでいました。

ディレクトリ '/' のリスト取得のエラー

Server cannot accept argument

ディレクトリの一覧を取得できません。

 

Windows Server 2019でFTPSを設定し、WinSCPで接続する手順を説明します。

 

前提

Windows Server 2019(AWSのEC2を利用)

IISは10.0

IISを利用して、FTPできる環境は設定済

Windows Server 2019のファイアウォールは無効

 ※無効にできない場合は必要なポートのみ穴あけする

 

以下、FTPの設定方法です。

blog.denet.co.jp

 

構築概要

1、SSL証明書を作成&設定

2、FTPS設定

3、WinSCPの設定(特別な設定は無いです)

4、まとめ

 

手順

1、SSL証明書を作成&設定

1-1、IIS マネージャーを起動し、左ペインからサーバーを選択し、サーバー証明書 をダブルクリックする。

 

1-2、「自己署名入り証明書の作成...」をクリックする。

 

1-3、フレンドリ名には任意の名前を入力し、「OK」ボタンを押下する。

 

SSL証明書が作成されます。

 

■補足

ここで作成すると有効期限が1年になります。

PowerShellから「New-SelfSignedCertificate」で自己署名証明書を作成すれば、有効期限を自由に設定できます。(有効期限10年とか)

詳しくは以下のサイトを参照

自己署名証明書を作成する方法 | 4thsight.xyz

 

1-4、サイトを選択し、「FTPSSL 設定」をダブルクリックする。

 

1-5、「1-3」の手順で作成したSSL証明書を選択し、「SSL接続が必要」を選択し、右側にある「適用」をクリックする。

■ 補足
SSLポリシーは、FTPも利用したい場合は「SSL接続を許可する」を選択する

セキュリティ強化のため、「SSL 接続に 128ビット暗号化を利用する」のチェックは入れておいた方が良さそう

 

2、FTPS設定

2-1、サーバーを選択し、「FTPファイアウォールのサポート」をダブルクリックする。

 

2-2、任意のポートを指定(今回は「5678」とする)「適用」をクリックする。

「5678」ポートを利用するため、データチャネルポートには「5678-5678」を入力

 

2-3、サービスを起動し、「Microsoft FTP Service」を選択し、再起動をクリックする。

ここで再起動しないと、手順2-2の設定が反映されないので、再起動は必須。

 

2-4、この環境はAWSのEC2を利用しているため、セキュリティグループに「5678」のポートを空ける

 

3、WinSCPの設定

特別な設定はないので、簡単な手順で。

3-1、「明示的なTLS/SSL暗号化」を選択し、接続情報を入力し、接続する。

 

デフォルトなので設定不要ですが、「パッシブモード」で接続します。

 

3-2、初回だけ警告ができるので、「はい」ボタンを押下する。

 

3-3、接続することができました。

 

手順としては以上になります。

 

4、まとめ

FTPの設定変更は「Microsoft FTP Service」 サービスを再起動して反映される

・FTPSはパッシブモードで接続する

 

個人的には22ポートを利用するSFTPの方が良いのかなと思っています。

Windows Server 2019でSFTPを利用する手順は以下になります。

rikues2012.hatenablog.com

 

 

参考にさせて頂いたサイト

FTP サーバーで FTPS を設定する (Windows Server) - FTP - ソーサリーフォース

FTP 7.5でPASV ポートを指定する - サーバ

SFTPでFSx for Windows File Server内のファイルを更新する

はじめに

Amazon FSx for Windows File Server(以下 FSx)をコンテンツサーバとして利用し、運用者がSFTPを使用し、FSxにファイルをアップデートできるようにします。

以下、要件です

・ローカル環境からWinSCPを使って、FSx内のファイルを更新したい

WinSCPはSFTPを利用してセキュアに接続したい

前提

・EC2は Windows Server 2019を利用

・FSx、ADは作成済

・EC2はドメインに参加済

・AD管理用のEC2を作成済(AD管理ツールのインストールが必要)

 

EC2のドメインの参加手順は以下の手順3~4を参照

IISからFSx for Windows File Server内のファイルを参照する

 

AD管理ツールのインストールは以下を参照

【AWS Managed Microsoft AD】AD管理ツールをインストールして管理者権限を持つユーザでログインする - サーバーワークスエンジニアブログ

 

構成図

※Direct Connectで接続し、構成をマルチAZにしても、同じ手順でできます

 

構築概要

1、EC2(AD管理):ADにSFTPで利用するユーザーを作成

2、EC2(SFTP接続用):OpenSSHインストール

3、EC2(SFTP接続用):シンボリックリンク作成

4、ローカルPC:WinSCPの設定をして、FSxのファイルを更新

 

手順

1、ADにSFTPで利用するユーザーを作成

 1-1、EC2(AD管理)にAD管理ユーザーにてRDPする

※本環境では「Admin@sftp.local」がAD管理ユーザです

 

 1-2、管理ツールの中から「Active Directoryユーザーとコンピューター」を起動し、左ペインにある「Users」(赤枠)を選択する

 

 1-3、右クリックして、「新規作成」-「ユーザー」を選択する

 

 1-4、以下を設定し、「次へ」ボタンを押下する

   ※本手順ではユーザー名を「sftptest」とする

 

 1-5、パスワードを設定し、「次へ」ボタンを押下する

   ※画像は省略

 1-6、「完了」ボタンを押下する

   ※画像は省略

 1-7、ユーザが追加されたことを確認する

 

2、OpenSSHインストール

 以下の手順を参照(サービスの自動起動も設定すること)

t-dilemma.info

 

3、シンボリックリンク作成

 3-1、EC2(SFTP接続用)にRDPでログインし、FSxに接続できることを確認

※もし無い場合はフォルダとファイルを作成

 3-2、EC2内にフォルダを作成

   ※ここでは「C:\ftptest」を作成

※新規で作成せず既存のフォルダでもOK

 

 3-3、シンボリックリンク作成(コマンドプロンプトを管理モードで起動)

   「C:\ftptest\DATA」を「\\xxxxx.sftp.local\share」のシンボリックリンクとする

mklink /d C:\ftptest\DATA \\xxxxx.sftp.local\share

 

 3-4、シンボリックリンクが作成されたことを確認

 

これであとはWinSCPから接続するだけです。

 

4、WinSCPの設定をして、FSxのファイルを更新

 特別な設定は不要なのですが、手順を記載します

 4-1、必要な情報を入力し、「ログイン」ボタンを押下する

 

 4-2、シンボリックリンクを作成したフォルダに移動し、更にFSx内のフォルダに移動

 

 4-3、PC内にある「bbb.txt」をFSxにアップロードする

 

これでFSxのファイルも参照できましたし、ファイルも更新することができました。

Flutterで知識0からスマホアプリを作成する

Flutterの勉強からスマホアプリのリリースまで実施したことを纏めます。

今年に入ってReact、Pythonなど始めたのですが、どれも中途半端に終わったので、今回はAndroid版でリリースするぞ」と目標を掲げました。

 

以下、今回リリースしたアプリです。

play.google.com

 

以下、概要になります。

  1. 作成するアプリを決めて、作成期間を決める
  2. まとめサイトで勉強
  3. アプリ開発
  4. アプリリリース(Android版)

 

以下、詳細になります。(そんなに細かくないです)

1、作成するアプリを決めて、作成期間を決める

自分が日常で使いたいと思うアプリがあればそれを作るのが一番良いです。

もし何もなければ勉強用として電卓のようなアプリでも良いと思います。

まずはFirebaseやAWSを利用せず、スマホ内のローカルのみで動作する簡単なアプリが良いと思います。

期間は勉強時間も含め、モチベーションが続く1か月以内に。

私は3週間に設定しました。

1日2時間で週5回ぐらい時間を使ったので、30~40時間ぐらい。

 

2、まとめサイトで勉強

1週間ぐらい勉強しました。

以下の2つが分かりやすかったです。

zenn.dev

www.flutter-study.dev

 

どちらのサイトも最後まで勉強すると時間がかかり、途中で嫌になります。

「Flutter実践入門」の「Chapter 15 04.アプリの実装例」まで1週間勉強しました。

「Chapter 06」で環境構築するので、「Chapter 07」からは手を動かしながらプログラミングしていきます。

自分が作る予定のアプリで必要な機能はじっくり勉強し、利用しない機能はサラッと読みました。

「Flutterで始めるアプリ開発アプリ開発時に少し勉強することになりました。

 

3、アプリ開発

約2週間ぐらいかかりました。

勉強時は理解していたつもりでしたが、Widgetで画面を作ることに躓きました。

以下のサイトで「3. WidgetでUIを作る」で必要な箇所を再勉強。

Widgetとは | Flutterで始めるアプリ開発

画面さえ何となくできれば、あとはネットで調べながら作ることができました。

1日だけ会社を休んで、一気に作成しました。

 

4、アプリリリース(Android版)

はじめに以下を読んでリリースしようと思いました。

01.リリースの準備|Flutter実践入門

細かくて実施する項目が多いので、ざっくりしたサイトを参考にしました。

「GooglePlayでは「携帯電話」「7インチタブレット」「10インチタブレット」でそれぞれ16:9のスクリーンショットが最低2つずつ必要になります。」

上記の記載もありましたが、「携帯電話」などどれか1つのスクリーンショットだけあれば、リリースはできます。

アイコン未設定でもデフォルトアイコンで良いですし。

 

以下のサイトを中心に読みながら、リリースできました。

【2022年最新】Flutter製AndroidアプリをPlayストアにリリースするまでの手順を徹底解説! | 徒然なるままに技術

 

上記のサイトだと細かいところの記載が無く迷ったときは以下のサイトで確認

Flutterでリリースビルドする方法【Flutter, Android Studio, Windows】 | enoiu

 

リリースしましたが、ステップ数以上に警告がめっちゃ出ています。。

それでも問題無く動作はしています。

 

5、まとめ

自分が作ったアプリがスマホ上で動作すると素直に嬉しいです。

「何かアプリ作りたいな~」と思っていたのですが、1歩が踏み出せず。。

「作成したいアプリと作成までのスケジュール」を決めれば、進んでいくだけです。

 

いずれは収益化できるようなアプリを作りたいです。

 

クロスプラットフォームなのでiOS版もリリースしようかなと思っています。

 

以上になります。

Amazon RDSにプライベートIPで接続する方法(非推奨)

Amazon RDSにIPアドレスを指定して、ローカルPCから接続したいという要望がありました。

今回サーバ移行のプロジェクトで移行前がEC2上にDBサーバがあったので、そういう要望が出たのかなと思います。

EC2ならIPアドレス(グローバル、プライベート)は固定できるので。

 

以下、Amazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

SQL Server 2019 Standard Edition

 ※MYSQLや他のDBでも同じですが、今回はSQL Serverで確認

 

ローカル環境はAWS Direct ConnectでAWSVPCと接続されているので、プライベートIPで接続はできそうです。

以下、接続のイメージです。

[参考(AWS公式サイト)]

VPC の DB インスタンスにアクセスするシナリオ - Amazon Relational Database Service

 

以下、結論になります。

・プライベートIPではなく、RDSのエンドポイントで接続することが推奨

・プライベートIPでRDSに接続はできる

・プライベートIPは固定できないので、プライベートIPの接続は非推奨

※RDSのエンドポイントは「XXXX.ap-northeast-1.rds.amazonaws.com」のようなURLみたいなものです。

 

以下のパターンでプライベートIP(EIPも同様)は変更されます。

[参考(AWS公式サイト)]

RDS インスタンスに割り当てられた IP アドレスに関連する問題のトラブルシューティング

 

前置きが長くなりましたが、

Amazon RDSにプライベートIPで接続する方法になります。

 

1、RDSのプライマリのAZを確認

「ap-northeast-1a」になります。

 

2、ネットワークインターフェースでプライベートIPを確認

 EC2サービスの「ネットワーク&セキュリティ ⇒ ネットワークインターフェース」

 今回はRDSのセキュリティグループと説明(説明 = RDSNetworkInterface)で検索

AZが「ap-northeast-1a」のプライマリプライベートIPアドレスが接続するIP

「192.168.20.133」になります。

ちなみにセカンダリプライベートIP(192.168.20.15)でも接続は可能です

 

3、ローカルから接続確認

① SSMSから接続確認

 サーバー名に「192.168.20.133,1433」を入力し、「接続」ボタンをクリック

 「プライベートIP + ,(カンマ)+1433SQL Serverなので)」

 

ODBCから接続する方法

 Serverに「192.168.20.133」を入力し、「完了」ボタンをクリック

 

以上になります。

 

↓関連記事です。

 

以下、推奨されているRDSのエンドポイントで接続方法です

rikues2012.hatenablog.com

 

以下、RDSのプライベートIPが実際にどの手順で変更になるか?確認した記事です。

rikues2012.hatenablog.com

 

ローカル環境からプライベートサブネットにあるRDSに接続する

ローカル環境からプライベートサブネットにあるRDSに接続する方法です。

RDSのエンドポイントで接続することが推奨されているので、その手順を作成しようと思ったのですが、設定不要でした。

でも、気になっていたことを書いていきます。

 

以下、Amazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

SQL Server 2019 Standard Edition

 ※MYSQLや他のDBでも同じですが、今回はSQL Serverで確認

 

ローカル環境はAWS Direct ConnectでAWSVPCと接続されています。

以下、接続のイメージです。

[参考(AWS公式サイト)]

VPC の DB インスタンスにアクセスするシナリオ - Amazon Relational Database Service

 

RDSがプライベートサブネットにあって、パブリックアクセスなしでRDSのエンドポイントが指定できるのか?という疑問がありました。

結果、特に何も設定せずにできました。

 

一部隠していますが、赤枠がRDSのエンドポイントです。

「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」

 

以下がRDSのプライベートIPです

「193.168.20.133」

 

 

nslookupでIPを逆引きするとできました!!(特に設定はしていない)

# nslookup RDSのエンドポイント

AWS Direct Connectが接続してない環境でも逆引きできます

 

長くなりましたが、

RDSのエンドポイントで接続することが推奨されているので、その手順となります。

 

設定は。。特に何も必要ないです。

なので、確認のみになります。

 

3、ローカルから接続確認

① SSMSから接続確認

 サーバー名に「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」を入力し、「接続」ボタンをクリック

 

ODBCから接続する方法

 Serverに「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」を入力し、「完了」ボタンをクリック

 

以上になります。

 

個人的に思ったこと

「ローカル環境からプライベートサブネットにあるRDSに接続する方法」をネットで検索してみたのですが、あまりヒットしませんでした。

今となれば「RDSのエンドポイントで接続する」のが当たり前で設定も不要なので、誰も詳しい記事にしていなかったのだと思いました。

私も特に何も考えずパブリックサブネットにあるRDSはエンドポイントで接続していたので。。

 

RDSのパブリックアクセス有無の設定は「ネットワークインターフェース」にパブリックIPを付与するしないだけで。

サブネットはどっち(パブリック、プライベート)にあるかだけで。

どんな設定にしてもRDSのエンドポイントはDNSで逆引きできるので、RDSに接続できる環境ならばRDSのエンドポイントで接続できるってことなんですかね。

 

プライベートにあるインスタンスはなんとなくDNSで逆引きできないのかな?と思っていましたが、気のせいでした。。

 

Amazon RDSのプライベートIPが変更される操作

AWS公式サイトにRDSのIPは変更されるとの記載があったので、実際に試してみました。

 

以下、AWS公式サイトに記載されている内容です。

[参考]

aws.amazon.com

 

以下、試したAmazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

 

以下、試した概要です

1、DBインスタンスの再起動

2、DBインスタンスのフェイルオーバー

3、DBインスタンスインスタンスクラス変更(スペックアップ)

 

以下、詳細です。

1、DBインスタンスの再起動

結果:AWS公式サイト通り、IPは変更されませんでした。

1-1、再起動前のプライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

1-2、再起動(フェイルオーバーなし)

 

 

1-3、再起動後のプライマリプライベートIP

  ap-northeast-1a:192.168.20.133(変更なし)

  ap-northeast-1c:192.168.21.41(変更なし)

 

 

2、DBインスタンスのフェイルオーバー

結果:AWS公式サイト通り、RDSのエンドポイントのIPは変更される

   ただし、RDSのプライマリAZが変更されるだけでAZの1a、1cのIPは変わらない

 

2-1、フェイルオーバー前

  AZ:ap-northeast-1a

 

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

2-2、再起動(フェイルオーバーあり

 

2-3、フェイルオーバー後

  AZ:ap-northeast-1c(AZが変わる)

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133(変更なし)

  ap-northeast-1c:192.168.21.41(変更なし)

 

 

3、DBインスタンスインスタンスクラス変更(スペックアップ)

結果:AWS公式サイト通り、RDSのエンドポイントのIPは変更される

   AZの1a、1cのIPも変更される

   プライマリAZも変更されました。(3回試しましたが、3回とも変更)

公式サイトに「DBインスタンスクラスの更新などの状況により、基盤となるホストが置き換えられます。」とあったので、気になりましたが、全て置き換わりました。

IPだけ変わったのかな。。

 

3-1、スペック変更前

  AZ:ap-northeast-1c

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

3-2、スペック変更(変更中の動作も含む)

 

スペック変更中にネットワークインターフェースがどうなるのか?見てみました。

なんとなく気になったので。。

 

① AZセカンダリ(1a)のネットワークインターフェースが追加

「192.168.20.107」が追加

 

② 元々あった1aのネットワークインターフェースが削除

「192.168.20.133」が削除

ap-northeast-1a:192.168.20.133 ⇒ 192.168.20.107 になる

 

③ AZ-1cのネットワークインターフェースが追加

「192.168.21.177」が追加

 

④ 元々あった1cのネットワークインターフェースが削除

「192.168.21.41」が削除

ap-northeast-1c:192.168.21.41 ⇒ 192.168.21.177 になる

 

2-3、スペック変更後

  AZ:ap-northeast-1c(AZが変わる)

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.107(IPが変わる)

  ap-northeast-1c:192.168.21.177 (IPが変わる)

 

プライベートIDはけっこう変わりますね。

という話になります。

スペック変更時は新しいインスタンスに付け替えているのですね。(たぶん)