2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Fargate, ECSを用いたコンテナ運用設計、構築をしてみた。~ECRへのビルド~

Posted at

前記事

AWS Fargate, ECSを用いたコンテナ運用設計、構築をしてみた。~ネットワーク編~
image.png

今回やること

管理用Cloud9とECRの作成、ECRへのコンテナイメージのビルドまで行います!!
ECRへのInterface Endopointを作成するタイミングでCloud Watchも作成しましょう!!
image.png

Cloud9の作成

「Cloud9」→「Create Environment」から作成していきます。
サブネットには前回作成したCloud9用Public subnetを設定し、それ以外は各々必要なスペックを選択します。
今回は最小スペックで作成しています。
1.PNG

Cloud9のセキュリティグループ変更

Cloud9を作成すると、デフォルトでセキュリティグループが作成されます。
「EC2」→「インスタンス」から、Cloud9作成時に作成されたEC2インスタンスのセキュリティグループを前回作成したセキュリティグループに付け替えます。
(Cloud9作成時にデフォルトで作成されるセキュリティグループを使用しても良いですが、セキュリティグループの命名規則等を考えると、先にセキュリティグループを作成し付け替える流れが綺麗だと思いました。)
2.PNG

Cloud9への接続

「Cloud9」から作成したCloud9を選択するとターミナル画面が表示されます。
作成したコンテナイメージをCloud9にgit cloneしておきます。
3.PNG

ECRの作成

「ECR」→「リポジトリ」から作成していきます。
リポジトリはプライベートに設定し、リポジトリ名はfrontとbackendを作成します。
4.PNG

上記画像と同様にfrontも作成します。
5.PNG

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も作成します。
6.PNG

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にアタッチします。
8.PNG

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」→「リポジトリ」から対象のリポジトリを選択すると確認できます。
キャプチャ.PNG

登録した結果の確認

「ECR」→「リポジトリ」から登録したリポジトリを確認します。
16.PNG
frontも同様の手順でECRへプッシュしたら完了です。

Cloud Watchへ接続するためのEndpoint作成

ECRへのInterfase Endopoint作成したタイミングでCloud Watch用のも作成しておきます。
ECRと同様の手順で作成します。サービス名は「logs」絞りこむと「com.amazonaws.{region}.logs」が出てきます。
サブネット、セキュリティグループはECRと同様です。
18.PNG

まとめ

ECRへのコンテナイメージの登録環境作成が完了しました!!
また、ログ管理の準備も完了です!!

次回が大変なやつですね。Fargate+ECS上でコンテナイメージを実行するための構築をします。
がんばります。笑笑

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?