LoginSignup
0
0

More than 1 year has passed since last update.

ECSでコンテナ実行メモ その1

Posted at

概要

AWSコンテナ設計・構築[本格]入門をもとに自分でコンテナを動かそうとしてみた手順をまとめていこうかと思います。
動かす対象は以前こちらでcloud9上で動かしたコンテナをもとにしています。
タイトルの通りこれで完結ではないので続報ができたらこちらの概要も更新していきます。

ECRの作成

  • まずECRにリポジトリを作成します。以下のようにプライベートリポジトリで作成します。
    InkedECR_1_LI.jpg
    ECR_2.png

  • 作成したリポジトリを確認します。
    InkedECR_3_LI.jpg

ロールの作成

  • インスタンスに付与するロールをCloudShellで作成します。jsonファイルでポリシーを作成します内容は以下のものです。${AWS_ACCOUNT}の部分は各自のアカウントに変更してください。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRRepositoryList",
            "Effect": "Allow",
            "Action": [
                "ecr:ListImages"
            ],
            "Resource": [
              "arn:aws:ecr:ap-northeast-1:${AWS_ACCOUNT}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent"
            ]
        },
        {
            "Sid": "GetAuthorizationToken",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ECRRepositoryManage",
            "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:${AWS_ACCOUNT}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent"
            ]
        }
    ]
}
  • 以下のコマンドでファイル名や後程使う変数を指定します。
FILE_IAM_POLICY_DOC='policy.json'
IAM_ROLE_NAME='dockerAdventRoll'
IAM_ROLE_PATH='/docker-advent/'
IAM_ROLE_ARN='arn:aws:iam::${AWS_ACCOUNT}:policy/dockerAdventPplicy'
IAM_INSTANCE_PROFILE_NAME='dockerAdventRoll'
IAM_INSTANCE_PROFILE_PATH='/docker-advent/'
  • jsonファイルを作成します。
cat << EOF > ${FILE_IAM_POLICY_DOC}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRRepositoryList",
            "Effect": "Allow",
            "Action": [
                "ecr:ListImages"
            ],
            "Resource": [
              "arn:aws:ecr:ap-northeast-1:${AWS_ACCOUNT}:repository/docker-advent"
            ]
        },
        {
            "Sid": "GetAuthorizationToken",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ECRRepositoryManage",
            "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:${AWS_ACCOUNT}:repository/docker-advent"
            ]
        }
    ]
}
EOF
  • ファイルの内容を確認します。
cat ${FILE_IAM_POLICY_DOC}
  • jsonファイルとしての妥当性を確認
cat ${FILE_IAM_POLICY_DOC} \
  |  python3 -m json.tool \
  > /dev/null
  • ポリシーの作成
aws iam create-policy --policy-name dockerAdventPplicy --policy-document file://${FILE_IAM_POLICY_DOC}
  • ロールを作成します。

aws iam create-role \
  --role-name ${IAM_ROLE_NAME} \
  --path "${IAM_ROLE_PATH}" \
  --assume-role-policy-document \
'{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}'
  • 作成したロールにポリシーをアタッチしインスタンスポロファイルも作成します。
aws iam attach-role-policy \
  --role-name ${IAM_ROLE_NAME} \
  --policy-arn ${IAM_ROLE_ARN}

aws iam create-instance-profile \
  --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} \
  --path "${IAM_INSTANCE_PROFILE_PATH}"

aws iam add-role-to-instance-profile --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} --role-name ${IAM_ROLE_NAME}
  • cloud9のインスタンスのロールをつけなおします。 ロール変更_1.png ロール変更_2.png

ECRへのpush

  • こちらの手順でcloud9上で動かしているimageをpushします。(このままではECSでうまく動かなかったので、コンテナ自体ビルドしなおすかもしれません。)

  • 以下のコマンドでタグをつけます。${imageID}の部分は docker imagesで確認したimageのIDを指定してください。

docker tag ${imageID} mongamaenioh/radvent:v1
  • ECRにpushするためにtagを修正します。
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

docker image tag mongamaenioh/radvent:v1 ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent:v1
  • ECRへログインをします。
aws ecr --region ap-northeast-1 get-login-password | docker login --username AWS --password-stdin https://${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent

成功すると以下のようになります。
ECR_push_1.png

  • imageをpushします。
docker image push ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent:v1

成功するとECR上以下のように見られます。
ECR_push_2.png

  • 最後にimageをpullして確認を行います。
docker image pull  ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/docker-advent:v1

最後に

とりあえずはECRへのpushまでの手順となります。
ECSに登録したところすぐにコンテナが終了してしまうためコンテナのbuildをやり直す必要があるかもしれません・・・

0
0
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
0
0