AWS ECR を使ってみる
  2020/03/26

AWS ECR(Elastic Container Repository)を使ってみます。

Amazon Elastic Container Registry

ECRは、Dockerコンテナイメージを保存するレジストリサービスで、DockerHub の AWS版のような感じです。
AWS ECS 、AWS fargate と併用してコンテナを用いたサーバを運用します。

料金

2020/3時点で、以下の枠で無料のようです

Amazon Elastic Container Registry の料金

  • イメージ:500Mまで
  • 転送量:1G/月

リポジトリ作成

マネジメントコンソールもしくは、AWS Client でリポジトリを作成します。

マネジメントコンソールでリポジトリ作成する場合

使用方法にアクセス

 

リポジトリ名を入力、プッシュ時にスキャンを有効にして、リポジトリを作成

 

リポジトリが作成される

AWS CLI でリポジトリ作成する場合

aws コマンドでも、ECR リポジトリを作成できます。


$ aws ecr create-repository --repository-name php

AWS CLI のプロファイル追加

AWS Client を利用して ECRのプロファイルを作成します。

リージョンは東京(ap-northeast-1)としています。


$ aws configure --profile ecr
AWS Access Key ID [None]: AIM アカウント ID
AWS Secret Access Key [None]: AIM シークレットキー
Default region name [None]: ap-northeast-1
Default output format [None]: 

AWS CLI 用の環境変数設定

AWS ECR のリージョン(東京)を環境変数に設定(.bash_profile)します。


$ vi .bash_profile

export AWS_REGION=ap-northeast-1

環境確認


$ source .bash_profile
$ echo $AWS_REGION
ap-northeast-1

Dockerfile 作成


FROM amazonlinux:2

SHELL ["/bin/bash", "-c"]

ARG PROJECT_DIR="projects"
WORKDIR $PROJECT_DIR

CMD ["/bin/bash"]

AWS ECR ログイン


$ aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin xxxxxx

Dockerイメージビルド


$ docker build -t linux2 .

Dockerイメージタグ付け


$ docker tag linux2:latest 517704528142.dkr.ecr.ap-northeast-1.amazonaws.com/linux2:latest

AWS ECR に Dockerイメージをプッシュ


$ docker push xxxx.amazonaws.com/linux2:latest

イメージが作成されたのを確認

AWS ECR リポジトリ確認


$ aws ecr describe-repositories --region ${AWS_REGION}
{
    "repository": {
        "registryId": "xxxxxxxxxxxx",
        "repositoryName": "linux2",
        "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxxxxxxxxxx:repository/linux2",
            "createdAt": 1585197107.0,
            "imageTagMutability": "MUTABLE",
            "imageScanningConfiguration": {
                "scanOnPush": true
            }
    }
}

AWS ECR イメージ確認

リポジトリ名一覧


$ aws ecr describe-repositories --query 'repositories[].repositoryName'

リポジトリを指定した詳細


$ aws ecr list-images --repository-name linux2 --region=${AWS_REGION}

 

AWS ECR イメージ削除


$ aws ecr batch-delete-image --repository-name linux2 --image-ids imageTag=v2.0

Mac に AWS Client を設定する
  2020/03/22

AWSのインスーラでインストール


$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

別バージョンの Python を利用する場合

別のバージョンの Python で AWS CLI をインストールする場合、Python の絶対パス指定してインストールスクリプトを実行が必要です。


$ sudo /usr/local/bin/python3.7 awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

ターミナルを再起動すれば、aws コマンドが利用できます。


$ aws --version
aws-cli/1.18.27 Python/3.7.4 Darwin/18.7.0 botocore/1.15.27

pip でインストール


$ brew install openssl
$ pyenv install 3.7.0
$ pip install --upgrade pip
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py --user
$ pip3 install awscli --upgrade --user

AWS CLI 設定


$ aws configure アクセスキー: シークレットキー: リージョン: ap-northeast-1 output format:
$ aws ec2 create-key-pair --key-name キー
$ aws ec2 create-key-pair --key-name キー --query 'KeyMaterial' --output text > キー .pem
$ aws ec2 describe-key-pairs --key-name キー

参考

macOS に AWS CLI バージョン 1 をインストールする

Linux2 Apache2 + PHP7.3 + PostgreSQL10
  2019/08/25

AWS の Linux2 は最適化された(?)パッケージが用意されている

- CentOS7 - Apache2 - PHP7.3
- PostgreSQL *コマンドは sudo でなく root で実行している(root パスワードを別途設定済み)

yum アップデート

# yum update -y

Apache2

Apache インストール

# yum -y install httpd

サービス起動

# systemctl start httpd

*CentOS6系では chkconfig httpd on

自動起動設定

# systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

自動起動設定確認

# systemctl is-enabled httpd

ec2-user 設定

/var/www/ を ec2-user が利用できるように設定する

ec2-user を apache に追加

# usermod -a -G apache ec2-user

/var/www の権限

デフォルトの DocumentRoot である /var/www の権限を ec2-user : apache に変更 ディレクトリ(775)とファイル(664) で利用できるようにする

# chown -R ec2-user:apache /var/www # chmod 2775 /var/www && find /var/www -type d -exec chmod 2775 {} ; # find /var/www -type f -exec chmod 0664 {} ;

*2775 の 2 は setgid

ec2-user で所属グループの確認

ec2-user を再ログインして確認

$ groups ec2-user adm wheel apache systemd-journal

PHP7.3

Amazon Linux2 用にパッケージが用意されており、PHP7.3 はここからインストールする。

Amazon Linux2 専用のパッケージ確認

# amazon-linux-extras list ..... # amazon-linux-extras info php7.3

インストール

# amazon-linux-extras install php7.3

mazon-linux-extras で足りないパッケージは、yum でインストールすると良い

Composer インストール

$ curl -sS https://getcomposer.org/installer | php All settings correct for using Composer Downloading... Composer (version 1.9.0) successfully installed to: /home/vagrant/composer.phar Use it: php composer.phar

/user/local/bin に移動

$ sudo mv bin/composer /usr/local/bin/composer

composer初期化

$ composer init Package name (/) [vagrant/vagrant]: Description []: Author [, n to skip]: Minimum Stability []: Package Type (e.g. library, project, metapackage, composer-plugin) []: License []: Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? Search for a package: Would you like to define your dev dependencies (require-dev) interactively [yes]? Search for a package:

composer.json が作成される

composer install

$ composer install Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files

PostgreSQL10

amazon-linux-extras

amazon-linux-extras では psql コマンドのみのインストールの模様

# amazon-linux-extras install postgresql10

yum インストール

# yum install -y postgresql-server postgresql-devel postgresql-contrib

サービス起動

# systemctl start postgresql # postgresql-setup initdb

自動起動設定

# systemctl enable postgresql.service

postgres ユーザで確認

# su - postgres bash-4.2$ psql -l could not change directory to "/home/ec2-user": Permission denied List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | .....

外部からのアクセス設定

パスワードで制御するかIPで制御するか、はたまたその他の方式かはセキュリティポリシーによって違うので割愛 (postgres.conf & pg_hba.conf 設定など)

AWS はセキュリティグループで PostgreSQLのポート設定しないと一切アクセスできない。

AWS セキュリティグループ

セキュリティグループ > EC2 に紐付いたグループ > インバウンド > 編集

AWS セキュリティグループ 上記の設定は 5432 に全ての IPを許可(CIDR形式)しているので、必要であれば IP制限する
(postgresパスワードや、pg_hba.conf で制限しても良い)

<< 最初 < 前ページ 次ページ > 最後 >>