くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

AWS

AWS SQLServerのRDSの作成+バックアップとリストア

タイトル通りでハマった・迷ったところのみ記載。


作成

公式のドキュメントに載ってるままなのですが、照合順序の指定は最初からやっておかないとなので、作る時に下記が必要。

aws-sample01

日本語ベースで使うなら上記は必須かな。

あとセキュリティーグループで1433のポート開放しておかないと、SSMSで繋げなくなる。


復元

復元する場合、基本的にS3にバックアップファイル上げて、そこから復元する。

S3にアクセスするために、オプショングループの割り当てとか必要なのですが、その辺がいまいちわからなかった。

  • オプショングループ作成

aws-sample02

  • 追加したグループにオプションの追加

aws-sample03

  • で、ハマったのがここ

IAMロールを先に作らないとダメなのかと思って公式に記載のアレコレやってたのですが、そうじゃなくて、単純に「新しいロールの作成」選べば、よしなにやってくれる。

aws-sample04

  • インスタンスの変更からオプショングループを指定

aws-sample05

  • 復元

S3の所定のバケット内にバックアップファイルをアップロードして、SSMSで作ったインスタンスに接続して下記クエリを実行。

exec msdb.dbo.rds_restore_database 
@restore_db_name='復元後のDB名', 
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name';


バックアップ

バックアップは上記復元の設定が出来てればあとはSQLで下記を実行。

exec msdb.dbo.rds_backup_database
@source_db_name='バックアップ対象のDB名', 
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name';


バックアップ・復元タスクの状況確認

実行したクエリの状況が見たい場合は下記

exec msdb.dbo.rds_task_status

この辺のSQLは公式のこの辺に記載されてるやつを見た方が良い。


あとバックアップの運用について。

スナップショットを自動で取ってはくれるのですが、スナップショットの復元って、必ず別インスタンスに復元されるじゃないですか?

中身のバックアップとってアタッチしたいだけなんだけどなー。

別インスタンスに復元されたところで、アプリのもろもろの設定変えないと意味ないしの。

まーそこから復旧出来るので十分ではあるのかもですが。

DB毎のDaily/Weeklyバックアップ的なのはSQLServerならSQLエージェント側で上記のバックアップSQLとか組んで実行しておくしかないかな?

他にやり方あるのかしら?

AWS instance-connect利用でブラウザでサーバコンソール触れるようにする

タイトル通り。

2年前くらいはこれなかったと思うのですが、いつから出来るようになったんだろ。

Azureはブラウザからサーバコンソールをちょろっと触れたり出来たので、AWSも出来ないかなーと思ってたところ、今見たら出来そうだったのでお試し。ちょっとはまった。

公式のドキュメント

流れ。

  1. セキュリティポリシーの変更
  2. EC2 Instance Connectをサーバ側にインストール
  3. EC2 Instance Connect の IAM アクセス許可を設定する


セキュリティポリシーの変更

今回はまったのがここ。動かない時は下記のエラーメッセージ出る。

We were unable to connect to your instance. Make sure that your instance’s network settings are configured correctly for EC2 Instance Connect.

普通に制限してるアクセス先のみのIP設定だけでよいと勘違いしてた。どうもそうじゃないらしい。AWSが公開してるリージョンのIPを解放しないとダメな模様。何かを経由してアクセスしてるのかしら?

AWSが公開してるIPの範囲

東京リージョンなら、3.112.23.0/29。(2021/2/2時点)

こんな感じで追加。

sample

EC2 Instance Connectをサーバ側にインストール

最近はデフォで入ってるらしい。入ってない場合は公式のドキュメントに書かれてる感じでインストール。

IAM アクセス許可を設定する

AWS CLI入ってる端末ならどこでも。

公式通りですが、こんな感じで設定。

例えばmy-policy.jsonで↓のような内容でファイル作る。

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "ec2-instance-connect:SendSSHPublicKey",
        "Resource": [
            "arn:aws:ec2:region:account-id:instance/i-1234567890abcdef0"
        ],
        "Condition": {
            "StringEquals": {
                "ec2:osuser": "ami-username"
            }
        }
      },
      {
        "Effect": "Allow",
        "Action": "ec2:DescribeInstances",
        "Resource": "*"
      }
    ]
}

regionは東京リージョンなら、「ap-northeast-1」

account-idは対象IAMユーザのアカウントID。712345678901みたいなやつ。

/i-1234567890abcdef0のところは対象のEC2のインスタンスID。

ami-usernameはインスタンスへのログインユーザ名。デフォならec2-user

