Docker for Windows で作成したコンテナは、プライベートなので Amazon Lightsail コンテナにデプロイできないから、対応した記録

# Lightsail はプライベートのリポジトリからデプロイできない
みんな無料が大好き、docker hub リポジトリには１つしか無料枠がない、だからプライベートにする、Lightsail にデプロイできない。
の流れから、しかたなくローカルマシンから直接 Lightsail にデプロイした記録

# 作業記録
## コンテナの作成
3か月無料になるMicro を選択して名前つけるだけ
## AWS CLI をインストール
手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-install-software

ダウンロード
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html#cliv2-windows-install

- https://awscli.amazonaws.com/AWSCLIV2.msi インストール
- https://awscli.amazonaws.com/AWSCLIV2-2.0.30.msi 更新確認
- msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi 更新確認
- C:\>aws --version インストール確認

## lightsailctl プラグインをインストール
https://s3.us-west-2.amazonaws.com/lightsailctl/latest/windows-amd64/lightsailctl.exe
上記ダウンロードを C:\Temp\lightsailctl\ に保存

コマンドプロンプトを管理者で実行

環境変数設定

```cmd
C:\> setx PATH="%PATH%;C:\Temp\lightsailctl" /M

成功: 指定した値は保存されました。 
```

これで準備完了と、[手順](https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-install-software)には書いてある。

## Amazon Lightsail コンテナイメージの作成
手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-creating-container-images

👆には、Dockerfile からイメージ作成とありますが、ローカルでコンテナ起動して設定等々することはできるので特にDockerfile にこだわる必要はなさそう。

## Amazon Lightsail にコンテナイメージをプッシュ
手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-pushing-container-images

### AWSにイメージをプッシュ

```cmd
PS C:\> aws lightsail push-container-image --region <Region> --service-name <ContainerServiceName> --label <ContainerImageLabel> --image <LocalContainerImageName>:<ImageTag>

[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXDigest: sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Image "XXXXXXX/XXXXXXX:XXXXXX" registered.
Refer to this image as ":XXXXXXX.XXXXXXX.1" in deployments.
```

※WARNINGが出たら
<details><summary>WARNING: You are using version 1.0.0 of lightsailctl, but version  is available.</summary><div>

```cmd
WARNING: You are using version 1.0.0 of lightsailctl, but version  is available. To download, visit https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-install-software
NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Command '['lightsailctl', '--plugin', '--input-stdin']' returned non-zero exit status 1.
```

これは、IAM で作成されたユーザのアクセスキーが AWS CLI に設定されていないため。

- IAM でユーザ作成（プログラムによるアクセス-AdministratorAccessで作成しましたが適宜選んでね）
- アクセスキーとシークレットアクセスキーを取得

ローカルにて

```cmd
aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: XXXXXXX
Default output format [None]:
```

👆で正常になった
</div></details>


## lightsail コンソールでイメージの確認とデプロイ
コンテナにイメージが登録されているので、デプロイからこのイメージを選択してデプロイ実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366986/3236a327-f20d-0bd1-b9b0-991a3f14d823.png)

- コンテナ名・・・・前段で作成したコンテナ名
- イメージ・・・・・さきほど苦労してCLIからプッシュしたイメージ名（クリックで選択できます）
- ポート・・・・・・dockerコンテナ側が待ち受けているポートを指定すると、外部からのデフォルトポート(80 とか 443)をこのポートにアタッチしてくれる

# まとめ
ひとまず、docker for Windows で作成したコンテナをイメージにして、Amazon Lightsail にデプロイすることができました。
実際には、これだけではなく、Lightsail でDBを作成しコンテナから接続したり、ドメイン設定するなどが必要になるでしょう。

しかし、docker 便利ですね。引っ越しが楽です。