くりーむわーかー

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

AWS

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の公式イメージ

コメントで教えていただきました。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版ってどうなんでしょ。開発に貢献したい人用な感じがするので、手を出すのはちょっと躊躇する。。。

問合せ