書籍「Amazon Web Services アプリ 開発運用入門」のまとめ。
点数
68点
感想
どういう人をターゲットにしているのか、よくわからない本だった。
初心者向けの内容かと思えば、コミットをトリガーにしてビルドからデプロイまで自動で行うというような高度な内容もあった。
CodeCommit, AWS CodeBuild, AWS CodeDeploy, AWS CodePipeline, Amazon SES, Amazon SNS, Amazon SQS、などたくさんのサービスに触れている点はよかった。
主な内容
CodeCommitとは
GitリポジトリをAWS上に構築することができる。
設定手順の例
CodeCommit用のIAMユーザーを作成
- IAMユーザー作成画面を開く
- 「既存のポリシーをアタッチ」を選択
- AWSCodeCommitFullAccessを選択
- アクセスキーIDとシークレットアクセスキーが発行される
AWS CLIをインストール
- Macの場合は
pip install awscli
、Windowsの場合はhttps://aws.amazon.com/jp/cli/からインストーラをダウンロードして実行 aws configue
を実行し、アクセスキー、シークレットアクセスキー、リージョン、出力形式(=text)を登録
GitクライアントにAWS CLI認証情報ヘルパーを使用するように設定
git config --global credential.helper "!aws codecommit credential-helper $@"
git config --global credential.UseHttpPath true
VPC
EC2インスタンスはVPCに配置しなければならない。
また、VPCには1つ以上のサブネットを作成しなければならない。
(あらかじめデフォルトのVPCが用意されているので、問題がなければそれを使ってもよい)
VPC作成手順の例
- VPCの作成画面を開く
- 「1個のパブリックサブネットを持つVPC」を選択
- VPC名を入力
- 「VPCの作成」をクリック
パブリックサブネットとは
- パブリックサブネット
インターネットと通信できるサブネット。
Route tables のデフォルトゲートウェイ(0.0.0.0/0)がインターネットゲートウェイに設定されている。 - プライベートサブネット
VPC内しか通信しないできないサブネット。
デフォルトゲートウェイがインターネットゲートウェイに設定されていない
Windows10標準のOpenSSHクライアント
2017年秋のWindows10 Fall Creators UpdateからOpenSSHクライアントが利用できるようになった。
これにより、sshコマンドやscpコマンドが使えるようになった。
ssh -i 秘密鍵ファイル ユーザー名@ホスト名
scp -i 秘密鍵ファイル 転送ファイル ユーザー名@ホスト名:転送先のパス
AWS CodeBuild
アプリケーションのビルドを行うことができるサービス。
ビルド環境の構築・運用の作業をから解放される。
設定手順の例
ソースコードのリポジトリにbuildspec.ymlファイルを追加する。
ERROR: The request could not be satisfied
version: 0.2
phases:
build:
commands:
- mvn package
artifacts:
files:
- 'target/sample.jar'
CodeBuildの管理画面からビルドプロジェクトを作成する
- CodeBuild管理画面を開く
- 「ビルドプロジェクトを作成する」をクリック
- プロジェクト名を入力
- ソースコード取得先を選択(S3, CodeCommit, GitHub, BitBucketから選択)し、リポジトリ名を入力
- ビルド環境を入力
例)
OS=ubuntu
ランタイム=JAVA
ランタイムバージョン=JDK8+maven
サービスロール=新しいサービロール
Buildspec=buildspec.yml - 「アーティファクト設定」で、「タイプ」に「S3」、「バケット名」に任意のS3バケット、を選択する
- 「名前-オプショナル」に任意のファイル名(sample.zipなど)を入力、「アーティファクトのパッケージ化」に「zip」を選択
- 「ビルドプロジェクトを作成する」をクリック
ビルドの実行
- CodeBuild管理画面でビルドプロジェクトにチェックを入れ「ビルドの開始」をクリック
- アーティファクト設定で設定したS3バケットにzipファイルが生成される
AWS CodeDeploy
EC2インスタンスへのアプリケーションのデプロイ作業を自動化することができるサービス。
設定手順の例
CodeDeploy用IAMロールの作成
CodeDeployにS3バケットへの書き込み権限を与える。
- IAM管理画面で「ロール」をクリック
- 「ロールの作成」をクリック
- 「エンティティの種類」に「AWSサービス」、「ロールを使用するサービス」に「CodeDeploy」、「ユースケース」に「CodeDeploy」、「ポリシー」に「AWSCodeDeployRole」、を選択
- 任意のロール名を入力
- 「ロールの作成」をクリック
EC2インスタンス用IAMロールの作成と割り当て
EC2インスタンスに対して、ビルドされたファイルをS3バケットから読み取るための権限を与える。
- IAM管理画面で「ロール」をクリック
- 「ロールの作成」をクリック
- 「エンティティの種類」に「AWSサービス」、「ロールを使用するサービス」に「EC2」、「ポリシー」に「AWSEC2RoleForAWSCodeDeploy」、を選択
- 任意のロール名を入力
- 「ロールの作成」をクリック
- EC2管理画面でデプロイ先インスタンスにチェックを入れる
- アクション⇒インスタンスの設定⇒IAMロールの割り当て/置換
- CodeDeploy用に作成したロールを選択する
CodeDeployアプリケーションの作成
アプリケーション=デプロイの単位。
- CodeDeploy管理画面で「アプリケーションの作成」をクリック
- 任意のアプリケーション名を入力、「プラットフォーム」に「EC2/オンプレミス」を選択
- 「アプリケーションの作成」をクリック
デプロイグループの作成
CodeDeployアプリケーションには1つ以上のデプロイグループが必要。
- アプリケーションの詳細画面で「デプロイグループの作成」をクリック
- 任意のデプロイグループ名を入力、「サービスロール」にEC2インスタンス用に作成しておいたIAMロールを選択
- 「デプロイタイプ」に「インプレースデプロイ」を選択
インプレースデプロイ:デプロイグループ内の全てのEC”インスタンスに同時にデプロイ
Blie/Greenデプロイ:新しいECインスタンスを作成してデプロイ(要ロードバランサー) - 「環境設定」に「EC2インスタンス」を選択し、デプロイ先EC2インスタンスのタグのキーと値を入力
- 「デプロイグループの作成」をクリック
CodeDeployエージェントのインストール
デプロイ先のEC2インスタンスにはRuby製のCodeDeployエージェントというプログラムをインストールする必要がある。
- 必要なソフト(ruby, wget, CodeDeployエージェント本体)をインストール
sudo yum -y update
sudo yum-y install ruby wget
wget https://aws-codedeploy-us-east-1.s3.region-identifier.amazonaws.com/latest/install
- インストール実行
sudo ./install auto
- CodeDeployエージェントの実行と自動起動の設定
sudo service codedeplo-agent start
sudo chkconfig codedeplo-agent on
ソースコードのリポジトリにappspec.ymlを追加
version: 0.0
os: linux
files:
- source: /
destination: /var/app/
overwite: true
permissions:
- object: /var/app/target/sample.jar
owner: root
group: root
hooks:
ApplicationStart:
- location: scripts/start.sh
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop.sh
timeout: 300
runas: root
デプロイの実行
- CodeDeploy管理画面を開く
- 作成したCodeDeployアプリケーションを選択
- 「デプロイの作成」をクリック
- 「デプロイグループ」に作成したデプロイグループを選択、「リビジョンの場所」にS3バケットのURLを入力
- 「デプロイの作成」をクリック
AWS CodePipeline
ビルドとデプロイを管理・自動化してくれるサービス。
例えば「CodeCommitのリポジトリが変更されたら、CodeBuildでビルドしてCodeDeployでデプロイする」という一連の流れを自動化することができる。
設定手順の例
- CodePipeline管理画面を開く
- 「パイプラインの作成」をクリック
- 任意のパイプライン名を入力
- ソースステージの追加画面で「ソースプロバイダ」に「AWS CodeCommit」を選択し、ソースの「リポジトリ名」「ブランチ名」を選択
- ビルドステージの追加画面で「ビルドプロバイダ」に「AWS CodeBuild」、「プロジェクト名」にCodeBuildで作成したプロジェクトを選択
- デプロイステージの追加画面で「デプロイプロバイダ」に「AWS Code Deploy」を選択し、CodeDeployで作成した「アプリケーション名」「デプロイグループ」を選択
- 「パイプラインの作成」をクリック
パイプラインの動作確認
上記の設定を行うと、CodeCommitへプッシュするとデプロイまで自動的に行われる。
CodePipeline管理画面から該当パイプラインを選択すると、動作状況を確認することができる。