【初心者向け】AWS OpsWorksでSample Stackを使用し、アプリケーションの実行環境をサクッと作ってみた。

今回はnode.jsの実行環境をOpsWorksを使用して作ってみたいと思います。

# AWS OpsWorks stackを作成する
・OpsWorksを選択し、Add your first stack を押下

今回は以下のような構成にします。

1. ”Sample Stack” を選択

2. Operating System typeは “Linux”

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/f0a976d4-8897-b6c1-2cda-24b59a8908c8.png)

Create stackを押下すると、下記画像のように「stack を作成するにはIAMロールが必要だよ」と警告文が出てきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/df0ae00c-2eba-b642-8e92-0090d4116077.png)

というわけで、IAMポリシーを作成した後に、IAMロールを作ってしまいましょう。

----

# IAMポリシーとロールを作成する

先ほどの画像に見て頂くと、警告文の右側に “Learn more“というリンクがあります。(https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-servicerole.html )

そのリンクを踏むと、ポリシーのテンプレートが何種類か出てきますので、それをIAMポリシーの作成の際にコピペして使用します。

今回使用するポリシーは以下の通りです。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "ec2:*",
        "ecs:*",
        "elasticloadbalancing:*",
        "iam:GetRolePolicy",
        "iam:ListInstanceProfiles",
        "iam:ListRoles",
        "iam:ListUsers",
        "rds:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "ec2.amazonaws.com"
        }
      }
    }
  ]
}
```

IAMのページに遷移し、ポリシーを作成を押下後、JSONタブを選択し、上記のポリシーをコピペします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/b34c7b28-7939-83ad-f58c-e6cc70b7ecf9.png)

タグは任意で付け、確認画面で、ポリシーの名前を記入してください。

その後、ポリシーの作成を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/f44b7b15-2610-e645-2fc4-8c45a562a57f.png)

ポリシーの作成が完了したら、続いてOpsworksのロールを作成します

信頼されたエンティティタイプは “AWSのサービス“ を選択し

ユースケースは “他のAWSのサービスのユースケース” の “OpsWorks“ を選択してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/fb482ce6-c926-e923-6ff5-5ce9e15c1061.png)

続いて許可ポリシーは、先ほど作成したポリシーを許可してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/53a7262e-85ba-d21d-fd14-aaa5ede46cc4.png)

最後にロール名を付けたらロールを作成してください。

----

# 再度OpsWorksにてスタックの作成を試みる

以下の画像のように、Sample stackの設定が進みます。

全てにチェックマークが入ると、青いボタンが出現するので押下。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/16e8733f-9133-68cc-5137-60926db1d5b6.png)

My Sample Stackが出来上がりました。

![image-20221016-200444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/37c4ee56-fcd6-988c-b89c-ab33dcd10ff0.png)

インスタンスを起動させてみます

赤枠内をクリックし、遷移したページでインスタンスを起動させます。

![image-20221016-231111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/6dff0b2a-f00a-202e-b386-d945e74549a2.png)

数分経過すると下記の画像のようにオンラインとなります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/d6fcbb03-1fde-12fe-cc65-44c5dc72fce1.png)

記載されてある通り、実行環境がnodejsとあります。

下記記事にも記載されているように、Node.jsは “スケーラブルなネットワークアプリケーションを構築するために設計された非同期型のイベント駆動の JavaScript 環境”です。
(https://nodejs.org/ja/about/)

アプリケーション開発にすぐ取り掛かることができることが分かりました。
ちなみにデフォルトだと、以下のようなサンプルページが表示されました。

![image-20221017-200902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/aef57200-20ab-1e10-dd2a-5c528afe9f55.png)

もひとつちなみに、EC2にログイン時は、OpsWorksのSummaryについて冒頭に出力されるようになっているようです。

![image-20221017-201523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230506/420875b2-3159-c0fd-01ba-6fc3504dfcdb.png)


アプリケーションを開発する実行環境は整ったので、この後は、関心のある方は色々やってみてください。

※なお、今回調べてみて分かりましたが、OpsWorksの記事は少なく、触りながら覚えるウェイトが大きいと感じました。