LoginSignup
1
4

More than 5 years have passed since last update.

別アカウントのECRを取得してeb deployを実行する

Last updated at Posted at 2017-06-06

困ってたこと

ソースコードはアカウントA内のCodeCommitにあって、CodePipelineなどを使って、テスト・デプロイなどを行っていた。
特定のブランチをpushするだけで、テストやデプロイが行われるのでかなり快適だった。

しかし、アカウントB内に環境を立ち上げないといけなくなり、我がチームの大先輩が教えてくれたので、今後のためにドキュメントに残しておこうと思います。

やりたいこと

アカウントA内にあるECRを参照して、アカウントBにElastic Beanstalkを立ち上げる・更新する

フローを簡単にまとめると

  1. local開発環境からpushする
  2. CodePipelineを通って、テスト・デプロイが行われる
  3. 問題なければECRが更新される
  4. アカウントBへデプロイするプロジェクトに移って「eb deploy」を実行する

ECRのログイン情報を取得する

アカウントA内のECRを取得するためにログイン情報を取得します
下記コマンドを実行する。(このときのcredentialはアカウントAのIAM情報)

aws ecr get-login

結果

docker login -u AWS -p 文字列(★) ECRのエンドポイント

ECRを取得する際のログイン情報をjsonにして、アカウントB内のS3に置いておきます
例)バケット名:app-documents Key名:config.json

config.json
{
  "auths": {
    "ECRのエンドポイント": {
      "auth": "文字列(★)"
    }
  }            
}

アカウントBへデプロイするためのプロジェクトを作成する

local開発環境からpushしてECRが更新された後、そのECRをもとにElastic Beanstalkを更新するためのプロジェクトを作成します。
このプロジェクト内で「eb deploy」を実行するとアカウントA内のECRを取得し、アカウントB内のElastic Beanstalkアプリケーションの環境を更新するできるようにします。

Dockerの設定ファイルを作成する

Dockerコンテナ作成時の設定ファイルを作成します。

Dockerrun.aws.json
{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
    "Bucket": "app-documents",
    "Key": "config.json"
  },
  "Image": {
    "Name": "ECRのエンドポイント",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "3000"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/var/log",
      "ContainerDirectory": "/var/www/logs"
    }
  ],
  "Logging": "/var/log"
}

Elastic Beanstalkの設定

アカウントB内のElastic Beanstalk内の環境にデプロイをしたいので、アカウントBで作成したIAM情報を持ったcredentialを作成します。
そのprofileを使用する形で、「eb init --proflie アカウントB」を実行し、Elastic Beanstalkの設定を行います。

aws configure --profile accountb
AWS Access Key ID [****************]: アカウントBで作成したIAMのアクセスキー
AWS Secret Access Key [****************]: アカウントBで作成したIAMのシークレットアクセスキー
Default region name [ap-northeast-1]: 東京を選択(別リージョンでも問題はないかと)
Default output format [None]:

eb init --profile accountb

// 下記は一例
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) us-east-2 : US East (Ohio)
(default is 3): 9

Select an application to use
1) accountb
2) [ Create new Application ]
(default is 2): 2

Enter Application Name
(default is "accountb"): sample
Application sample has been created.

It appears you are using Docker. Is this correct?
(y/n): y

Select a platform version.
1) Docker 1.12.6
2) Docker 1.11.2
3) Docker 1.9.1
4) Docker 1.7.1
5) Docker 1.6.2
(default is 1): 1
Do you want to set up SSH for your instances?
(y/n): n

その後「eb create」を実行して、アカウントB内のElastic Beanstalkにアプリケーション及び環境を構築します。

eb create --vpc
// 適宜変更してください
Enter Environment Name
(default is sample-dev):
Enter DNS CNAME prefix
(default is sample-dev):

Select a load balancer type
1) classic
2) application
(default is 1): 2

Enter the VPC ID: アカウントBのVPC IT(EC2のダッシュボードから確認できます)
Do you want to associate a public IP address? (y/n): y
Enter a comma-separated list of Amazon EC2 subnets: アカウントBのsubnet。必ず複数指定してください(東京リージョンなら2つ)
Enter a comma-separated list of Amazon ELB subnets: アカウントBのsubnet。必ず複数指定してください(東京リージョンなら2つ)
Enter a comma-separated list of Amazon VPC security groups: アカウントBのVPCのセキュリティーグループ
Do you want the load balencer to be public? (Select no for internal) (y/n): y

処理が無事成功したら、作業完了です。
AWSのコンソール画面でも進捗を確認することができます。

今後、このプロジェクト内で「eb deploy」を実行すると、アカウントA内のECRを取得してElastic Beanstalkが更新されます。

このあたりの詳しい手順・説明はこちらを参考にしていただければと思います。

まとめ

少し力技感が否めませんが、困っていたことを解消することができました。
また、pushした際のCodePipelineでアカウントA内にElastic Beanstalkを立ち上げると、検証環境的なものを作れるので、個人的にはいい感じだなと思います。

ほかにもっとよい方法があればご教授いただきたいです。

1
4
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
1
4