ファイル作ったら下記コマンド

aws iam create-policy --policy-name my-hogehoge-policy --policy-document file://my-policy.json

policy-nameは適切につけた方がよさげ。

aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-hogehoge-policy --user-name IAMユーザのAWSへのログインユーザ名

my-hogehoge-policyは一つ前のコマンドで指定したポリシー名。


これでブラウザからコンソールいじれるという寸法です。


2021/2/11追記

このブラウザ上のコンソール、タイムアウトが結構早い。10分くらい。

これ伸ばせないのかしら?設定的なものが見つからない。。。

電話とか来ると再接続メンドウ。

AWS CentOS Streamのイメージ

CentOS8が終了することが発表[CentOS.org]されましたが、AWSのイメージにstream版ないんですよね。

ただ、FAQ見るとCentOS8から下記だけでstream版に切り替えられるらしい。

root@centos-linux# dnf install centos-release-stream

root@centos-linux# dnf swap centos-{linux,stream}-repos

root@centos-linux# dnf distro-sync

root@centos-stream# cat /etc/centos-release
CentOS Stream release 8

Stream使う場合は、当面はこれでいくしかないかな?

関連の投稿

AWSでDockerのビルドが上手くいかないやつ

Dockerfileで例えばapt updateとかしてると下記エラー。

Err:1 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'

どうも、名前解決が出来てない。

理由は色々あると思うのですが、ホスト側のnameserverがdocker側のプライベートIP的なのと

似た感じになってるとdockerから見れて無くてエラーになるっぽい。

この場合はdockerのdns指定して立ち上げるようにする。

dnsはGoogleが公開してるDNSサーバ(8.8.8.8)使う事が多い模様

コマンドでやる場合

docker run --dns 8.8.8.8 -it busybox nslookup www.example.com

docker-compose

dns: 8.8.8.8

ただ、docker-composeはどうもうまくいかなかった。

docker-composeの場合、ホスト側の 「/etc/resolv.conf」がそのまま取り込まれてるっぽいのですが、

上記のdnsの指定が効かないんですよね。。。

何でなんだろ。

dockerのサービスに登録しちゃう場合

下記ファイルを編集(無かったら作成)

sudo vi /etc/docker/daemon.json

{
    "dns": ["8.8.8.8"]
}

# あとリスタート
sudo systemctl restart docker

※多分このやり方はあまりお勧めじゃないように思うけど、compose側の設定効かない時はこれでいくしかなさそう。


参考

AWS EC2でドメイン取得してHTTPSのサーバ作る流れ

何となく、とりあえずやりたい場合の全体的な手順ってあまり見ないので、

とりあえずやるって場合で肝のところ。


構成

だいたいこんな感じ。

sample01

流れ

  • ドメイン取得とDNS(Route 53)
  • インスタンス(EC2)
  • LB作る(証明書も)
  • DNS側にLBのAレコードを作る
  • セキュリティーグループとかの設定

ドメイン取得とDNS(Route 53)

Route53のサービスからドメイン登録選んで色々入力。

個人の管理者なら画像くらいの情報で。ここはちゃんとした情報を入力しないとダメ。

ドメイン名は結構取られてる事が多いと思うので頑張ってひねり出す。

個人的な利用なら.netでいいかなと思いました。

sample00

sample00-1

sample00-2

昔は個別にDNSやらなきゃいけなかったみたいですが、今はここで登録すれば

DNS側も勝手に登録してくれる。↓のところで確認。

sample05

インスタンス直にEIPとか関連付けてそっちにドメインつけたい場合は、ここのDNSに該当インスタンスへのAレコードを登録してあげる。(今回はLB側に付けるのでここまででOK)

インスタンス(EC2)

いったんインスタンス作る。インスタンスは適当に。Webサーバなら何でもいい。

LB作る(証明書も)

sample06

sample07

sample08

※ HTTPSを選んでおかないと、次のステップでその辺の設定が出てこない。

sample09

ACMを選択して、ACMで新しく証明書作るのリンクから証明書作りに行く。

sample10

sample11

sample12

検証中の状態になったら、上記の詳細を開いて、ここからRoute53へCNAMEレコードを追加する。手でやってもいいかもだけど、何か上手くいかなかったのでここからやった方が無難。

登録されたかどうかは、Route53で該当のホストゾーンの中のレコードを見る。CNAMEが追加されてるはず。↓

sample13

証明書の検証自体は、数分~10数分くらいで終わるはず。終わったら下記の発行済み状態になる。

