前記事
AWS Fargate, ECSを用いたコンテナ運用設計、構築をしてみた。~ネットワーク編~
今回やること
管理用Cloud9とECRの作成、ECRへのコンテナイメージのビルドまで行います!!
ECRへのInterface Endopointを作成するタイミングでCloud Watchも作成しましょう!!
Cloud9の作成
「Cloud9」→「Create Environment」から作成していきます。
サブネットには前回作成したCloud9用Public subnetを設定し、それ以外は各々必要なスペックを選択します。
今回は最小スペックで作成しています。
Cloud9のセキュリティグループ変更
Cloud9を作成すると、デフォルトでセキュリティグループが作成されます。
「EC2」→「インスタンス」から、Cloud9作成時に作成されたEC2インスタンスのセキュリティグループを前回作成したセキュリティグループに付け替えます。
(Cloud9作成時にデフォルトで作成されるセキュリティグループを使用しても良いですが、セキュリティグループの命名規則等を考えると、先にセキュリティグループを作成し付け替える流れが綺麗だと思いました。)
Cloud9への接続
「Cloud9」から作成したCloud9を選択するとターミナル画面が表示されます。
作成したコンテナイメージをCloud9にgit cloneしておきます。
ECRの作成
「ECR」→「リポジトリ」から作成していきます。
リポジトリはプライベートに設定し、リポジトリ名はfrontとbackendを作成します。
ECRへ接続するためのEndpoint作成
Interface Endpointを作成します。
ECRはリージョンサービスなのでインターネットからのアウトバウンド通信か、Endpointからの内部通信が必要になります。
ECRへの接続には以下2つのEndpoint作成が必要です。
- ECR APIを呼び出すためのEndpoint(com.amazonaws.{region}.ecr.api)
- Dockerコマンドを呼び出すためのEndpoint(com.amazonaws.{region}.ecr.dkr)
サブネットには前回作成したPrivate subnetを選択します。
また、セキュリティグループは前回Endpoint用に作成したものを選択します。
下図はECR API用になります。同様にDockerコマンド用のEndpointも作成します。
Cloud9→ECR接続許可用のIAMロールの作成
AWSではOSに認証情報を埋め込むような設定は良くないとされています。
その代わりIAMロールを付与して接続許可を行います。
「IAM」→「ロール」からIAMロールを作成します。
以下ロールを作成します。参考(Amazon Elastic Container Registry のアイデンティティベースのポリシーの例)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListImagesInRepository",
"Effect": "Allow",
"Action": [
"ecr:ListImages"
],
"Resource": "arn:aws:ecr:ap-northeast-1:{アカウントID}:repository/*"
},
{
"Sid": "GetAuthorizationToken",
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken"
],
"Resource": "*"
},
{
"Sid": "ManageRepositoryContents",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:PutImage"
],
"Resource": "arn:aws:ecr:ap-northeast-1:{アカウントID}:repository/*"
}
]
}
作成したIAMロールをCloud9のEC2にアタッチします。
Cloud9からECRへコンテナアプリの登録をする
AWSではECR内のコンテナイメージをAWSアカウントごとに識別しています。
そのため、image idとして決められた形で登録する必要があります。
docker tag {元の名前}:latest {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/{リポジトリ名}:latest
次はDockerへの認証を行います。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com
最後にECRへプッシュします。
docker push {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/{リポジトリ名}:latest
これらのコマンドは「ECR」→「リポジトリ」から対象のリポジトリを選択すると確認できます。
登録した結果の確認
「ECR」→「リポジトリ」から登録したリポジトリを確認します。
frontも同様の手順でECRへプッシュしたら完了です。
Cloud Watchへ接続するためのEndpoint作成
ECRへのInterfase Endopoint作成したタイミングでCloud Watch用のも作成しておきます。
ECRと同様の手順で作成します。サービス名は「logs」絞りこむと「com.amazonaws.{region}.logs」が出てきます。
サブネット、セキュリティグループはECRと同様です。
まとめ
ECRへのコンテナイメージの登録環境作成が完了しました!!
また、ログ管理の準備も完了です!!
次回が大変なやつですね。Fargate+ECS上でコンテナイメージを実行するための構築をします。
がんばります。笑笑