sample14

↑まで終わったら、元のLBの登録の画面に戻って、「証明書の名前」のところに今のモノを入れる。

あとは適当にLBの設定をして作る。

DNS側にLBのAレコードを作る

LB作り終わったら、DNSにLBの情報を入れてあげる。

sample20

sample21

sample22

↑。対象のLBを選択。

セキュリティーグループとかの設定

あと、セキュリティというかACLの設定。

Webサーバ側にLBのセキュリティグループを追加してあげないとダメ。

AWSにVMイメージをインポートしてインスタンス作る(WindowsServer 2003)

WindowsServer2003という古のOSがありまして、

そのVMイメージをAWSで動かせるのかというお試し。

結果から言うととりあえず動かせはした。


VMインポートの手順は大まかに下記の流れ。

1. VMをエクスポートしておく
2. S3にバケット用意(既存を使うならそれはそれで
3. IAMで作業用のユーザ作っておく
4. aws cliをインストールしてconfig
5. aws cliでロールとか作る
6. aws cliでS3にVMイメージをアップロード
7. aws cliでアップロードしたイメージをAMIに変換
8. AMIからインスタンスを起動

基本的に公式のココのページ通りやっていけば大丈夫。


1. VMをエクスポート

色々やり方あると思うのですが、基本的にこのページのやり方でやらないとだめ。

2. S3にバケット用意

これはS3のサービス開けば問題ないでしょう。

3. IAMで作業用のユーザ作っておく

既存のユーザでも問題ないですが、後続のaws cliでアクセスキーとシークレットアクセスキーを使うのでそれが分からない場合は作るしかないかなと。

色々面倒そうなので、adminグループのユーザ作ってやった。。。

4. aws cliをインストールてconfig

公式のインストールのページから。windowsでやるのでwindows用をDLしてインストール。v2でやる。

インストールできたら、コンフィグ。

aws configure

> AWS Access Key ID [None]: *******
> AWS Secret Access Key [None]: *******
> Default region name [None]: ap-northeast-1
> Default output format [None]: json

東京リージョンは ap-northeast-1
5. aws cliでロールとか作る

公式のドキュメント

  • trust-policy.jsonを作成
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:Externalid": "vmimport"
            }
         }
      }
   ]
}
  • JSON作ったら vmimport っていう名前で作成
aws iam create-role --role-name vmimport --assume-role-policy-document "file://C:\work\trust-policy.json"
  • role-policy.json を作る
{
    "Version":"2012-10-17",
    "Statement":[
       {
          "Effect": "Allow",
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket" 
          ],
          "Resource": [
             "arn:aws:s3:::ines-wr-tempdata",
             "arn:aws:s3:::ines-wr-tempdata/*"
          ]
       },
       {
          "Effect": "Allow",
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket",
             "s3:PutObject",
             "s3:GetBucketAcl"
          ],
          "Resource": [
             "arn:aws:s3:::ines-wr-tempdata",
             "arn:aws:s3:::ines-wr-tempdata/*"
          ]
       },
       {
          "Effect": "Allow",
          "Action": [
             "ec2:ModifySnapshotAttribute",
             "ec2:CopySnapshot",
             "ec2:RegisterImage",
             "ec2:Describe*"
          ],
          "Resource": "*"
       }
    ]
 }
  • JSON作ったら vmimport に反映
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://C:\work\role-policy.json"

※ローカルのファイルパスはフルパスで作ったJSONファイルを指定。

6. aws cliでS3にVMイメージをアップロード

下記の感じ。

aws s3 cp "C:\work\hogehoge.disk1.vmdk" s3://work/vm

vmdkだけあればよいっぽいけどとりあえずエクスポートで作られたファイルは全部上げた。

7. aws cliでアップロードしたイメージをAMIに変換
  • containers.json ファイルを作る
[
  {
    "Description": "Disk01",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "work",
        "S3Key": "vm/hogehoge.disk1.vmdk"
    }
  },
  {
    "Description": "Disk02",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "work",
        "S3Key": "vm/hogehoge.disk2.vmdk"
    }
  },
  {
    "Description": "Disk03",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "work",
        "S3Key": "vm/hogehoge.disk3.vmdk"
    }
  }
]

vmdk複数ある場合は↑の感じ。

  • インポートする
aws ec2 import-image --description "HogeTestVM" --disk-containers "file://C:\work\containers.json"
8. AMIからインスタンスを起動

インポートが終わったら、AMIにイメージが出来てるのでそれを選んで起動すればOK。


ここまでで、大体動くようにはなってると思う。

ただ、本当はここから下記の設定をした方がよいっぽい。

インスタンス上げてみてみると、EC2Configの方は勝手にインストールされてた。

ただ、ENAとNVMe のドライバーのインストールはWindowsServer2003では不可能っぽい。

何でかって言うとPowerShellが2.0しか入れられないから。

がんばれば3.0以降も入るのかな?どこかで2003は2.0しか動作しないような事を見た記憶ががが...

ENAとNVMeはあきらめましたとさ。

でも、とりあえず動いてはいる。

顧客向け用の環境としてはあり得ないんだけど、開発用でどうしても一時的に必要な状況はあるので、何かの参考に置いておきます。

windows server 2003をAWS上に復元するのとか検索しても全然出てこなかった。

まーやる人なんかいないですよね。。。

AWSのLinuxサーバをデスクトップ化してローカルのWindowsからRDPで接続

まとめ。AWS側はCentOS7。

# SELinux切る(とりあえず)
sudo setenforce 0
sudo vi /etc/selinux/config
  SELINUX=disabled

#ファイヤーウォール切る(とりあえず)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# デスクトップ環境
sudo yum groupinstall graphical-server-environment -y

# VNCサーバー
sudo yum install tigervnc-server -y

# EPELリポジトリを有効化
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

# xrdp
sudo yum install xrdp -y

# xrdpの起動とサービス化
sudo systemctl start xrdp
sudo systemctl enable xrdp

# パスワード変更(RDP接続時は必須っぽ)
sudo passwd centos

あとは、RDPのポート(3389)をIPフィルタで外してあげればローカルのリモートデスクトップでつなげる。

パスワード変更しても通常のSSHでの接続でパスワード求められるわけじゃない。

AWSのWindowsサーバを日本語化する

デフォでローカルが英語なので日本語化したい。

前は設定から日本語選べば自動的に言語パックDLして適用してくれたみたいなのですが、

最近はやってくれない模様。そのうち治るのかしら?


①インターネットオプションで信頼済みサイトに下記

https://*.microsoft.com

➁IEのURLに下記を入れて直DL


https://software-download.microsoft.com/download/pr/17763.1.180914-1434.rs5_release_SERVERLANGPACKDVD_OEM_MULTI.iso

➂上記をダブルクリックで「Microsoft-Windows-Server-Language-Pack_x64_ja-jp.cab」がある事を確認。

④Windowsキー + Rでファイルを指定して実行:langpacks

⑤で、上記のja-jp.cabを選択してインストール

⑥ウィンドウズキー⇒設定⇒言語

⑦言語でAddからjapaneseを追加

⑧あとはリージョンとか適当に設定。

20200716追記

⑨コンパネから行く地域も日本にしないとダメでした...


言語パックのDLってMicrosoftのページに無いのかしら。

見つけられなかったのですが...

AWS CentOS8の公式イメージ

20201211追記

CentOS8が終了する事が発表されましたが、そういえば、AWSのマーケットプレイスにまだ登録されてないんだろうかと思って見てみたらいつの間にか登録されてた。

centos8

こっちで良さそうですね。


コメントで教えていただきました。centosのwikiに載ってた。(20200704追記)

コメントありがとうございます。

今のところCentOS8の公式イメージはココに載っているAMIで提供してる模様。

東京リージョンなら↑のページのAMIのIDコピーして、AWSのAMIで検索して起動すれば、

とりえあず起動はいけました。

ami-01

ami-02

ami-03

動かしてみよ。。。

以下、当初に書いたもの。


まだ無いらしい。

CentOSのForum上でも微妙に話題になってはいる。

誰かやってくれ~みたいな感じ?

今のところ、MarcketPlaceに2つの会社が上げてくれてる。コミュニティ上にも何個かはある。

ただ、公式イメージはない。

現状、自分でやる場合は↓の「CentOS-8-ec2-8.1.1911-20200113.3.x86_64.qcow2」使って自分でAMI登録しなさいって事みたい。

https://cloud.centos.org/centos/8/x86_64/images/

コミュニティ上のやつは、上げた人が自分用に作ってる感じなので、不要なパッケージとかも入ってたりするので、ちょっと微妙?まー十分ありがたいのですが。

日本人的に「公式」って言葉に弱いので、そろそろ対応して貰えると嬉しいんだけどなー。

あと、Stream版ってどうなんでしょ。開発に貢献したい人用な感じがするので、手を出すのはちょっと躊躇する。。。

問合せ